프로세스가 작동 중임에도 불구하고 strace 및 /proc/pid/stat에서 프로세스가 CPU 시간을 차지하지 않는다고 표시하는 이유는 무엇입니까?

프로세스가 작동 중임에도 불구하고 strace 및 /proc/pid/stat에서 프로세스가 CPU 시간을 차지하지 않는다고 표시하는 이유는 무엇입니까?

많은 연결을 처리하고 작업을 완료하는 수명이 긴 프로세스(몇 달)가 있지만 대부분의 통계에 따르면 작업이 전혀 이루어지지 않는 것으로 나타났습니다. 다음은 많은 시스템 호출을 보여주지만 CPU 시간은 0인 strace 출력입니다.

% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
  0.00    0.000000           0     66376           write
  0.00    0.000000           0     27579           close
  0.00    0.000000           0        77           stat
  0.00    0.000000           0        46           socket
  0.00    0.000000           0        46           connect
  0.00    0.000000           0     21360       347 accept
  0.00    0.000000           0    140039           sendto
  0.00    0.000000           0    169718     21567 recvfrom
  0.00    0.000000           0     21013           getsockname
  0.00    0.000000           0     21013           getpeername
  0.00    0.000000           0     42026           setsockopt
  0.00    0.000000           0        46           getsockopt
  0.00    0.000000           0     63177           fcntl
  0.00    0.000000           0     68858           gettimeofday
  0.00    0.000000           0      1861           clock_gettime
  0.00    0.000000           0       620           epoll_wait
  0.00    0.000000           0     96667           epoll_ctl
------ ----------- ----------- --------- --------- ----------------
100.00    0.000000                740522     21914 total

utime이 프로시저에는 stime0이 아닌 합계 필드가 있지만 완전히 정적이며 내가 알고 있는 int 오버플로 제한에 근접하지 않습니다.

$ awk '{print "utime:" $14, "ctime:" $15}' /proc/128618/stat
utime:78891786 ctime:403631467

이상하게도 동일한 과정을 통해 다른 여러 상자에서도 똑같은 증상이 나타났습니다. 이것들은 모두 커널 3.13.0에서 실행됩니다. 이 프로세스는 단일 스레드이며 멋진 작업을 수행하지 않습니다(pgbouncer).

작업이 진행되고 있음을 반영하는 이러한 통계 없이 프로세스가 계속 작동할 수 있는 이유는 무엇입니까?

답변1

이는 Linux 커널의 버그로 인해 발생합니다.

관련 정보