Como o 'cat / proc / $ pid / cmdline' pode demorar alguns segundos?

3

Eu encontrei esse comportamento estranho ontem em um de nossos servidores. ps , pgrep e htop (na inicialização) eram muito lentos. strace ps mostrou que read('/proc/$pid/cmdline ) levou alguns segundos em alguns processos. Por que isso aconteceu?

Algumas observações:

  • Os processos executáveis estavam no NFS
  • Os processos (cerca de 20+) estavam executando unlink e symlink operações em arquivos também no NFS, em paralelo
  • Eles são bifurcados pelo mesmo processo pai
  • Existem 80 GB de RAM disponíveis (principalmente armazenados em cache), mas o swap (apenas 4 GB) está em uso total
  • Eu corro while true; do cat /proc/$pid/status; sleep .1; done , cat retornou imediatamente se State é S ou R , mas demorou vários segundos quando State é D

Fiz algumas pesquisas no Google e encontrei algumas respostas de SO sugerindo que quando State é D , a leitura de /proc/$pid/cmdline seria interrompida. Isso é verdade? E como isso funciona? Por que /proc/$pid/cmdline , que foi definido antes do início do programa, foi afetado pelo que estava fazendo depois disso?

por Hai Luong Dong 25.06.2018 / 05:22

0 respostas

Tags