【问题标题】:Application counters in Linux? (and OSX?)Linux中的应用程序计数器? (和 OSX?)
【发布时间】:2012-05-18 13:08:59
【问题描述】:

我试图弄清楚是否有一个库可以为我提供与 Windows 自定义性能计数器相当的东西(在此处描述 http://geekswithblogs.net/.NETonMyMind/archive/2006/08/20/88549.aspx

基本上,我正在寻找既可用于跟踪应用程序中的全局计数器的东西,又可以(理想情况下)通过明确定义的界面向其他应用程序/用户呈现该信息的东西。这些是应用统计信息;可以通过其他方式捕获内存和磁盘等内容,但我希望公开在我的应用程序生命周期内处理的吞吐量/事务/“小部件”。

我看过这个问题:

Concept of "Performance Counters" in Linux/Unix

还有这个

Registry level counters in Linux accessible from Java

但两者都不是我想要的。我不想编写静态文件(这毕竟是动态信息;即使磁盘已满等我也应该能够得到它),并且如果可能的话,宁愿避免使用自制的代码集。理想情况下,至少在 Linux 上,这些数据(我认为)会以某种方式通过 /proc 出现,尽管我不清楚这是否可以从用户空间完成(这不太重要,只要它出现在某些客户的方式。)

但回到问题的关键:是否有任何内置或合适的 3rd-party 库可以为我提供适合我可以在 Linux 和其他应用程序指标上使用的自定义全局(线程安全、高性能)计数器 * NIXy 操作系统? (并且可以从 C/C++ 接口?)

【问题讨论】:

  • 一直在找一样的,目前还没有找到。对我来说最简单的方法是在共享内存段中公开应用程序计数器。给定这种计数器的标准结构,在 Linux 上很容易通过查看 /dev/shm/ 从外部遍历它们。通过 /proc 公开它们可能会更好 - 只要应用程序不必执行系统调用来更新它们。
  • Windows 性能计数器不是内核函数。它们被实现为带有应用程序共享库 (.dll) 的 API,该库提供对计数器的访问。反过来,计数器通常被实现为应用程序公开的共享内存对象。这样,更新它们几乎不需要花费任何成本,并且有一种特定于应用程序的方式来解释它们。应该不需要 /proc 集成。也许 Argus 查看器可用于 Linux 中的非 Java 应用程序 (sourceforge.net/projects/argusjmx),尽管 JMX 规范的通用性尚不清楚。

标签: linux performancecounter


【解决方案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

【讨论】:

    猜你喜欢
    • 2021-10-17
    • 1970-01-01
    • 2018-06-04
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-27
    相关资源
    最近更新 更多