프로세스 정보에 CPU 사용량/시간이 표시되지 않는 이유는 무엇입니까?

프로세스 정보에 CPU 사용량/시간이 표시되지 않는 이유는 무엇입니까?

에 전화하면 top%CPUTIME+이 고정되어 업데이트되지 않는 것처럼 보입니다. 대신 프로세스 목록의 처음 몇 줄은 항상 다음과 같습니다.

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
    1 root      20   0   49364   9168   5720 S   0,0  0,1   0:00.07 systemd
    2 root      20   0       0      0      0 S   0,0  0,0   0:00.00 kthreadd
    3 root      20   0       0      0      0 S   0,0  0,0   0:00.00 ksoftirqd/0
    4 root      20   0       0      0      0 S   0,0  0,0   0:00.00 kworker/0:0
    5 root       0 -20       0      0      0 S   0,0  0,0   0:00.00 kworker/0:0H
    6 root      20   0       0      0      0 S   0,0  0,0   0:00.00 kworker/u24:0
    7 root      20   0       0      0      0 S   0,0  0,0   0:00.00 rcu_sched
    8 root      20   0       0      0      0 S   0,0  0,0   0:00.00 rcu_bh
    9 root      20   0       0      0      0 S   0,0  0,0   0:00.00 rcuos/0

특히,모든 공정systemd항상 0:00.07 TIME+의 동일한 상수 값을 표시하는 첫 번째 프로세스( )를 제외하고 0,0 %CPU 및 0:00.00 TIME+를 표시합니다 .다시 시작한 후에도. CPU 사용량에 대한 상단의 요약 행이 정상적으로 업데이트되는 것 같습니다.

나는 그것을 살펴보았고 /proc/(pid)/stat, 내용을 올바르게 이해했다면 이것이 실제로 거기에 저장된 정보임을 확인했습니다. 예를 들어, 5814가 내가 시작한 장기 실행 프로세스의 PID인 경우:

$ cat /proc/1/stat | cut -f15 -d" "
7
$ cat /proc/5814/stat | cut -f15 -d" "
0

저는 모든 최신 업데이트가 포함된 Korora(Fedora) 23을 사용하고 있으며 커널 버전 4.7.6을 실행하고 있습니다.

이 동작의 원인은 무엇이며 이 문제를 어떻게 디버깅할 수 있습니까?

답변1

top(1)은 먼저 CPU 사용량을 기준으로 정렬된 실행 중인 프로세스를 표시한 다음 PID를 기준으로 정렬된 휴면 프로세스로 테이블을 채웁니다.

systemd(8)는 init(8)의 변형으로 아마도 시작 후에는 많은 작업을 수행하지 않을 것입니다. 시작할 때 70밀리초의 CPU 사용량이 발생할 수 있습니다. init 프로세스(PID=1)는 시스템이 실행 중일 때 활성 상태를 유지하는 것 외에는 다른 목적이 없습니다.

내 systemd(8)는 125일 12시간 동안 CPU 2:25.72를 사용했기 때문에 매우 느리게 업데이트되었습니다.

이 목록의 나머지 프로세스는 일부 Linux 관련 프로세스이며 메모리를 전혀 사용하지 않는다는 것을 알 수 있습니다.

관련 정보