プロセスが動作しているにもかかわらず、straceおよび/proc/pid/statでプロセスがCPU時間を占有していないと表示するのはなぜですか?

プロセスが動作しているにもかかわらず、straceおよび/proc/pid/statでプロセスがCPU時間を占有していないと表示するのはなぜですか?

多くの接続を処理し、作業を完了する長寿命のプロセス(数ヶ月)がありますが、ほとんどの統計によると、作業はまったく行われていないことがわかりました。以下は多くのシステムコールを示していますが、CPU時間はゼロの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このプロシージャにはstimeゼロ以外の合計フィールドがありますが、完全に静的であり、私が知っているintオーバーフロー制限に近づいていません。

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

奇妙なことに、同じプロセスを通して、他のいくつかのボックスでも同じ症状が現れました。これらはすべてカーネル3.13.0で実行されます。このプロセスはシングルスレッドであり、素晴らしい仕事をしません(pgbouncer)。

タスクが進行中であることを反映するこれらの統計がなくても、プロセスが機能し続けることができるのはなぜですか。

答え1

これはLinuxカーネルのバグが原因で発生します。

関連情報