Shell

如何找出分叉很多的程序?

  • March 26, 2019

最近我在我們的伺服器上遇到了負載過高的問題。我看了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;
}

如果您使用的是沒有dtrace支持的作業系統,請查看替代方案,例如使用 Linuxsystemtap或使用 AIX。sysdigProbeView

這是一個sysdig腳本,它將顯示所有命令的啟動和退出時間及其pidppid

sysdig -p"*%evt.time %proc.pid %proc.ppid %evt.dir %proc.exeline" \
   "( evt.dir=< and evt.type=execve ) or evt.type=procexit"

另一種方法是使用您的作業系統啟用程序記帳(如果可用,通常是acctLinux 下的軟體包)並查看生成的日誌。還有一個top類似的程序可以利用流程記帳:atop

引用自:https://unix.stackexchange.com/questions/231294