Tenha um processo de longa duração (alguns meses) que esteja lidando com um grande número de conexões e fazendo trabalho, mas a maioria das estatísticas mostra que ele não está funcionando. Aqui está uma saída strace, mostrando um monte de syscalls, ainda 0 tempo de CPU:
% 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
Os campos utime
e stime
para este processo são diferentes de zero, mas estão completamente estáticos e não estão perto de nenhum limite de estouro de reconhecimento que eu reconheça:
$ awk '{print "utime:" $14, "ctime:" $15}' /proc/128618/stat
utime:78891786 ctime:403631467
O que é bizarro é que vejo exatamente este mesmo sintoma em várias outras caixas, com esse mesmo processo. Todos eles estão rodando no kernel 3.13.0. Este processo é single-threaded e não faz nada extravagante (pgbouncer).
Por que um processo pode continuar a funcionar sem que nenhuma dessas estatísticas reflita esse trabalho?