첫째, 프로세스 목록을 저장하는 것을 잊었습니다. 서버를 다시 시작해야 해서 많은 정보를 제공할 수 없었습니다.
작은 VPS가 있습니다. 상단과 제어판 그래프의 CPU 사용량은 모두 100%이며 하루 종일 높았습니다(오늘 아침에 웹 서버가 요청에 응답하지 않는 것을 발견했습니다). VPS를 다시 시작한 후 CPU가 4% 미만으로 돌아갑니다(저만 웹서버를 사용하므로 실제 부하가 없습니다).
이유는 무엇입니까? 이런 일이 다시 발생하면 어떻게 조사해야 합니까?
답변1
커널 프로세스, 드라이버 또는 인터럽트에서 CPU가 소비될 수 있습니다.
이것은 답이 아니라 문제를 해결하는 방법입니다. 이 방법의 일부 세부 사항은 Linux에만 적용됩니다. sysstat
aka 패키지를 설치 sar
하고 sar-collection crontab을 수정하거나 추가합니다(RedHat 시스템에서 /etc/cron.d/sysstat
):
* * * * * root /usr/lib64/sa/sa1 -L -F -S XALL 10 6
한 달에 3GB 이상을 축적할 수 있도록 준비하세요 /var/lib/sa
. 귀하의 버전이 둘 다 지원하지 않는 경우 -L
다음 -F
cron 항목을 추가하십시오.
57 23 * * * root rm -f /var/log/sa/sa`date --date=tomorrow +\%d`
하루 후, sar -f /var/log/sa/saXX -C
XX를 어제의 날짜로 선행하는 0으로 시작하는 정수(즉, 01, 02, ... 10, 11 ... 31)로 사용합니다. CPU가 높은 기간을 찾으면 해당 기간에 대한 sar 보고서를 확인할 수 있습니다.
- 방해하다(
-I ALL
) - 네트워크 사용량(
-n DEV
) - 디스크 I/O(
-b
)
CPU가 10시 15분에서 10시 18분 사이에 점프하는 것을 본다고 가정해 보겠습니다. 다음과 같이 현재 날짜(05)에 sar를 실행합니다.
sar -f /var/log/sa/sa05 -s 10:14:00 -e 10:19:00 -I ALL -n DEV -b | less
각 측면에 1분씩 추가하여 시청 중뿐만 아니라 전/중/후를 시청하실 수 있습니다.
여전히 아무것도 표시되지 않고 다른 sar 매개변수를 살펴봤지만아직아무것도 볼 수 없습니다. cron에 다음을 추가해 보세요.
* * * * * { date; /bin/ps -A --sort tty,comm,pid -ww -o pgrp:8,tty:7,pid,c,pmem:5,rss:8,sz:8,size:8=TSIZE,vsz:8,nlwp,lstart,args ;} >>/var/log/procscan
이 파일은 매우 커질 수 있으므로 다음 날 파일을 회전하거나 cronjob을 비활성화해야 합니다. 하지만 이 출력에서 범인을 찾을 수 있습니다.
이 cronjob의 일부 문제를 해결하기 위해 래퍼 스크립트와 지원 파일 세트를 만들어 github에 올렸습니다. 당신은 그들을 찾을 수 있습니다여기 (github의 프로젝트 링크)