CPU 나 디스크를 과도하게 사용하지 않더라도로드가 높은 이유


20

나는 다음과 같은 결과를 얻고있다 top:

Cpu(s): 43.8%us, 32.5%sy,  4.8%ni,  2.0%id, 15.6%wa,  0.2%hi,  1.2%si,  0.0%st
Mem:  16331504k total, 15759412k used,   572092k free,  4575980k buffers
Swap:  4194296k total,   260644k used,  3933652k free,  1588044k cached

의 출력 iostat -xk 6결과는 다음과 같습니다.

Device: rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda       0.00   360.20   86.20  153.40  1133.60  2054.40    26.61     1.51    6.27   0.77  18.38
sdb       0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdd      22.60   198.80   17.40   31.60   265.60   921.60    48.46     0.18    3.70   1.67   8.20
sdc      16.80   218.20   22.20   23.40   261.60   966.40    53.86     0.21    4.56   1.49   6.78

위의 내용을 바탕으로 뭔가 과부하가 걸리는 것처럼 보입니다. 근데 뭐?

질문

  1. 하드 디스크 나 CPU가 아닌 경우 어떻게해야합니까?
  2. CPU 시간의 15.6 %가 대기하는 것처럼 보입니다. 정확히 무엇을 기다리고 있을까요?

2
CPU 사양은 무엇이며 부하는 얼마입니까?
sepehr

로드는 100 이상
user4951

부하는 CPU 및 CPU 코어 수에 비례합니다. 시스템의 CPU 사양은 무엇입니까?
sepehr

답변:


49

설명 포인트로서로드는 CPU에 직접 연결되지 않습니다. 이것은로드에 대한 가장 일반적인 오해 중 하나입니다. 당신이 디스크를 언급한다는 사실은 당신이 이것을 알고 있다는 것을 인정하는 것처럼 보이지만, 일부는 그렇지 않다고 믿는 의견을 보면서 디스크를 언급하고 싶었습니다.

로드는 시스템 리소스를 기다리는 프로세스 수로 정의됩니다. 이것은 일반적으로 CPU, 디스크 또는 네트워크이지만 실제로는 하드웨어 일 수 있습니다.
"프로세스"도 전체 프로세스 일 필요는 없습니다. 스레드는 "경량 프로세스"로 정의되며 대기중인 각 스레드는로드 수를 증가시킵니다.


어떤 프로세스가 문제인지 파악하려면 :

실행 top -H( -H스레드 표시 가능)

키보드 단축키는 버전에 따라 다릅니다.

최신 버전 (3.3 이후) :

를 눌러 f필드 옵션을 불러옵니다.
이동하려면 화살표 키를 사용하여 S = Process Status키를 누릅니다 s. 메인 페이지로 돌아가려면을
누르십시오 q. 정렬을 반대로하려면 + 를
누릅니다 .ShiftR

오래된 상단 (3.3 이전) :

Shift+ o를 눌러 정렬 옵션을 불러옵니다.
그런 다음 w프로세스 상태별로 정렬하십시오.
그런 다음 Enter메인 페이지로 돌아갑니다.
그런 다음 Shift+ R를 사용하여 정렬을 반대로하십시오.

그런 다음 S열에서 D또는 이있는 프로세스를 찾으십시오 R(이제 맨 위에 있어야 함). 시스템로드에 기여하는 프로세스입니다.

프로세스에가 표시되면 D"무정전 절전 모드"를 의미합니다. 일반적으로 프로세스가 I / O (디스크, 네트워크 등)에서 대기 중일 때 발생합니다.
프로세스에가 표시되면 R정상적인 계산을 수행하는 것입니다.


해당 프로세스가 수행하는 작업에 대한 자세한 정보를 찾으려면 다음을 수행하십시오.

최신 버전 (3.3 이후) :

를 눌러 f필드 옵션을 불러옵니다.
화살표 키를 사용하여을 WCHAN = Sleeping in Function눌러 d활성화하십시오.
그런 다음 q메인 페이지로 돌아갑니다.

오래된 상단 (3.3 이전) :

눌러 f다음 y에이블하는 WCHAN필드.

시스템이 필요한 커널 옵션을 가지고 있으며, WCHAN 파일이 시스템에있는 경우 (이이며,이 호출 무엇을 어디 잊지)WCHAN필드는 필드 그냥 표시되면 프로세스가 현재 (실행중인 것을 커널 기능을 표시해야합니다 -또는 ?모든 것을 지원하지 않습니다).
여기에 약간의 구글이 있고 당신은 길에 있어야합니다.

wchan 지원이없는 경우 strace프로세스에서 항상 수행중인 작업을 찾으려고 시도 할 수 있지만 어려운 방법입니다.


나는 보통 왼쪽 화살표를 눌러 정렬을 변경합니다.
니모

2

작업 컴파일 또는 루프에서 실패한 프로세스와 같이 수명이 짧은 프로세스는 종종 topiostat 등의 모니터링 도구에 표시되지 않습니다 .

그러한 경우 Linux Audit Framework가 도움이 될 것입니다

범인, 예를 들어 실패 루프

while :; do gcc /dev/zero ; done >/dev/null 2>&1

auditd / auditctl을 사용하려면

apt-get install auditd
auditctl -a task,always
ausearch -i -sc execve

모든 프로세스 실행 로그 에서 도난


에 표시 top되지 않으면 평균로드에 기여하지 않는 것입니다. 로드 평균에 기여하려면 오랫동안 대기 상태에 있어야합니다. 통계적으로 이것은에 표시 될 것임을 의미합니다 top. 그렇지 않은 경우 중요한 기여자가 아닙니다.
Patrick

0

NFS 마운트 연결이 끊어졌을 때 불행히도 실수를했고 소프트 마운트 옵션을 사용하지 않아서 모니터링, lsof 및 bash 세션을 포함한 많은 프로세스가 Linux 서버에 멈췄습니다 ....

손상된 마운트를 마운트 해제 한 후 시스템이 오버로드 된 것으로 보입니다.

top - 00:03:48 up 15 days, 14:56,  3 users,  load average: 29, 21, 20

이것은 끔찍해 보이지만 CPU 사용량은 15 % 미만이며 디스크 I / O가 없습니다. ps를 통해 조언을 얻었지만 프로세스가 대부분 잠자고있는 것처럼 보였으므로 도움이되지 않았습니다.

그런 다음 man ps밤에 잠을 자지 못했습니다. 조사 후 나는 프로세스 가 고착되어 있음을 확인하면서 매우 중요한 STATUS 플래그를 보았습니다 .

실행 :

ps -e v

STAT 열 이 D있거나 SL있는 프로세스를 찾으십시오 . 이것들은 좀비 프로세스와 같았지만 Z-좀비로 식별되지 않았습니다.

D-대부분 디스크 (I / O) 활동을 의미하지만, ps -e v몇 번 실행해도 iostat 3활동이없는 경우 이는 i / o에 멈 췄음을 나타냅니다 .

SL-이는 해당 프로세스의 메모리에 잠금 페이지가 있음을 의미하므로이 프로세스가 이와 같이 작동하지 않아야 함을 식별 할 수있는 경우 변경없이 더 오래 지속되는 경우 다음 후보가 될 수 있습니다.

조사 후 나는 하나씩 죽이고 내 시스템로드 평균은 정상이되었다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.