web-dev-qa-db-ja.com

APC共有メモリの問題

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で動作し、本番環境で十分安定していますか?

3
kipelovets

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

+デフォルトfcntlspinlocksを試して、何が起こるかを確認できます

PS。これも役立つはずです: http://www.php.net/manual/en/apc.setup.php

3
SaveTheRbtz

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に設定して、再起動後も変更が持続するようにします。

2

どのようにメモリを設定しましたか?

apc.shm_size=64またはapc.shm_size=64M手動

後者は私の同様の問題を解決しました。

0
styu