以上にメモリを割り当てようとしているためだと思う。...ここでpsでプロセスのメモリ使用状態を見た時に、php.iniのmemory_limitで設定した値以上にphp-fpmプロセスがメモリを確保しているように見えるときがある。memory_limitを16Mにしていた時のプロセスの状態を見ると、メモリは36860(36M)割り当てられているように見えるけど、php-fpmは普通に動いている。psで見える物理メモリは実際に書き込まれたときに増えるはずなので実メモリに36M程度割り当てられていることになる...はず。example.comそもそもphp-fpmはどのようにメモリを確保しているのか知らない...とか思い始めたので調べてみた。中で定義されている模様。NULL;}}#endifエラーが発生したらzend_mm_safe_error()が呼び出されるようだった。limit(memory_limit)と今割り当てられているページサイズ(real_size)の差を計算し、その差より割り当てようとしているメモリが多い場合はGC(zend_mm_gc())を実行し、それでもあふれる場合はエラーとなる...ように見える。zend_mm_gc()の中身は見ていない。0;zend_bailout();exit(1);}で、これらのエラーの時のメモリはどの値を見ているのかと思い、各関数を見ていると、zend_mm_heapの値を参照しているようだった。*/#endifここで確保したメモリを管理しているように見える。emalloc()という関数によってメモリを確保している。USE_ZEND_ALLOC=0を指定するとemalloc()を使わず、システムのデフォルトのメモリアロケーターを使うらしい。Manager)が使われている、ということが分かった。Managerの中で管理されているメモリ量から管理されていることも分かった。まとめこの記事ではPHPのメモリ管理の仕組みについて調べてみて自分なりにわかったことをまとめた。Managerという独自のメモリ管理機能を使っており、emalloc()という関数でメモリを確保していることがわかった。Managerの中のzend_alloc.cの中の_zend_mm_heap構造体の中で管理されているメモリの状況に応じてエラーハンドリングを行っているらしいことがわかった。コメントをキャンセルメールアドレスが公開されることはありません。