加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

Linux中每个进程的程序化资源监视

发布时间:2020-12-14 02:19:13 所属栏目:Linux 来源:网络整理
导读:我想知道是否有一种有效的解决方案来监控 Linux中的进程资源消耗(cpu,内存,网络带宽).我想在C中编写一个守护进程来监视某些给定的PID.据我所知,经典的解决方案是定期从/ proc读取信息,但这似乎不是最有效的方式(它涉及许多系统调用).例如,要监视50个进程每秒
我想知道是否有一种有效的解决方案来监控 Linux中的进程资源消耗(cpu,内存,网络带宽).我想在C中编写一个守护进程来监视某些给定的PID.据我所知,经典的解决方案是定期从/ proc读取信息,但这似乎不是最有效的方式(它涉及许多系统调用).例如,要监视50个进程每秒的内存使用情况,我必须每秒从/ proc打开,读取和关闭50个文件(这意味着150个系统调用).更不用说阅读这些文件时涉及的解析.

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

您是否知道这些方法是否有更有效的替代方案或任何处理此问题的库?

解决方法

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

Taskstats is a netlink-based interface for sending per-task and
per-process statistics from the kernel to userspace.

Taskstats was designed for the following benefits:

  • efficiently provide statistics during lifetime of a task and on its exit
  • unified interface for multiple accounting subsystems
  • extensibility for use by future accounting patches

此界面允许您根据您选择的进程监视CPU,内存和I / O使用情况.您只需在单个套接字上设置和接收消息.

这不区分(例如)磁盘I / O与网络I / O.如果这对您很重要,您可能会使用跟踪套接字操作的LD_PRELOAD拦截库.当然,假设你可以控制你想要观察的程序的启动,并且它们不会在背后诡计.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读