ほげほげ

プログラミング、英会話、ヨガ、料理などの備忘録など。

mongodb が out of memory で起動できない

現象

webサーバーとmongodbを共存させて運用しているサーバーがありました。
先日mongodbのデーモンが停止して、自動起動に失敗していました。

翌朝確認しようとmongodの再起動を試みるも、以下のような状況。

$ sudo service mongod status
mongod dead but subsys locked

$ sudo service mongod restart
Stopping mongod:                                           [FAILED]
Starting mongod: Fri Jun 20 22:25:54.088 Assertion: 13524:out of memory AlignedBuilder
0xde8c31 0xdaa3fb 0xda83cc 0xda8660 0x92569d 0x121a2f6
 /usr/bin/mongod(_ZN5mongo15printStackTraceERSo+0x21) [0xde8c31]
 /usr/bin/mongod(_ZN5mongo11msgassertedEiPKc+0x9b) [0xdaa3fb]
 /usr/bin/mongod() [0xda83cc]
 /usr/bin/mongod(_ZN5mongo14AlignedBuilderC1Ej+0x10) [0xda8660]
 /usr/bin/mongod() [0x92569d]
 /usr/bin/mongod() [0x121a2f6]
terminate called after throwing an instance of 'mongo::MsgAssertionException'
  what():  out of memory AlignedBuilder
bash: line 1:  8757 Aborted                 numactl --interleave=all /usr/bin/mongod -f /etc/mongod.conf
                                                           [FAILED]

調査

topコマンドで見ると、php-cgiのプロセスが1個あたり1.x%くらいメモリを消費していた。
lighttpdの子プロセスが64個あるのでその辺りが原因ぽいと考えました。

とりあえず、fastcgiの設定を以下のように変更して、mongodbが起動することまで確認できました。
あとは運用して様子を見ていきます。

変更前

  fastcgi.server = ( ".php" =>
    ((
      "socket" => "/tmp/php.socket",
      "bin-path" => "/usr/bin/php-cgi",
      "bin-environment" => (
        "PHP_FCGI_CHILDREN" => "64",
        "PHP_FCGI_MAX_REQUESTS" => "10000"
      ),
      "min-procs" => 1,
      "max-procs" => 1,
      "idle-timeout" => 20
    ))
  )

変更後

  fastcgi.server = ( ".php" =>
    ((
      "socket" => "/tmp/php.socket",
      "bin-path" => "/usr/bin/php-cgi",
      "bin-environment" => (
        "PHP_FCGI_CHILDREN" => "16",
        "PHP_FCGI_MAX_REQUESTS" => "5000"
      ),
      "min-procs" => 1,
      "max-procs" => 1,
      "idle-timeout" => 20
    ))
  )