최근 내 서버에 높은 부하 문제가 발생했습니다. 약 30분 동안 지켜본 top
결과 Nagios가 많은 단기 프로세스를 포크했다는 것을 발견했습니다. Nagios를 튕긴 후 모든 것이 정상으로 돌아 왔습니다.
내 질문은 어떤 루트 프로세스가 이러한 분기를 많이 생성하는지 어떻게 더 빨리 찾을 수 있느냐는 것입니다.
감사해요.
답변1
지원되는 운영 체제를 실행 중인 경우 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
다음과 같은 대안을 찾아보세요.systemtap
또는sysdig
리눅스를 사용하면,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"
또 다른 방법은 운영 체제(사용 가능한 경우 일반적으로 acct
Linux의 패키지)를 사용하여 프로세스 계정을 활성화하고 결과 로그를 보는 것입니다. top
프로세스 회계를 활용하는 유사한 프로그램 도 있습니다 .위에.
답변2
노력하다 top -Sd1
. 이는 자체 시간뿐만 아니라 각 프로세스의 누적 시간을 표시합니다. 여기에서의 누적은 프로세스에서 소비한 시간과 더 이상 존재하지 않는 하위 프로세스에서 소비한 시간을 나타냅니다.
일반적으로 더 빠르게 상승하는(그리고 아마도 이미 충분히 높은) 프로세스가 당신이 찾고 있는 프로세스입니다. 그런 다음 프로세스를 추적하여 의심 사항을 확인할 수 있습니다.
답변3
ps ej |cut -d" " -f1 |sort |uniq -c
실제로 ps ej
프로세스 상위 프로세스의 PID가 표시되므로 프로세스가 많이 포크되면 모든 하위 프로세스가 동일한 Ppid를 갖게 됩니다.
cut -d" " -f1
ps 출력의 첫 번째 필드만 유지할지 여부, 그 다음 sort
데이터, 마지막으로 uniq -c
각 고유 pid의 발생 횟수가 표시됩니다.
배열을 통해 발생 횟수를 계산하는 awk 전용 버전도 있을 수 있습니다.
ps ejx |awk -n '{count[$1]++}END{for(j in count) print "process:" j, "("count[j]")"}'