Saya menjalankan Mac OS X 10.9.4, termasuk server web apache2 bawaan dengan PHP 5.5.14 dari brew (paket: php55, php55-intl, php55-pdo-pgsql, php55-xdebug).
Saat menjalankan pengaturan ini berfungsi dengan baik. Namun, setelah beberapa waktu, saya akan menjalankan 403 kesalahan untuk setiap permintaan. Saya telah mencari log kesalahan apache, dan menemukan sesuatu seperti berikut:
[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
Sepertinya file itu tidak bisa dibaca lagi, dan entah bagaimana mengembalikan 403. Saya sudah mengetahui tentang batas-batas tertentu, tetapi launchctl mengembalikan, saya memiliki batas keras tak terbatas pada file terbuka:
~ $ 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
Saya juga sudah mencoba untuk mengatur maxfiles ke 4096 dengan perintah launchctl limit maxfiles 4096 16384
, tetapi masalah masih kembali setelah beberapa waktu. Ada ide apa lagi yang bisa saya periksa?
UPDATE : Ketika menjalankan lsof -c httpd
perintah seperti yang disarankan oleh Gordon Davisson, saya dapat melihat bahwa ada banyak entri seperti berikut:
httpd 1361 _www 15u IPv4 0xb306b48659f63853 0t0 TCP localhost:50603->localhost:cslistener (CLOSED)
Saya dapat mengatakan bahwa aplikasi yang saya gunakan menggunakan websockets, dan juga menggunakan fallback ketika websockets tidak tersedia atau rekanannya tidak berjalan di server. Yang membingungkan saya adalah (CLOSED)
-bagian, mengapa masih terdaftar?
PEMBARUAN : Setelah beberapa waktu saya mencari port cslistener, yang sebenarnya adalah 9000, yang mana lagi-lagi port xdebug sedang mendengarkan debugging jarak jauh. Jadi saya kira saya telah mendapatkan beberapa konfigurasi yang salah di sana, atau itu adalah bug di xdebug (Saya menggunakan XDebug 2.2.5, diinstal oleh minuman)
sumber
xdebug.remote_enable=0
diphp.ini
untuk mengubah koneksi remote Xdebug bila tidak menggunakan mereka. Diperlukan restart Apache.Saya cukup yakin Anda memiliki sesuatu yang berjalan di apache (mungkin modul PHP, tetapi sulit untuk memastikan) itu adalah deskriptor file yang bocor. Yaitu, membuka file dan kemudian membiarkannya terbuka tanpa batas. Jika ini masalahnya, meningkatkan batas file terbuka hanya akan membuatnya lebih lama untuk mencapai batas. Yang perlu Anda lakukan adalah melacak apa yang membuka semua file dan membiarkannya terbuka.
Anda mungkin dapat mengetahui apa yang terjadi dengan perintah
lsof
("LiSt Open Files"):Jalankan ketika apache belum berjalan lama untuk melihat apa yang normal, lalu lagi ketika mencapai batas. Lihat di output kedua untuk banyak file tambahan yang tidak ada di daftar pertama. Perhatikan bahwa ini akan sedikit rumit oleh fakta bahwa itu akan mencantumkan file yang dibuka oleh semua proses httpd, dan (tergantung pada pengaturan apache Anda dan server load) mungkin ada sejumlah besar dari mereka; yang penting adalah jumlah file yang dibuka oleh satu proses, bukan total di semua proses server. Anda juga dapat menggunakan
sudo lsof -p someprocessID
untuk mendaftar hanya satu proses server pada satu waktu.Semoga melihat file ekstra apa yang terbuka akan memberi Anda ide yang baik tentang apa yang membukanya dan membiarkannya terbuka.
sumber
Menambahkan baris berikut ke xdebug.ini juga memecahkan masalah bagi saya
sumber
Saya mendapatkan hal yang sama dengan OSX 10.9.4 dan keduanya Apache 2.2 dan PHP 5.3 dari Brew.
Meskipun ini tidak benar-benar memperbaiki masalah, Anda dapat mengatasinya dengan mengatur pengaturan Apache MaxRequestsPerChild ke sesuatu seperti 10 - yang seharusnya baik untuk pengembangan.
Itu akan menyelamatkan Anda setidaknya dari harus me-restart apache sesering mungkin untuk menyingkirkan file-file yang bocor
sumber