더 많이 분기된 프로세스를 찾는 방법은 무엇입니까?

더 많이 분기된 프로세스를 찾는 방법은 무엇입니까?

최근 내 서버에 높은 부하 문제가 발생했습니다. 약 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리눅스를 사용하면,ProbeViewAIX와 함께.

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"

또 다른 방법은 운영 체제(사용 가능한 경우 일반적으로 acctLinux의 패키지)를 사용하여 프로세스 계정을 활성화하고 결과 로그를 보는 것입니다. top프로세스 회계를 활용하는 유사한 프로그램 도 있습니다 .위에.

답변2

노력하다 top -Sd1. 이는 자체 시간뿐만 아니라 각 프로세스의 누적 시간을 표시합니다. 여기에서의 누적은 프로세스에서 소비한 시간과 더 이상 존재하지 않는 하위 프로세스에서 소비한 시간을 나타냅니다.

일반적으로 더 빠르게 상승하는(그리고 아마도 이미 충분히 높은) 프로세스가 당신이 찾고 있는 프로세스입니다. 그런 다음 프로세스를 추적하여 의심 사항을 확인할 수 있습니다.

답변3

ps ej |cut -d" " -f1 |sort |uniq -c

실제로 ps ej프로세스 상위 프로세스의 PID가 표시되므로 프로세스가 많이 포크되면 모든 하위 프로세스가 동일한 Ppid를 갖게 됩니다.

cut -d" " -f1ps 출력의 첫 번째 필드만 유지할지 여부, 그 다음 sort데이터, 마지막으로 uniq -c각 고유 pid의 발생 횟수가 표시됩니다.

배열을 통해 발생 횟수를 계산하는 awk 전용 버전도 있을 수 있습니다. ps ejx |awk -n '{count[$1]++}END{for(j in count) print "process:" j, "("count[j]")"}'

관련 정보