ls
Ubuntu Linux 터미널에서 다음 명령을 실행(10,000회)하고 이를 사용하여 top
CPU 사용량을 모니터링했습니다. top
총 CPU 사용량(라인 2)은 약 48%(사용자 13.1% + 코어 34.9%)로 표시되지만 아래 목록에는 올바른 CPU 사용량이 반영되지 않습니다 . CPU의 6.5%만이 bash 프로세스와 관련되어 있습니다. 참고: Irix 모드를 꺼두었으므로 6.5%는 행 2와 같습니다.
for i in {1..10000}; do (ls /tmp/ >/dev/null); done
또한 "커널 스레드 숨기기" 옵션을 선택 취소해 보았지만 htop
동일한 결과를 얻었습니다.
시스템의 어떤 부분이 CPU(코어?)를 사용하고 있으며 왜 top
/hidden 입니까 htop
?
답변1
수명주기가 매우 짧은 많은 프로세스를 실행하고 있습니다. 최상위 출력에서는 그 중 많은 것을 볼 수 없습니다.
Top은 정기적인 간격(보통 초당 1회)으로 시스템 활동을 측정합니다. 새로 고칠 때마다 프로세스 목록을 살펴보고 각 프로세스에 대한 통계를 수집합니다. 스케줄러의 운에 따라 ls
이 시점에는 프로세스가 0개 또는 1개 있을 수 있습니다. 프로세스가 top
표시되지 않으면 표시 ls
되지 않습니다. top
프로세스가 표시 되더라도 통계를 얻는 것은 원자적이지 않습니다 . 프로세스가 열거되는 시간과 프로세스의 통계를 읽는 시간 사이에 ls
프로세스가 종료되면 프로세스가 표시되지 않습니다. top
따라서 일반적으로 나열할 프로세스가 없습니다 ls
.
프로세스 가 있더라도 ls
프로세스는 오랫동안 실행되지 않으므로 마지막 순간에 차지하는 CPU 사용량은 무시할 수 있습니다. 아마도 목록의 맨 아래 어딘가에 있을 것입니다.
CPU 사용량은 자동으로 측정되지 않고 근사치일 뿐이므로 커널에서 수집한 총 CPU 사용량 통계가 프로세스별로 수집된 사용량 통계의 합계와 항상 일치하는 것은 아닙니다. 이러한 합계는 충분히 오래 실행되는 프로세스에 대해서는 일치하지만, 이 예에서 볼 수 있듯이 수명이 짧은 프로세스가 있는 경우 크게 다를 수 있습니다.