RHEL 6.3 시스템에서 프로세스가 실행되고 있습니다. 어쨌든 이는 다른 시스템에서 실행되는 동일한 프로세스보다 처리하는 데 시간이 더 오래 걸립니다. 프로세스가 느리게 실행되는 이유 또는 프로세스 속도를 늦추는 병렬로 실행되는 다른 프로세스가 있는지 어떻게 알 수 있습니까?
답변1
top
또는 을 사용하여 무슨 일이 일어나고 있는지 디버깅해 볼 수 있습니다 htop
.
top
& htop
특정 프로세스에서 소비하는 리소스의 양을 표시합니다. 프로세스를 다음과 같이 실행하겠습니다. /usr/bin/time myproc
실제로 시작하는 데 시간이 얼마나 걸리는지 확인합니다. 이 명령은 두 시스템 모두에서 동일한 사용자 시간이지만 다른 실행 시간을 표시해야 합니다.
프로세스가 각 시스템에서 동일한 양의 "유효" 시간을 소비하고 있음을 확인한 후에는 또는 어떤 "다른" 프로세스가 시스템 속도를 저하시켜 프로세스가 machineA.machineA B에서 더 오랜 시간을 소비하는지 확인할 수 top
있습니다 htop
.
예
다음 스크립트가 있다고 가정해 보겠습니다 doit.bash
.
#!/bin/bash
a=0
while [ 1 ]; do
let a=a+1
(( $a==100000 )) && exit
done
그런 다음 제거된 시스템에서 실행했습니다.
$ /usr/bin/time ./doit.bash
1.25user 0.10system 0:01.38elapsed 98%CPU (0avgtext+0avgdata 1272maxresident)k
0inputs+0outputs (0major+366minor)pagefaults 0swaps
그런 다음 이 명령을 실행하여 상자의 일부 부하를 시뮬레이션했습니다.
$ dd if=/dev/zero of=/dev/null
반복 실행 doit.bash
:
$ /usr/bin/time ./doit.bash
2.32user 0.20system 0:02.98elapsed 84%CPU (0avgtext+0avgdata 1268maxresident)k
0inputs+0outputs (0major+365minor)pagefaults 0swaps
doit.bash
전체 사용자 시간과 실행 시간 모두에서 실행 시간이 더 길어지는 것을 확인할 수 있습니다 .
- run1 - (사용자): 1.25초 - (경과): 1.38초
- run2 - (사용자): 2.32초 - (경과): 2.98초
노트:완료되면 Ctrl+가 C명령을 실행하고 있는지 확인하세요.dd
답변2
프로세스가 CPU 바인딩인지 IO 바인딩인지 알고 있나요? CPU만 필요하다면 top
그것은 당신의 친구입니다. IO가 제한된 경우 vmstat -Sm 5
, iotop -od5
및 을 확인하십시오 iostat -m 5
. 문제가 느리고 성능이 떨어지는 장치로 인해 발생하는지, 아니면 성능이 떨어지는 시스템에서 다른 프로그램이 실행되고 있는지 알아보세요.
바인딩된 것이 CPU인지 IO인지 알 수 없는 경우 먼저 상단의 System IO Wait 값( )을 top
살펴보세요 . wa
하나 이상의 CPU가 IO를 기다리고 있는 경우 IO 대기 값이 증가합니다. 유휴 상태가 많고 IO 대기 값이 낮다면 프로세스가 일종의 동기화 이벤트(아마도 로컬 또는 네트워크를 통한 일종의 잠금)를 기다리고 있는 것입니다.