Linux CPU 사용량이 잘못 표시됩니다.

Linux CPU 사용량이 잘못 표시됩니다.

나는 상단이 어떻게 작동하는지 잘 알고 있습니다. 각 프로세스는 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 사용량입니다.

관련 정보