【发布时间】: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 规范的通用性尚不清楚。