sar 보고서를 확인한 결과 하루 전과 같은 특정 시간에 CPU 및 메모리 사용률이 더 높았다는 것을 발견했습니다.
CPU와 메모리를 많이 차지하는 프로세스를 찾을 수 있나요? 어떤 프로세스가 메모리와 CPU를 소비하고 있는지 어떻게 알 수 있습니까?
답변1
아니요.
일부 (정교한) 모니터링을 설정하지 않으면 프로세스가 종료된 후 어떤 프로세스가 CPU를 사용했는지 알 수 없습니다.
테이블과 같은 "표준"은 없습니다.
exec path;exec name;stime,etime,%sys,%io,%wait,%idle,...
실행 중에 프로세스를 캡처해야 합니다.
답변2
crontab -e
# min hr day month day_of_week
# every minute run :
1 * * * * /root/watch_processes.sh
수동으로 한 번 실행하십시오.mkdir /root/process_watch
간단한 스크립트 만들기/root/watch_processes.sh
#!/bin/bash
# %cpu pid command args
ps -eo "%C %P %U %c %a" > /root/process_watch/`date +%Y%m%d_%H%M`
위의 명령은 날짜만 파일 이름으로 사용하여 1분마다 텍스트 파일을 생성하지만 위의 예에서는 모두 지정된 폴더 아래에 위치하게 됩니다 /mkdir/process_watch
. 그에 따라 조정하십시오.
http://linuxcommand.org/lc3_man_pages/ps1.html
ps -eo
필요에 따라 각 프로세스의 출력을 조정합니다. 를 사용하면 %C %P %U %c %a
다음 5개 데이터 열이 생성됩니다.
- CPU%
- 프로세스 번호
- 사용자 이름
- 명령 실행
- 실행할 명령에 제공된 매개변수
각 파일의 첫 번째 열에 0.0이 포함된 여러 목록이 표시됩니다. 0% CPU 프로세스를 필터링하는 데 능숙 awk
하거나 위의 구문을 추가할 수 있습니다.sed
말했듯이 프로세스가 발생하는 대로 캡처해야 합니다. 일단 프로세스가 완료되면 pid#이 %cpu를 사용한 시점에 대한 기록이 없습니다. 너 하나 만들어야 해공정 관찰이렇게 하고 다시 돌아가서 범인을 찾으세요.
답변3
과거의 CPU/메모리/디스크/네트워크 상태는 도움말을 통해 확인할 수 있습니다 atop -r
. 그런 다음 t또는 를 눌러 T뒤로 또는 앞으로 이동합니다.
답변4
이는 명령의 출력을 top
파일에 저장하여 수행할 수 있습니다.
스크립트:
NOW=`date "%y%m%d_%H%M%S"` ## to print the time.
echo "$NOW"
top > <PATH_TO_FILE>
exit 0
완료되면 이 스크립트를 cron에 넣어 특정 내부에서 실행할 수 있습니다!