在Linux中的应用计数器?(以及OSX?)

12
我正在尝试找到一个类似于Windows自定义性能计数器的库(在此处描述:http://geekswithblogs.net/.NETonMyMind/archive/2006/08/20/88549.aspx),用于跟踪应用程序中的全局计数器,最好能够通过明确定义的接口向其他应用程序/用户呈现信息。这些是应用程序统计信息;像内存和磁盘之类的东西可以以其他方式捕获,但我想公开应用程序生命周期中处理的吞吐量/事务/“小部件”。
我看到了这个问题:Linux/Unix中“性能计数器”的概念 和 这个问题 可从Java访问的Linux注册表级别计数器 ,但都不完全符合我的要求。我不想编写静态文件(毕竟这是动态信息;即使磁盘已满等情况下也应该能够获取它),而且如果可能的话,最好避免自行编写代码。在Linux上,理想情况下,这些数据将通过/proc以某种方式展示,尽管我不确定是否可以从用户空间执行此操作(只要这些数据以某种方式公开给客户端即可)。
但回到问题的核心:是否有任何内置或适合的第三方库可用于创建适用于Linux和其他*NIX操作系统的自定义全局(线程安全、高性能)计数器,以进行应用程序度量,并且可以从C/C++接口?

2
一直在寻找同样的东西,但到目前为止还没有找到。对我来说最简单的方法是在共享内存段中公开应用程序计数器。给定这些计数器的标准结构,在Linux上通过查看/dev/shm/可以很容易地从外部遍历它们。通过/proc公开它们可能会更好-只要应用程序不必进行系统调用来更新它们。 - user964970
1
Windows性能计数器不是内核函数。它们被实现为一个API,具有提供对计数器访问的应用程序共享库(.dll)。计数器通常作为应用程序公开的共享内存对象来实现。这样,它们几乎不需要更新,并且有一种特定于应用程序的方法来解释它们。不应该有任何需要/proc集成的需求。也许Argus查看器可以用于非Java应用程序(http://sourceforge.net/projects/argusjmx)在Linux中,尽管JMX规范的货币性不明确。 - Pekka
1个回答

1

除了@user964970的评论/解决方案之外,我建议使它与操作系统无关。

使用一个与操作系统无关的API,例如ACE或BOOST,创建自己的库,提供一个命名信号量写保护计数器,放置在命名共享内存段中。

这应该是你的库的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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接