我需要弄清楚随着时间的推移,完成了多少个分叉以及每个用户运行了多少个并发进程。我的发行版似乎没有跟踪此信息。
我知道如何设置限制,但我有兴趣跟踪每个用户的这些数字。
答案1
尝试使用该psacct
软件包(GNU 会计),它应该可以完成您需要的所有操作,一旦安装并启用(accton
),然后lastcomm
将保留有关用户进程的报告(另请参阅sa
和dump-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
__u64
ac_uid
ac_gid
tasklogger -dl -m 0-1
-m 0-1
还有一个 perl 模块Linux::Taskstats::Read
在CPAN上可用,虽然我没有使用过它。
如果您想要的话,您需要根据时间戳处理数据同时每个用户的进程数,这并不像听起来那么简单。
更新2
好的,需要检查所需支持的内容psacct
是:
- (官方)内核 >= 2.6.8 用于 v3 会计支持(或向后移植)
- 内核
CONFIG_BSD_PROCESS_ACCT
已CONFIG_BSD_PROCESS_ACCT_V3
启用 - 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