Счетчики приложений в Linux? (и OSX?)

Я пытаюсь выяснить, есть ли библиотека, которая дает мне что-то около эквивалента пользовательских счетчиков производительности Windows (описано здесь http://geekswithblogs.net/.NETonMyMind/archive/2006/08/20/88549.aspx)

В принципе, я ищу что-то, что можно использовать для отслеживания глобальных счетчиков в приложении и (в идеале) того, что представляет эту информацию через четко определенный интерфейс для других приложений/пользователей. Это статистика приложений; такие вещи, как память и диск, могут быть захвачены другими способами, но я ищу, чтобы выявить пропускную способность/транзакции/ "виджеты", обработанные в течение всего срока службы моего приложения.

Я видел этот вопрос:

Понятие "счетчики производительности" в Linux/Unix

и этот

Счетчики уровня реестра в Linux, доступные из Java

но я не совсем то, что ищу. Я не хочу писать статический файл (это, в конце концов, динамическая информация, я должен иметь возможность получить на нем, даже если диск заполнен и т.д.), И, скорее всего, избегать встроенного кода кода. В идеале, по крайней мере, в Linux эти данные будут (по-моему) всплывать через /proc в некотором роде, хотя мне непонятно, может ли это быть сделано из userland (это менее важно, если оно появляется в некоторых путь к клиентам.)

Но вернемся к сути вопроса: есть ли встроенная или подходящая сторонняя библиотека, которая дает мне настраиваемые глобальные (потокобезопасные, эффективные) счетчики, подходящие для метрик приложения, которые я могу использовать в Linux и других * Операционные системы NIXy? (И может быть сопряжен с C/С++?)

Ответ 1

В дополнение к @user964970 комментарий/решение, я предлагаю сделать его агностиком OS.

Используйте API-интерфейс агностики OS, например ACE или BOOST, для создания собственной библиотеки, снабжающей счетчик с защитой от записи с именем семафора, помещенный в сегмент с именем-shared-memory.

Это должен быть ваш API библиотеки:

long * createCounter(const char * name); // Create a counter
                                         // Will create a named semaphore and a named
                                         // shared memory segment, holding the counter     
                                         // value. Will return pointer to counter
long * getCounter(const char * name); // Get existing counter pointer
                                      // in the calling process' address space
long incCounter(const char * name);   // increment existing counter