freebsdサーバーにnginx + php-fpmとAPCをインストールしていますが、APCに接続されているphp-fpmで常に問題が発生しています。 php-fpmが「lockf」状態(top
)でフリーズするため、サイトが機能していません。 apc.shm_size
をデフォルト値の30に下げると、php-fpmがフリーズしないようになりますが、APCに多くの変数を格納しているため、30Mbでは不十分であることに気付きました。 apc.shm_size
をより高い値(60として)に上げると、php-fpmプロセスがより多くのメモリ、実質的にすべてのサーバー物理メモリを使用することに気付きました。これは、60Mbがすべてのphp間で共有されていることを理解しているため奇妙です。 -fpmプロセスであり、すべてのphp-fpmプロセスのメモリ使用量に影響を与えるべきではありません。 apc.shm_segments
の値を1より大きい値に変更しようとしましたが、php-fpmの再起動時にエラーが発生しました。
PHP Startup: apc.shm_segments setting ignored in MMAP mode in <b>Unknown</b> on line <b>0</b><br />
Unknown(0) : Warning - PHP Startup: apc.shm_segments setting ignored in MMAP mode
では、これらのパラメータが実際にAPCにどのように影響するのか、また大量の共有メモリを使用するとphp-fpmが停止するのはなぜですか? MMAP mode
とはどういう意味ですか? xcacheに切り替えることを考えていますが、php-fpmで動作し、本番環境で十分安定していますか?
Mmapについて:
apc
のスクリプトを構成します。ディレクティブがあります。
--disable-apc-mmap
Disable mmap support and use IPC shm instead
また、3種類のロックがあります。
--enable-apc-sem
Enable semaphore locks instead of fcntl
--enable-apc-spinlocks
Enable spin locks EXPERIMENTAL
+デフォルトfcntl
。 spinlocks
を試して、何が起こるかを確認できます
PS。これも役立つはずです: http://www.php.net/manual/en/apc.setup.php
Sysctl値を増やしていない場合kern.ipc.shmmaxそれを行う必要があります。デフォルトでは、少なくとも私のFreeBSD8.0と多くのLinuxディストリビューションでも32MBです。
sysctl -w kern.ipc.shmmax=134217728
を試して、値を128メガバイトに増やしてください。次に、apc.shm_sizeをもう一度30MB以上に増やしてみます。
それが役立つ場合は、希望するkern.ipc.shmmax値を/ etc/sysctl.confに設定して、再起動後も変更が持続するようにします。