如何跟踪每个用户的进程和分叉数量?

如何跟踪每个用户的进程和分叉数量?

我需要弄清楚随着时间的推移,完成了多少个分叉以及每个用户运行了多少个并发进程。我的发行版似乎没有跟踪此信息。

我知道如何设置限制,但我有兴趣跟踪每个用户的这些数字。

答案1

尝试使用该psacct软件包(GNU 会计),它应该可以完成您需要的所有操作,一旦安装并启用(accton),然后lastcomm将保留有关用户进程的报告(另请参阅sadump-acct)。请参阅此以供参考:用户执行的命令日志文件

您可能需要升级版本才能记录 PID/PPID,请参阅https://serverfault.com/questions/334547/how-can-i-enable-pid-and-ppid-fields-in-psacct-dump-acct,否则我怀疑它会少报fork()没有exec().

更新 如果您的lastcomm输出F在第二列,则意味着该进程是一个分叉(从未调用exec()用新进程替换自身)。的输出dump-acct 应该以 acct v3 格式显示 PID(和 PPID)。

psacct 的替代方案可能是 new(ish) taskstats,目前还没有大量的支持,AFAICT,请参阅Documentation/accounting/taskstats.txt您的内核版本源。这可能有助于您入门http://code.google.com/p/arsenalsuite/wiki/TrackingIOUsage https://code.google.com/archive/p/anim-studio-tools/ 具体的代码示例是tasklogger.c,您需要修改printf()function 中的行,首先print_delayacct2()替换%u类型,然后添加您需要由用户跟踪的字段(也许)。使用类似的方式调用它(其中表示 CPU 0-1)。然后,您将在每个进程退出时看到实时详细信息。%llu__u64ac_uidac_gidtasklogger -dl -m 0-1-m 0-1

还有一个 perl 模块Linux::Taskstats::Read在CPAN上可用,虽然我没有使用过它。

如果您想要的话,您需要根据时间戳处理数据同时每个用户的进程数,这并不像听起来那么简单。

更新2 好的,需要检查所需支持的内容psacct是:

  1. (官方)内核 >= 2.6.8 用于 v3 会计支持(或向后移植)
  2. 内核CONFIG_BSD_PROCESS_ACCTCONFIG_BSD_PROCESS_ACCT_V3启用
  3. v3 支持会计 ( psacct) 包,如上所述

上述所有的应该在 CentOS 6 中确实如此,我检查过 5.x,它才不是CONFIG_BSD_PROCESS_ACCT_V3=y,所以你必须重建内核才能启用它。

原始版本psacct-6.3.2大约有 15 年历史,Red Hat/CentOS 版本已向后移植 v3 和 PID 显示支持(我现在无法测试它,但它应该可以工作)。

要检查您的内核配置:

zgrep BSD_PROCESS_ACCT /proc/config.gz /boot/config-`uname -r`

答案2

您可以使用ps -ef查看子 pid,父 id 是进行分叉或生成的 id。您可以用来watch定期运行脚本并为您进行计数。

答案3

您可以设置审计子系统记录分叉(以及您喜欢的任何其他系统调用)。

auditctl -a exit,always -S clone

相关内容