php-fpmを動かしていて以下のようなエラーが出た時には、memory_limit 以上にメモリを割り当てようとしているためだと思う。
Allowed memory size of xxxx bytes exhausted (tried to allocate xxxx bytes) ...
ここでpsでプロセスのメモリ使用状態を見た時に、php.ini
のmemory_limit
で設定した値以上にphp-fpmプロセスがメモリを確保しているように見えるときがある。
例えば、memory_limit
を16M
にしていた時のプロセスの状態を見ると、メモリは36860(36M)
割り当てられているように見えるけど、php-fpmは普通に動いている。
psで見える物理メモリは実際に書き込まれたときに増えるはずなので実メモリに36M程度割り当てられていることになる…はず。
hoge 28849 0.0 3.4 427360 36860 ? S Dec22 2:37 \_ php-fpm: pool example.com
そもそもphp-fpmはどのようにメモリを確保しているのか知らない…とか思い始めたので調べてみた。