업데이트

업데이트

저는 Brew의 PHP 5.5.14(패키지: php55, php55-intl, php55-pdo-pgsql, php55-xdebug)가 포함된 내장 apache2 웹 서버를 포함하여 Mac OS X 10.9.4를 실행하고 있습니다.

이 설정을 실행하면 꽤 잘 작동합니다. 그러나 얼마 후 모든 요청에 ​​대해 403 오류가 발생합니다. 아파치 오류 로그를 찾아보니 다음과 같은 내용이 발견되었습니다.

[Fri Jul 25 05:28:18 2014] [error] [client 127.0.0.1] PHP Warning:  require_once(/Users/daniel/Development/massiveart/sulu-complete/app/bootstrap.php.cache): failed to open stream: Too many open files in /Users/daniel/Development/massiveart/sulu-complete/web/website.php on line 10, referer: http://sulu.lo/de
[Fri Jul 25 05:28:18 2014] [error] [client 127.0.0.1] PHP Stack trace:, referer: http://sulu.lo/de
[Fri Jul 25 05:28:18 2014] [error] [client 127.0.0.1] PHP   1. {main}() /Users/daniel/Development/massiveart/sulu-complete/web/website.php:0, referer: http://sulu.lo/de
[Fri Jul 25 05:28:18 2014] [error] [client 127.0.0.1] PHP Fatal error:  require_once(): Failed opening required '/Users/daniel/Development/massiveart/sulu-complete/web/../app/bootstrap.php.cache' (include_path='.:/usr/local/Cellar/php55/5.5.14/lib/php') in /Users/daniel/Development/massiveart/sulu-complete/web/website.php on line 10, referer: http://sulu.lo/de
[Fri Jul 25 05:28:18 2014] [error] [client 127.0.0.1] PHP Stack trace:, referer: http://sulu.lo/de
[Fri Jul 25 05:28:18 2014] [error] [client 127.0.0.1] PHP   1. {main}() /Users/daniel/Development/massiveart/sulu-complete/web/website.php:0, referer: http://sulu.lo/de
[Fri Jul 25 05:28:40 2014] [crit] [client 127.0.0.1] (24)Too many open files: /Users/daniel/Development/massiveart/sulu-complete/web/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable, referer: http://sulu.lo/de
[Fri Jul 25 05:28:41 2014] [crit] [client 127.0.0.1] (24)Too many open files: /Users/daniel/Development/massiveart/sulu-complete/web/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable, referer: http://sulu.lo/de
[Fri Jul 25 05:28:41 2014] [crit] [client 127.0.0.1] (24)Too many open files: /Users/daniel/Development/massiveart/sulu-complete/web/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable, referer: http://sulu.lo/de
[Fri Jul 25 05:28:41 2014] [crit] [client 127.0.0.1] (24)Too many open files: /Users/daniel/Development/massiveart/sulu-complete/web/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable, referer: http://sulu.lo/de
[Fri Jul 25 05:28:45 2014] [crit] [client 127.0.0.1] (24)Too many open files: /Users/daniel/Development/massiveart/sulu-complete/web/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable, referer: http://sulu.lo/de
[Fri Jul 25 05:28:45 2014] [crit] [client 127.0.0.1] (24)Too many open files: /Users/daniel/Development/massiveart/sulu-complete/web/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable, referer: http://sulu.lo/de

파일을 더 이상 읽을 수 없는 것 같고 어떻게든 403을 반환합니다. 특정 제한에 대해 이미 알아냈지만 launchctl에서 열린 파일에 대해 무제한 하드 제한이 있다고 반환합니다.

 ~ $ launchctl limit
    cpu         unlimited      unlimited
    filesize    unlimited      unlimited
    data        unlimited      unlimited
    stack       8388608        67104768
    core        0              unlimited
    rss         unlimited      unlimited
    memlock     unlimited      unlimited
    maxproc     709            1064
    maxfiles    256            unlimited

또한 이미 명령을 사용하여 maxfiles를 4096으로 설정하려고 시도했지만 launchctl limit maxfiles 4096 16384시간이 좀 지난 후에도 문제가 계속 발생합니다. 내가 또 무엇을 확인할 수 있는지 아시나요?

업데이트: Gordon Davisson이 제안한 대로 명령을 실행하면 lsof -c httpd다음과 같은 항목이 많이 있는 것을 볼 수 있습니다.

httpd   1361 _www   15u    IPv4 0xb306b48659f63853       0t0     TCP localhost:50603->localhost:cslistener (CLOSED)

내가 사용하는 애플리케이션은 웹소켓을 사용하고 있으며, 웹소켓을 사용할 수 없거나 해당 애플리케이션이 서버에서 실행되고 있지 않을 때에도 대체 기능을 사용하고 있다고 말할 수 있습니다. - 부분이 나를 혼란스럽게 합니다 (CLOSED). 왜 여전히 나열되어 있습니까?

업데이트: 얼마 후 나는 cslistener 포트를 찾았습니다. 실제로는 9000입니다. 이 포트는 다시 xdebug가 원격 디버깅을 수신하고 있는 포트입니다. 그래서 거기에 잘못된 구성이 있거나 xdebug의 버그인 것 같습니다(Brew가 설치한 XDebug 2.2.5를 사용하고 있습니다).

답변1

Mac에서 XDEBUG와 함께 PHPStorm을 사용하고 있습니까?

나는 같은 문제를 가지고있다. 여기에서 XDEBUG에 제출된 공개 버그를 발견했습니다.

http://bugs.xdebug.org/view.php?id=1070

업데이트

이제 이 버그가 수정되었습니다.

방금 Sean Dubois의 패치를 병합했는데, 이 패치가 이 문제를 해결해 줄 것입니다 \o/! 패치는 2.3.4와 2.4.0에 있을 예정입니다.

나는 이것이 커밋이라고 믿습니다.https://github.com/xdebug/xdebug/commit/6efc6588efc277d648a78b69c11c721992c996f9

당신이 있는지 확인하십시오업데이트된 버전 사용이번 패치로.

답변2

나는 당신이 파일 설명자가 누출되는 아파치(아마도 PHP 모듈이지만 확신하기는 어렵습니다)에서 실행 중인 것을 확신합니다. 즉, 파일을 연 다음 무기한 열어 두는 것입니다. 이 경우 열린 파일 제한을 늘리면 제한에 도달하는 데 시간이 더 오래 걸립니다. 실제로 해야 할 일은 모든 파일을 열고 열어 두는 것이 무엇인지 추적하는 것입니다.

lsof("LiSt Open Files") 명령을 사용하면 무슨 일이 일어나고 있는지 어느 정도 알 수 있을 것입니다 .

sudo lsof -c httpd

Apache가 오랫동안 실행되지 않았을 때 실행하여 무엇이 정상인지 확인하고, 한계에 도달하면 다시 실행하십시오. 첫 번째 목록에는 없는 많은 추가 파일을 두 번째 출력에서 ​​찾아보세요. 이는 다음에서 연 파일을 나열한다는 사실로 인해 다소 복잡해질 수 있습니다.모두httpd 프로세스 및 (아파치 설정 및 서버 로드에 따라) 다수의 프로세스가 있을 수 있습니다. 중요한 것은 모든 서버 프로세스의 총합이 아니라 단일 프로세스에서 열린 파일 수입니다. 를 사용하여 sudo lsof -p someprocessID한 번에 하나의 서버 프로세스만 나열 할 수도 있습니다 .

추가로 열린 파일이 무엇인지 확인하면 해당 파일을 열고 열어두는 것이 무엇인지 알 수 있기를 바랍니다.

답변3

xdebug.ini에 다음 줄을 추가하면 문제가 해결되었습니다.

xdebug.remote_autostart = 0

답변4

Brew의 OSX 10.9.4와 Apache 2.2 및 PHP 5.3에서도 동일한 결과를 얻었습니다.

이것이 실제로 문제를 해결하지는 않지만 Apache MaxRequestsPerChild 설정을 10과 같은 값으로 설정하여 문제를 억제할 수 있습니다. 이는 개발에 적합합니다.

diff -r 2c0473b696fd -r acf809f04b17 apache2/2.2/httpd.conf
--- a/apache2/2.2/httpd.conf    Thu Aug 14 16:14:25 2014 -0500
+++ b/apache2/2.2/httpd.conf    Thu Aug 14 16:19:10 2014 -0500
@@ -437,7 +437,7 @@
 # necessary.

 # Server-pool management (MPM specific)
-#Include /usr/local/etc/apache2/2.2/extra/httpd-mpm.conf
+Include /usr/local/etc/apache2/2.2/extra/httpd-mpm.conf

 # Multi-language error messages
 #Include /usr/local/etc/apache2/2.2/extra/httpd-multilang-errordoc.conf
diff -r 2c0473b696fd -r acf809f04b17 apache2/2.2/extra/httpd-mpm.conf
--- a/apache2/2.2/extra/httpd-mpm.conf  Thu Aug 14 16:14:25 2014 -0500
+++ b/apache2/2.2/extra/httpd-mpm.conf  Thu Aug 14 16:19:10 2014 -0500
@@ -38,7 +38,7 @@
     MinSpareServers       5
     MaxSpareServers      10
     MaxClients          150
-    MaxRequestsPerChild   0
+    MaxRequestsPerChild  10
 </IfModule>

 # worker MPM

그러면 유출된 파일을 제거하기 위해 자주 아파치를 다시 시작하지 않아도 됩니다.

관련 정보