Como determinar a causa dos processos de status 'D' emperrados?

1

Eu tenho vários processos presos em estados de suspensão ininterrupta, todos aparentemente provenientes de auplink /var/lib/docker/aufs/mnt . É algo relacionado ao docker e ele está esperando por uma E / S que nunca será concluída - eu entendo isso, mas como posso determinar a causa exata? Como posso saber o que eu estou esperando? Além disso, não há realmente nenhuma maneira de fazer com que esses processos travados desapareçam sem uma reinicialização difícil?

    
por l46kok 20.11.2018 / 03:17

1 resposta

0

Você pode ver a pilha do processo:

cat /proc/<process pid>/stack

que lhe dará informações sobre o que estava fazendo quando acabou em D-state.

echo w > /proc/sysrq-trigger; dmesg

dirá ao kernel para relatar todos os rastreios de pilha para os processos do estado D no buffer do dmesg.

Os processos no estado D não podem ser eliminados. Há situações em que o processo permanece no estado D por muito tempo, mas ocasionalmente termina a E / S e é interrompível por um curto período de tempo e, em seguida, volta para a mesma atividade de E / S e acaba no estado D novamente. Então com

while (true); do kill -9 PID; done

há uma pequena chance de entregar o sinal KILL enquanto o processo é interrompível.

    
por 02.12.2018 / 13:36