CPU로드는 높지만 최상위 프로세스는 모두 약 0 % 있지만 그 이유를 알

우리는 비정상적으로 높은 부하와 CPU 유틸리티를 가진 서버를 가지고 있지만 그 이유를 알 수는 없습니다. 우리가 정상을 돌 때 모든 procs는 매우 낮은 CPU 인 것처럼 보입니다.

http://cl.ly/2d1g0K3q261r0R0K3e35

이 원인을 찾는 더 좋은 방법이 있습니까?



답변

이 버그 가 당신의 경우 라고 생각 합니다 . 출력에서 볼 수 있듯이 충분한 메모리 (캐시 된 14GB 정도), I / O 문제는 없지만 xen 관련 프로세스가 실행 중입니다. 이것은 내가 버그라고 생각하게합니다.


답변

로드는 시스템이 1, 5 및 15 분 단위로 수행 한 워크로드를 측정 한 것입니다.

가장 일반적인 오해는 Load Average가 시스템의 CPU 사용량과 순수하게 연결되어 있다는 것입니다.
그러나로드에는 CPU가 I / O를 기다리는 등의 추가 측정이 포함되어 있습니다.

이미지를 기반으로 메모리가 부족하고 데이터를 디스크로 스왑하기 시작한 것 같습니다.

간단한 free -m것은 얼마나 많은 RAM과 스왑이 사용되는지 알려줍니다.
흥미로운 열은 옆에있는 빈 열 -/+ buffers/cache입니다.
0에 가까우면 RAM이 부족하고 그에 따라 작동해야합니다.


답변

로드 평균이 상당히 높다는 것을 알 수 있습니다 (68, 와우). 약간의 CPU를 차지하는 많은 프로세스가있을 수 있으므로 모든 CPU 시간을 소비 할 수 있습니까? 어쩌면, 그 프로세스는 매우 빨리 시작하고 끝나기 때문에 top은 그 존재를 포착 할 수 없으므로 꼭대기에서 볼 수 있는지 볼 수 있습니다.


답변

시험

iotop

IO는 대부분의 시간이었습니다.


답변

다음을 사용하십시오.

top -o cpu

-o플래그는 내림차순으로 CPU 사용에 의해 프로세스를 주문 상단 강제 할 것이다.


답변

nfs의 파일 또는 다른 프로세스가 액세스해야하는 파일을 잠그는 다른 파일 일 수 있습니다.

너무 많은 스레드를 활성화하여 구성된 서비스를 놓칠 수도 있습니다.


답변

CPU 사용량이 스레드에서 발생하는 것 같습니다. top이것을 고려하지 않은 것 같습니다. 나는 최근에 이것을 mysql 서버에서 보았다. INSERT 문이 실행 중이지만 mysqld의 일부 스레드가 테이블 인덱스를 업데이트했기 때문에 SELECT로 새 행을 가져올 수 없습니다. top은 하나의 코어에 100 % 사용자로드를 표시하지만 mysqld를 포함한 모든 프로세스는 0.0 % CPU입니다. 몇 시간 후 동일한 SELECT가 예상 결과 세트를 제공했습니다.

또한보십시오

스레드 당 CPU 통계 얻기

‘중지’프로세스 및 스레드 CPU 사용량?