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

Jul*_*ien 5 linux process logs centos fork

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

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

mr.*_*tic 6

试试这个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()在功能上线print_delayacct2(),首先更换%u%llu__u64类型,其次是添加字段ac_uid(也许ac_gid),您需要通过用户跟踪。用类似的东西调用它tasklogger -dl -m 0-1(其中-m 0-1表示 CPU 0-1)。然后,您将在每个进程退出时看到实时详细信息。

Linux::Taskstats::ReadCPAN 上还有一个 perl 模块,虽然我没有使用过。

如果您想要每个用户的并发进程计数,则需要根据时间戳处理数据,这听起来并不简单。

更新 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`
Run Code Online (Sandbox Code Playgroud)