首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux中每进程的编程资源监控

Linux中每进程的编程资源监控
EN

Stack Overflow用户
提问于 2009-11-03 05:19:29
回答 5查看 5K关注 0票数 9

我想知道在Linux中是否有有效的解决方案来监控进程资源消耗(cpu、内存、网络带宽)。我想在C++中编写一个守护进程,对一些给定的PID执行此监控。据我所知,经典的解决方案是定期从/proc读取信息,但这似乎不是最有效的方式(它涉及许多系统调用)。例如,为了每秒监视50个进程的内存使用情况,我必须每秒从/proc打开、读取和关闭50个文件(这意味着150个系统调用)。更不用说读取这些文件时所涉及的解析了。

另一个问题是网络带宽消耗:对于我想要监控的每个进程,都不能很容易地计算出来。在我看来,NetHogs采用的解决方案涉及到相当高的开销:它使用libpcap捕获并分析每个数据包,然后为每个数据包确定本地端口,并在/proc中搜索以找到相应的进程。

您是否知道是否有比这些方法更有效的替代方法,或者是否有处理此问题的库?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-11-03 06:29:55

/usr/src/linux/Documentation/accounting/taskstats.txt

Taskstats是一个基于netlink的接口,用于将每个任务和每个进程的统计数据从内核发送到用户空间。

Taskstats的设计具有以下优点:

对于多个记帐subsystems

  • extensibility,
  • 可在任务的生命周期及其退出
  • 统一界面上高效地提供统计信息,以供将来的记帐补丁

使用

此界面允许您按自己选择的进程监视CPU、内存和I/O使用情况。您只需要在单个套接字上设置和接收消息。

这并不区分(例如)磁盘I/O和网络I/O。如果这对您很重要,那么您可以使用跟踪套接字操作的LD_PRELOAD拦截库。当然,假设您可以控制您希望观察的程序的启动,并且它们不会在您背后进行欺骗。

如果这些仍然失败,我想不出任何轻量级的解决方案,但linux-audit可以全局跟踪syscall,这似乎比重新捕获和分析您自己的网络流量更直接一些。

票数 5
EN

Stack Overflow用户

发布于 2009-11-06 00:08:45

看看linux跟踪工具包(LTTng)。它将跟踪点插入到内核中,并进行了一些后处理,以获得您所询问的一些统计数据。如果您捕获所有内容,跟踪文件会变得很大,但如果您限制武装的事件类型,则可以使跟踪文件变得易于管理。

http://lttng.org了解更多信息...

票数 2
EN

Stack Overflow用户

发布于 2009-11-06 00:27:10

关于网络带宽:This Superuser answer描述了处理/proc/net/tcp来收集网络带宽使用情况。

我知道iptables可以用来进行网络记帐(例如,请参阅LWN'sLinux.com'sShorewall's文章),但我没有看到任何实用的方法来按进程进行记帐。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1663766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档