나는 상단이 어떻게 작동하는지 잘 알고 있습니다. 각 프로세스는 1개의 vcpu를 기준으로 하며 요약은 모든 vcpu를 기준으로 합니다.
나는 잠을 많이 자는 프로세스를 가지고 있으며 이것이 서버에 미치는 실제 영향을 이해하려고 노력하고 있습니다.
맨 위에는 다음이 있습니다.
%Cpu(s): 1.4 us, 1.8 sy, 0.0 ni, 96.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
38772 root 20 0 62140 15480 12108 R 7.6 1.5 0:15.15 php
/proc/cpuinfo(및 /sys/devices/system/cpu/)에 CPU가 1개만 나열되어 있습니다.
이 프로세스가 CPU의 7.6%를 사용하고 있다면 서버는 왜 96.8% 유휴 상태입니까? 이는 일회성 오탐이 아니며, 최상위 프로세스의 CPU 사용량은 항상 최상위에 보고된 전체 서버 사용량보다 2~3배 높습니다.
top은 /proc/stat 및 /proc/pid/stat에서 가져온다고 가정합니다.
그러니 이를 염두에 두고...
프로세스가 서버에서 실행되는 동안 다음 두 개의 더미 파일을 확인합니다.
첫 번째 검사
/프로세스/통계
cpu 1970483 7927 2795587 10758959 2446 0 7301 631701 0 0
/proc/38772/stat
38772 (php) S 36827 38772 36827 34816 38772 1077936128 1251 0 0 0 2809 1819
두 번째 검사
/프로세스/통계
cpu 1970572 7927 2795638 10763502 2446 0 7301 632255 0 0
/proc/38772/stat
38772 (php) S 36827 38772 36827 34816 38772 1077936128 1251 0 0 0 3098 1986
수학을 해라...
그래서 이 과정에 대한 계산은 다음과 같다고 생각합니다.
3098 - 2809 = 289
1986 - 1819 = 167
서버의 경우 다음과 같아야 합니다.
1970572 - 1970483 = 89
1970572 - 1970483 = 51
...그래서 top과 /proc 모두 이 프로세스가 전체 서버보다 더 많은 CPU를 사용하고 있다는 데 동의하는 것 같습니다. 어떻게 이럴 수있어? 어떤 계산이 더 정확하다고 가정해야 합니까?
최신 Ubuntu 20.04 버전(5.4.0-88-generic)을 실행하고 있습니다.
답변1
이 프로세스가 CPU의 7.6%를 사용하고 있다면 서버는 왜 96.8% 유휴 상태입니까?
CPU가 하나만 있는 경우 한 번에 하나의 실행 스레드만 실행할 수 있습니다. 따라서 출력이 화면에 기록될 때 CPU의 유일한 사용은 화면에 기록하는 것입니다. 그리고 당시 사용 가능한 모든 CPU를 사용했습니다. 여기에 표시되는 값은 시간에 따른 평균입니다. 즉, 헤더 사용률 데이터보다 장기간에 걸친 각 프로세스의 CPU 사용량입니다.