Mag*_*oud 5 shell process monitoring fork
最近我在我们的服务器上遇到了一个负载过高的问题。我观察top
了半个小时,发现是 Nagios 分叉了许多短命的进程。在弹跳 Nagios 之后,一切都恢复了正常。
我的问题是,如何更快地找出像这样分叉的根进程?
谢谢。
如果您运行支持 的操作系统dtrace
,此脚本将帮助您识别哪些进程正在启动短期进程:
#!/usr/sbin/dtrace -qs
proc:::exec
{
self->parent=stringof((unsigned char*)curpsinfo->pr_psargs);
}
proc:::exec-success
/self->parent != NULL/
{
printf("%s -> %s\n",self->parent,curpsinfo->pr_psargs);
self->parent=NULL;
}
Run Code Online (Sandbox Code Playgroud)
如果您使用的操作系统不受支持dtrace
,请考虑替代方案,例如systemtap
使用sysdig
Linux、ProbeView
AIX。
这是一个sysdig
脚本,将显示所有命令的启动和退出时间以及它们的pid
和ppid
:
sysdig -p"*%evt.time %proc.pid %proc.ppid %evt.dir %proc.exeline" \
"( evt.dir=< and evt.type=execve ) or evt.type=procexit"
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用操作系统启用进程统计(如果可用,通常是acct
Linux 下的软件包)并查看生成的日志。还有一个top
利用流程会计的类似程序:atop。