아파치 error.log의 "[알림] 자식 pid XXXX 종료 신호 분할 오류 (11)"[닫힘]


100

Apache / PHP / MySQL 스택을 사용하고 있습니다.
프레임 워크 CakePHP로 사용.

때때로 나는 빈 흰색 페이지를 얻습니다. Cake를 통해 디버깅 할 수 없으므로 apache error.log를 살펴보면 다음과 같은 결과를 얻을 수 있습니다.

[Wed Oct 12 15:27:23 2011] [notice] child pid 3580 exit signal Segmentation fault (11)
[Wed Oct 12 15:27:34 2011] [notice] child pid 3581 exit signal Segmentation fault (11)
[Wed Oct 12 15:30:52 2011] [notice] child pid 3549 exit signal Segmentation fault (11)
[Wed Oct 12 16:04:27 2011] [notice] child pid 3579 exit signal Segmentation fault (11)
zend_mm_heap corrupted
[Wed Oct 12 16:26:24 2011] [notice] child pid 3625 exit signal Segmentation fault (11)
[Wed Oct 12 17:57:24 2011] [notice] child pid 3577 exit signal Segmentation fault (11)
[Wed Oct 12 17:58:54 2011] [notice] child pid 3550 exit signal Segmentation fault (11)
[Wed Oct 12 17:59:52 2011] [notice] child pid 3578 exit signal Segmentation fault (11)
[Wed Oct 12 18:01:38 2011] [notice] child pid 3683 exit signal Segmentation fault (11)
[Wed Oct 12 22:20:53 2011] [notice] child pid 3778 exit signal Segmentation fault (11)
[Wed Oct 12 22:29:51 2011] [notice] child pid 3777 exit signal Segmentation fault (11)
[Wed Oct 12 22:33:42 2011] [notice] child pid 3774 exit signal Segmentation fault (11)

이 세분화 오류는 무엇이며 어떻게 해결할 수 있습니까?

최신 정보:

PHP Version 5.3.4, OSX local development
Server version: Apache/2.2.17 (Unix)
CakePhp: 1.3.10

구성에 대한 자세한 정보가 필요합니다. 예를 들어 php 및 사용 된 모듈의 버전이 최신 상태이고 일종의 캐싱 또는 가속기를 사용하는 경우.
CodeCaster 2011 년

필요한 정보와 입수 방법을 알려 주시면 제가 게시 할 수 있습니까?
mgPePe 2011 년

또한 이것을 확인하십시오 : stackoverflow.com/questions/15689765/…
trante

나는 최근에 나의 apache 로그에 많은 것을 가지고 있었고, 또한 segfault (11). 광산은 APC로 인해 발생했으며 PHP에서 APC를 다시 비활성화하자마자 오류가 중지되었습니다. 그러나 당신은 다른 많은 원인을 가질 수 있습니다.
Meetai.com 2014 년

답변:


66

httpd 하위 프로세스 중 하나에 gdb를 연결하고 다시로드하거나 작업을 계속하고 충돌을 기다린 다음 역 추적을 확인합니다. 다음과 같이하십시오.

$ ps -ef|grep httpd
0     681     1   0 10:38pm ??         0:00.45 /Applications/MAMP/Library/bin/httpd -k start
501   690   681   0 10:38pm ??         0:00.02 /Applications/MAMP/Library/bin/httpd -k start

...

이제 하위 프로세스 중 하나에 gdb를 연결합니다.이 경우 PID 690 (열은 UID, PID, PPID, ...)

$ sudo gdb
(gdb) attach 690
Attaching to process 690.
Reading symbols for shared libraries . done
Reading symbols for shared libraries ....................... done
0x9568ce29 in accept$NOCANCEL$UNIX2003 ()
(gdb) c
Continuing.

충돌을 기다립니다 ... 그런 다음 :

(gdb) backtrace

또는

(gdb) backtrace full

무슨 일이 일어나고 있는지 당신에게 약간의 단서를 줄 것입니다. 버그 보고서를 제출하는 경우 역 추적을 포함해야합니다.

충돌을 재현하기 어려운 경우 요청을 처리하는 데 하나의 하위 프로세스 만 사용하도록 Apache를 구성하는 것이 좋습니다. 구성은 다음과 같습니다.

StartServers 1
MinSpareServers 1
MaxSpareServers 1

1
나는 방금 이것을 겪었고 gdb를 자식 프로세스에 연결했을 때 segfault를 얻지 못하고 apache가 페이지 렌더링을 완료하지 않는 것 같습니다. (그렇지 않으면 segfault를 재현하는 것은 매 재 장전에서 발생하는 것처럼 새로 고침을 누르는 문제입니다). C 시절에 금속 도구 체인에 더 가깝게 작업 한 지 오래되었습니다. 왜 이런 행동을 보일지 궁금합니다. 내 빌드에서 많은 기호를 찾지 못했지만 정보가 덜한 역 추적을 생성해야합니까?
lucian303

흠 이상합니다. segfault가 실제로있는 프로세스가 gdb에 연결되어 있는지 확인할 수 있습니까? dmesgsegfaulted 프로세스의 pid를 확인하십시오 .
Mattias Wadman

GDB가 작동하지 않습니다. 나에게 준다Unable to access task for process-id 70: (os/kern) failure.
mgPePe 2013-09-12


2
해결책을 찾았습니다 : 호출 set follow-fork-mode child한 다음 부모 프로세스 (하위 프로세스를 생성하는 프로세스)에 연결-> stackoverflow.com/questions/15126925/…
maxgalbu

23

segementation 오류는 PHP (또는 아파치)의 내부 오류입니다. 종종 세분화 오류는 imagemagick 또는 subversion과 같이 새롭고 덜 테스트 된 PHP 모듈 중 하나에 의해 발생합니다.

필수가 아닌 모든 모듈 ( php.ini)을 비활성화 한 다음 오류가 발생할 때까지 하나씩 다시 활성화하십시오. PHP와 Apache를 업데이트 할 수도 있습니다.

그래도 도움이되지 않으면 PHP 버그를보고 해야합니다 .


그러나 그것이 어떤 것인지 어떻게 알 수 있습니까?
mgPePe 2013 년

저에게는 (데비안 스트레치에서) 아파치 모듈이었습니다. mod-geoip이제는 php geoip-extension을 대신 사용합니다
Christopher K.

@mgPePe 그것이 무엇인지 알아 내려면, 모든 비 필수 모듈을 비활성화하기 만하면됩니다 (예 : 외부에서 개발 된 모듈로 시작 mod-geoip). 문제가 계속됩니까? 그런 다음 더 비활성화하십시오. 더 이상 세그 폴트가 보이지 않습니까? 그렇게 할 때까지 더 많은 모듈을 활성화하십시오. 기술적으로 관심이 있고 디버거가 있다면 @Mathias Wadmann의 훌륭한 답변을 참조하십시오. 하지만 디버거가 사용자를 오도 할 수 있다는 점에 유의하십시오. 때로는 충돌이 다른 모듈에있을 수 있습니다.
phihag

18

php.ini에서 output_buffering을 늘리려 고 했습니까?

"zend_mm_heap broken"은 무엇을 의미 합니까?


4
일부 업데이트 후 apache / php / mysql을 사용하여 debian squeeze에서 동일한 문제가 발생했습니다. 나는 그것을 설정 output_buffering = 4096하고 이제 페이지가 다시 작동합니다. Thx
rubo77 2013-08-16

3
그리고 나를 위해 output_buffering = 8192작동합니다. 감사합니다!
Oleg

2
그리고 지금, 다른 페이지에서 output_buffering = 8192설정에 의해 고정 된 세그먼트 폴트를 발생합니다 output_buffering = Off. 나는 많이 헷갈 린다.
Oleg

1
몇 년이 지났지 만 저처럼 이런 문제를 겪는 다른 사람에게는 ... 서버에 대한 출력 버퍼링을 해제 한 다음 htaccess 파일을 사용하여 디렉토리 또는 파일 기반 편집을 수행하는 것이 방법이라는 것을 알았습니다. 출력 버퍼링은 사용자에게 게시하기 전에 보관할 데이터의 양을 결정합니다. 작은 한 줄의 경우 오류가 발생할 수 있습니다. 더 큰 파일에서는 프로세스가 과부하 될 위험이 있습니다.
Abandoned Cart
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.