Apache2 프로세스를 종료할 수 없습니다.

Apache2 프로세스를 종료할 수 없습니다.

Debian lenny에서 squeeze(apache2 2.2.16-6+squeeze4 및 php 5.3.10-1~dotdeb.1)로 업그레이드한 후 Apache 프로세스가 분할 오류로 종료되기 시작했습니다. 5~30분마다(1개의 프로세스에 대해) 발생하므로 지금은 아무런 영향을 미치지 않습니다. 문제는 때때로 SIGSEGV종료하는 대신 시스템 CPU 사용량 SIGBUS오류가 100%로 미친 듯이 반복된다는 것입니다.

# 추적 -p27635
프로세스 27635 추가 - 인터럽트 종료
--- SIGBUS(버스 오류) @ 0 (0) ---
--- SIGBUS(버스 오류) @ 0 (0) ---
--- SIGBUS(버스 오류) @ 0 (0) ---
--- SIGBUS(버스 오류) @ 0 (0) ---
--- SIGBUS(버스 오류) @ 0 (0) ---
--- SIGBUS(버스 오류) @ 0 (0) ---

그들은 응답하지 않습니다 kill -9. 하지만 프로세스를 종료한 후 strace를 실행하면 프로세스가 SIGBUS두 번 반복된 다음 종료됩니다.

# 추적 -p27635
프로세스 27635 추가 - 인터럽트 종료
--- SIGBUS(버스 오류) @ 0 (0) ---
--- SIGBUS(버스 오류) @ 0 (0) ---
+++ SIGKILL에 의해 살해됨 +++

왜 strace 없이 프로세스를 종료할 수 없나요? strace 실행은 종료할 수 있는 프로세스에 어떤 영향을 미치나요?

(내 아파치/php 모듈 설정에 문제가 있을 수 있다는 것을 알고 있지만 이 질문에서는 죽일 수 없는 프로세스의 이상한 동작에 관심이 있습니다. 아파치/php를 고칠 수 없다면 다른 질문을 할게요.)

답변1

먼저, 기억력을 확인해 보세요.

SIGKILL에 응답하지 않는 프로세스는 커널 버그 또는 하드웨어 버그의 증상입니다. 단지 커널만 바꾸는 것이 아니라면 RAM에 결함이 있을 가능성이 가장 높으므로 확인해 보세요. 커널 버그는 미묘한 원인(예: 잘못된 gcc 버전 사용)을 가질 수 있으며 미묘한 방식으로 나타날 수 있습니다(예: 잘 작동하지만 X 서버가 시작되지 않습니다. 실제 이야기와 동일). 다른 많은 사용자가 사용하는 배포판에서 제공하는 커널을 사용하는 경우 새 커널에 버그가 있을 가능성은 거의 없지만 발생할 수 있습니다. 드라이버와 활성 모드의 조합으로 인해 발생할 수 있는 드문 버그입니다. 다른 커널을 사용해 보십시오.

Apache에는 충돌을 일으키는 버그가 있을 수도 있지만 SIGKILL이 작동하지 않는 것은 Apache의 잘못이 아닙니다.

관련 정보