내 임베디드 시스템이 몇 시간 동안 실행된 후 응답하지 않습니다. 조사 결과 시스템에서 프로세스 목록이 계속 늘어나고 있는 것으로 나타났습니다 <defunct>
. 실행하면 ps axl
긴 목록이 제공되며 그 중 하나는 다음과 같습니다.
1 0 6421 1 20 0 0 0 exit Zs ? 0:00 [timeout] <defunct>
1 0 6429 1 20 0 0 0 exit Zs ? 0:00 [timeout] <defunct>
1 0 6476 1 20 0 0 0 exit Zs ? 0:00 [timeout] <defunct>
1 0 6497 1 20 0 0 0 exit Zs ? 0:00 [timeout] <defunct>
이 프로세스를 종료할 수는 없습니다. 이러한 프로세스가 증가하면 모든 RAM이 소모되어 시스템이 응답하지 않게 될 수 있습니다. 또 다른 문제는 <defunct>
시작 시 init 스크립트에 의해 실행되는 프로세스를 종료하려고 하면 해당 프로세스도 사라진다는 것입니다. 왜 이러한 좀비 프로세스가 init에 의해 종료되지 않고 RAM이 부족해지는지에 대한 단서를 찾을 수 없습니다.
답변1
죽은 프로세스는 상당한 메모리를 차지하지 않으며 pid, 반환 상태 및 리소스 사용 통계를 저장하는 데 적은 수의 바이트만 사용합니다.
그러나 제대로 실행되는 Unix/Linux 운영 체제에서는 init가 부모인 실패한 프로세스가 후자에 의해 신속하게 재활용되어야 합니다.
시스템에 심각한 문제가 있습니다. 이는 관찰 중인 메모리 누수를 설명할 수도 있습니다.
답변2
다른 사람들과 마찬가지로 이러한 죽은 프로세스가 상당한 양의 RAM을 사용하고 있는지 의심스럽습니다. 또한 ps
메모리 사용량을 자세히 설명하는 열에 0이 있는 것을 출력에서 볼 수 있습니다.
Defnct(또는 좀비 - Z의 출처) 프로세스는 종료될 수 없으며 상위 프로세스가 종료 상태를 읽을 때까지 프로세스 테이블에 머물기만 합니다. 따라서 상위 프로세스를 복구해야 합니다.
답변3
#ps auxwww를 사용하여 좀비를 찾으세요 | grep -w Z | grep -v grep |
이러한 좀비 프로세스의 상위 프로세스 ID를 확인하고 종료하십시오.
답변4
문제의 근본 원인은 하드웨어 오류입니다. ttyS1
시스템 포트는 초당 수천 개의 인터럽트를 수신하며 이로 인해 kworker
프로세스 힙이 생성되고 <defucnt>
정리되지 않습니다 init
. init
@jilliagre가 제안한 것처럼 이는 버그일 수 있습니다.
비활성화하면 getty
문제 ttyS1
가 해결되었습니다.