PHP 7.3.1+Xdebug2.7.0beta 1+opcache가 502 Bad Gateway, exited on signal 11(SIGSEGV)이 된 이유와 대응 방법
원인 및 대응 방법
어제(2019-01-24) 시점에 최신
php 7.3.1
를 사용하여 xdebug
와 opcache
를 조합하여 개발 환경을 만들었는데 간혹 발생502 Bad Gateway
,phpfpm의 일지를 확인한 후exited on signal 11 (SIGSEGV)
발생했다.그렇다면 어떻게 대처해야 할까... 트위터에 트윗을 올렸을 때 Derick Rethans산이 보내온 멘션을 받았어요!
There is a bug in OPcache that conflicts with Xdebug (and causes crashes). This is fixed in GIT, and will be released as part of PHP 7.3.2.— Derick Rethans (@derickr) 2019년 1월 24일
원인과 회피 전략까지 계속!
https://t.co/kwVyr00BR7 is the bug, and https://t.co/YeZZ5U8dTL has a workaround
— Derick Rethans (@derickr) 2019년 1월 24일
Derick Rethans san. Thank you for the information!
즉, 위에 적힌 내용만 실행하면 문제가 없다는 뜻입니다.
php 7.3.2
가 되면 반영https://github.com/php/php-src/commit/325a1139744413420a62d3006c04914587628810이 되기 때문에 이 문제는 발생하지 않을 거라고 생각합니다.p>
もうちょっと細かく経緯と対応方法
어제(2019-01-24) Docker hub의php:7.3-fpm-alpine3.8
를 바탕으로PHP 7.3 + xdebug + opcache
개발 환경 조성p>
우선 다음과 같은 것을 준비했다Dockerfile
,docker-compose build
해봤다docker-compose up
p>
FROM php:7.3-fpm-alpine3.8
RUN apk update \
&& apk upgrade \
&& apk add --no-cache --virtual .gd-deps \
g++ \
make \
autoconf \
&& pecl update-channels \
&& docker-php-ext-install \
opcache \
&& pecl install xdebug-2.7.0beta1 \
&& rm -rf /tmp/pear ~/.pearrc \
&& docker-php-ext-enable xdebug
# ホントはもっと色々書いてるのですが省略しました。
※ 2019-01-28 추기@tomoyamachi의コメント를 참고하여 echo 'zend_extension=xdebug.so' > /usr/local/etc/php/conf.d/xdebug.ini
에서 docker-php-ext-enable xdebug
로 변경합니다.
또한 php7.3에서 xdebug를 사용하기 위해pecl에서 현재
xdebug-2.7.0beta1
를 설치해야 합니다.참조https://xdebug.org/의Announcements와https://xdebug.org/updates.php등:처음처럼pecl install xdebug
쓰면 안 된다.문서를 잘 봐야지...) ※ phpfpm 이전에 nginx의 구성이 필요했지만, nginx용 Docker file은 생략p>
build와 up 모두 성공했습니다!
에서 브라우저로 보면 움직이는 것 같아!
, 생각해도 한순간...
설정값이 정확하게 반영되었는지phpinfo()
, 대략적인 눈으로 확인하기 위해 파일을 고친 후 다시 불러오기 결과502 Bad Gateway
!phpfpm 출력의 stderrexited on signal 11 (SIGSEGV)
p>
에?
다시 불러옵니다.
…
보통 표시...어?
가 다시 앞서고 있습니다.
502 Bad Gateway
! exited on signal 11 (SIGSEGV)
! 에!!!
(중복된 후 몇 번 다시 불러보았지만 재현되지 않습니다)
가 되다니, 아, 이 코어 덤프가 되다니.docker core dump를 사용하십시오.
하지만 시간에 따라 아마opcache일 거예요
이므로 opcache를 Off로 설정하십시오.
$ docker-compose exec phpfpm sh
/var/www/app # vi /usr/local/etc/php/conf.d/docker-php-ext-opcache.ini
;zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20180731/opcache.so
/var/www/app # kill -USR2 1
docker-compose exec
실행 중인 phpfpm 용기에 들어가sh,
대상 파일을 ;zend_extension=(略)
처럼 평론 출력,
kill -USR2 1
에서container에서phpfpm을 다시 시작합니다.https://stackoverflow.com/questions/37806188/how-to-restart-php-fpm-inside-a-docker-container
에서 브라우저에서 재부팅을 확인한 후
예쁘게 사라졌어502 Bad Gateway
와exited on signal 11 (SIGSEGV)
.p>
여기서 나는 먼저 "opcache가 이상한 것 같아"라는 제목을 붙였는데, xdebug도 매우 마음에 든다.p>
특히 php7.3이 발표된 후의 날짜가 비교적 짧다. 7.3xdebug의 2.7.0beta1은 이름이 가리키는 바와 같이 베타 버전이다.p>
혹시 이쪽도 이상한가요?아까와 반대로opcache를 사용한 후 다음 순서에 따라 xdebug를 사용하지 않으려고 합니다p>
/var/www/app # vi /usr/local/etc/php/conf.d/xdebug.ini
;zend_extension=xdebug.so
/var/www/app # kill -USR2 1
에서 이것도 예쁘게 사라졌어502 Bad Gateway
와exited on signal 11 (SIGSEGV)
p>
이기 때문에 opcache
+Xdebug 2.7.0beta1
+php:7.3-fpm-alpine3.8
의 조합에 따라 어떤 오류를 밟을 가능성이 높다고 생각합니다.p>
※ opcache
또는 xdebug
+ php:7.3-fpm-alpine3.8
라면 문제가 없습니다.
로 시작하는 Tweet에서 갑자기 Derick Rethans산에게서 멘션을 받았어요.p>
감사합니다.p>
그리고 php:7.3-fpm-alpine3.8
의 현재 php 버젼을 확인하기 위해 아래 명령을 7.3.1로 확인합니다.
$ docker-compose exec phpfpm php -v
PHP 7.3.1 (cli) (built: Jan 11 2019 00:59:32) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.1, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.3.1, Copyright (c) 1999-2018, by Zend Technologies
with Xdebug v2.7.0beta1, Copyright (c) 2002-2018, by Derick Rethans
알려준workaround에 따라 Docker file에 추가
opcache.optimization_level=0x7FFFBBFF
p>FROM php:7.3-fpm-alpine3.8
RUN apk update \
&& apk upgrade \
&& apk add --no-cache --virtual .gd-deps \
g++ \
make \
autoconf \
&& pecl update-channels \
&& docker-php-ext-install \
opcache \
&& pecl install xdebug-2.7.0beta1 \
&& rm -rf /tmp/pear ~/.pearrc \
&& docker-php-ext-enable xdebug \
&& echo 'opcache.optimization_level=0x7FFFBBFF' >> /usr/local/etc/php/conf.d/opcache.ini
※ 2019-01-28 추기@tomoyamachi의コメント를 참고하여 echo 'zend_extension=xdebug.so' > /usr/local/etc/php/conf.d/xdebug.ini
에서 docker-php-ext-enable xdebug
로 변경합니다.
에서docker-compose build
,docker-compose up
하고 나니 완전히 정상적으로 작동했어요!
기쁘고 축하할 만하다p>
※ 2019-01-28 추기
원래는 echo 'opcache.optimization_level=0x7FFFBBFF' >> /usr/local/lib/php/extensions/no-debug-non-zts-20180731/opcache.so
등 엉뚱한 일을 썼는데... 정확히 /usr/local/etc/php/conf.d/
밑에 있습니다.나는 ini다.echo 'opcache.optimization_level=0x7FFFBBFF' >> /usr/local/etc/php/conf.d/opcache.ini
하는 부분이 잘 모르겠어요. /usr/local/etc/php/conf.d/docker-php-ext-opcache.ini
에서 추기하는 방법이 더 좋아요.br/>
아니면 자기가 준비한 거야.또는 ini로 표시된 파일 이름입니다.
ところで…
php7.3 docker
에서 검색하면 @tomoyamachi의 글을 발견할 수 있습니다. 이것도 php7입니다.아마 3+xdebug+opcache의... 잘 돌아가고 있는 것 같은데?
은 아마도 상술한 글을 쓸 때 php7.3.0, https://qiita.com/tomoyamachi/items/991a0d149e9585cac15f의 버그가 php7.3.0에서도 발생할 것이라고 느낄 것이다.(단지 훑어보았을 뿐, 잘못하면 맞출 수 없다!)
또는 https://bugs.php.net/bug.php?id=77287에서 xdebug.so를 읽지 않기 위해 댓글을 달았기 때문에 발병하지 않았나요?
이따가 시간 나면 빌려보고 싶어요https://github.com/tomoyamachi/docker-laravel-fpm-7.3/blob/2f65eb12a6215759c62180585142a4d90bafec91/Dockerfile#L26손 옆에도 한번 해볼게요.del>
※ 2019-01-28 추기https://github.com/tomoyamachi/docker-laravel-fpm-7.3에서는 재현성이 있어 위에서 부정선을 추가했습니다.또 자신echo 'zend_extension=xdebug.so' > /usr/local/etc/php/conf.d/xdebug.ini
이런 조잡한 글씨를 썼기 때문에docker-php-ext-enable xdebug
에서 효과적인 방법을 완전히 소홀히 했으니... 정말 실례입니다!
Reference
이 문제에 관하여(PHP 7.3.1+Xdebug2.7.0beta 1+opcache가 502 Bad Gateway, exited on signal 11(SIGSEGV)이 된 이유와 대응 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hokutoasari/items/4db320e519d87186974f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)