Kill -9 중단, 프로세스를 종료할 수 없음(살인 방지 프로세스)

Kill -9 중단, 프로세스를 종료할 수 없음(살인 방지 프로세스)

중복 가능성:
"kill -9"가 작동하지 않으면 어떻게 되나요?

이것을 물어보기에는 조금 늦었지만 나중에 참고할 수 있도록 하겠습니다.

오늘 고객이 SSH 연결 속도가 느리고 명령 실행 속도가 느리다고 보고한 후(일부는 전혀 작동하지 않음) 서버를 확인하라는 전화를 받았습니다.

로그인 후 즉시 입력할 수 있으므로 대기 시간이나 대역폭 포화와 같은 네트워크 문제는 아닌 것 같습니다(이 문제는 SSH 경험과 직접적인 관련이 있는 경향이 있기 때문입니다). 먼저 실행을 시도했지만 top아무 일도 일어나지 않은 후 Ctrl+C를 눌러 작업을 취소했습니다. 프롬프트가 시작 대기 중으로 일시중단되었습니다 top.

free -m또한 취소하기 전에 프롬프트에서 1분 이상 멈췄습니다.

df -h그것은 실행되었고 60%의 여유 디스크 공간이 있음을 보여주었습니다(일부 응용 프로그램이 충돌하여 디스크를 로그로 채웠는지 궁금합니다).

dmesg실행도 되지 않습니다.

실행했는데 tail -n 50 /var/log/message아쉽게도 더 이상 출력이 안 나오는데 심각한 문제가 있는 것 같습니다. 많은 메모리 위치는 16진수로 인쇄되어 있으며 아마도 해당 내용(이해할 수 없는 뒤죽박죽)이 오른쪽에 표시되어 있을 것입니다. 의 출력과 매우 유사합니다.이것비슷한 예를 찾으려고 로그를 검색했습니다. 오른쪽 열에 대부분의 행에 "ext4"가 포함되어 있다는 점을 제외하면 파일 시스템 오류가 있을 수 있습니까?

를 실행하는 동안 tail -n 50 /var/log/syslog위에 쓰여진 효과와 함께 모든 메모리 열풍의 한가운데에 여기에서 반복되는 몇 줄의 코드를 보았습니다 Info procname:pid blocked for more than 120 seconds.

ps aux한 프로세스의 CPU 사용량이 299%에 도달할 때까지 실행 하고 출력을 살펴보았습니다.

ps aux | grep procname

procuser    8279  299  0.0 479064 41916 pts/6    Sl+  08:05 548:31 /path/to/procname procbox 6390 6394 6395 0

따라서 프로세스가 이상해 보이지만 메모리 관련 명령(sudo 사용 여부에 관계없이)을 실행할 수 없습니다. 예를 들어 free -m, 또는 top. cat /proc/meminfo40GB 램 중 5GB 정도 사용 가능한 것을 알 수 있습니다 .

시도했지만 kill PID몇 분 동안 매달린 후 포기했습니다. 다시 시도해 kill -9 PID도 마찬가지였습니다. 프로세스가 너무 바빠서 커널의 종료 메시지에 응답할 수 없다고 가정할 수 있습니까? 시도해 보았지만 그것도 작동하지 않고 renice 19 PID실행 되고 그냥 멈춥니다.kill -9 PIDrenice

결국 하드 재부팅이 필요했는데 이는 이상적이지 않았습니다. 이제 서버의 전문 응용 프로그램으로 인해 파일이 손상되었습니다. 다른 어떤 옵션이 있나요?

단순히 프로세스를 중지하는 방법이 있습니까? SIGTERM을 보내는 대신 코드 처리를 중지하는 등의 작업을 수행하시겠습니까?

답변1

tail -n 50 /var/log/message를 수행했는데 불행히도 더 이상 출력이 없지만 뭔가 심각하게 잘못된 것 같습니다. 많은 메모리 위치는 16진수로 인쇄되어 있으며 아마도 해당 내용(이해할 수 없는 뒤죽박죽)이 오른쪽에 표시되어 있을 것입니다.

거의 모든 것이 될 수 있으며, 이러한 코어 덤프의 내용은 그것이 무엇인지 이해하는 데 중요합니다.

예를 들어 디스크가 더 이상 요청에 응답하지 않는 등의 하드웨어 문제가 발생할 수 있습니다. RAM에 이미 캐시된 프로그램을 실행하려고 하면 문제 없이 작동하지만 디스크에서 읽어야 하는 프로그램을 실행하면 중단될 수 있습니다.

또한 커널 버그, 기타 드라이버 문제, RAM의 잘못된 비트 뒤집기 또는 기타 불량 하드웨어가 있을 수도 있습니다. 드라이버가 커널의 특정 리소스를 잠근 후 버그나 오류가 발생하여 제대로 잠금을 해제할 수 없는 경우 잠금을 얻으려는 다른 드라이버나 시스템 호출이 중단됩니다.

이것은 아마도 커널의 버그가 아닐 것입니다. 예를 들어, lvm 또는 dmsetup 도구를 사용하여 디스크를 관리할 때 이러한 동작이 발생할 수 있습니다. 둘 다 장치를 일시 중단할 수 있으며, 그 결과 "장치가 일시 중단되는 한 장치에 대한 추가 I/O가 연기됩니다." 그러면 장치에 액세스하려는 프로그램이 커널에서 차단됩니다. "dmsetup 일시 중지"를 사용하여 이를 수동으로 트리거할 수 있습니다. 또는 LVM 도구에 오류가 발생했을 때 디스크가 일시 중지된 상태인 것을 예기치 않게 보았습니다.

이것이 일회성이라면 걱정하지 마십시오. 이런 일이 다시 발생하면 원인을 찾을 수 있도록 커널 출력을 주의 깊게 기록해 보십시오. 첫 번째 크래시 덤프가 가장 중요합니다. 이런 일이 자주 발생하고 출력을 얻을 수 없는 경우 다음을 사용하는 것이 좋습니다.네트워크 콘솔커널 출력을 다른 시스템으로 직접 보냅니다.

답변2

프로세스를 중지 kill하는 것이 바로 그 일입니다. kill -9 PID처리할 충분한 리소스가 확보될 때까지 실행하고 기다리는 것이 정답이라고 생각합니다 .

프로세스가 메모리를 차지하고 있다고 생각되면 OOM Killer를 수동으로 호출할 수도 있습니다.

echo f > /proc/sysrq-trigger

관련 정보