LoginSignup
11
10

More than 5 years have passed since last update.

12GBメモリが積んであるマシンでも3GB程度でout of memoryしてしまう

Last updated at Posted at 2014-12-08

概要

PHPで書いた重めのプログラム(何万行かわからないレコードをDBから取ってくる)を走らせたところ、10GB使わないうちにout of memoryで落ちてしまった

前提

  • 搭載されているメモリは12GBで基本的に10GB程度はフリー
  • out of memory で落ちた時にPHPに割り当てられていたメモリは2.5GB
  • php.iniのmemory_limitは-1なので無制限

調査

無制限なのにout of memoryしてるのでPHP側ではなくOS側で何かしてるんだろうという考えに
そういやOSが32bitだった気がしたので調べてみたら32bitだった
そもそも32bitだったら12GB認識しないのでは?と思ったけどPAEのおかげで32bitより大きい番地でも割り当てられるようになってるらしい
PAEよくわかってなかったので調べた
物理アドレスは拡張されるので最大12GBは利用できるが、OS側が割り当てる仮想アドレス空間は結局32bitなので4GB程度しか利用できず、更にカーネル空間としてOSに1GB割り当てられるので結局メモリが全てフリーでも1プロセスあたりでは3GBが上限になる

結論

PHPのせいではなくOSが32bitだったせいだった

11
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
10