OpenVZで「Cannot allocate memory」が出た件。
開発環境でエラーが出てると報告を受ける。
$ ls ls: error while loading shared libraries: /lib/libpthread.so.0: cannot apply additional memory protection after relocation: Cannot allocate memory
メモリって出ているけどfreeで見た感じはメモリを使いきっているわけでは無かった。
OpenVZなのでゲスト側で以下を叩いて確認。
# cat /proc/user_beancounters
kmemsizeでfailcntが出ていた。
どうもkmemsizeのリミットが14MBでそこでひっかかっている様子。
kmemsizeとは?
OS カーネルによって割り当てられるスワップ不可のメモリサイズ(バイト)。
これには、コンテナプロセスと関連付けられたすべてのカーネル内部データ構造が含まれます(ネットワークバッファは除く)。
これらのデータ構造はサーバ RAM の最初のギガバイトに常駐するため、”low” メモリと呼ばれます。
いくつに設定していいのかわからなかったので調査。
takeのとりあえず社長日記 やっとこさOpenVZ本番運用開始。
http://blog.y2ji.co.jp/archives/51826799.html
上記ブログでメモリ1GBにつき128MBくらいということなので、
今回は3GBのメモリを割り当てているので384MBを割りあててみることに。
元が14MBだったので大幅増量。大丈夫か・・・?
CPIでは32MBとという記事も見つけた。
まつぼ x Web kmemsize
http://matsu.teraren.com/blog/2010/04/22/kmemsize/
まぁしかし開発環境なので大幅に増やしてみる。
ホスト側で。
# vzctl set 175 --kmemsize 384M --save
ゲト側で確認。
# cat /proc/user_beancounters uid resource held maxheld barrier limit failcnt 175: kmemsize 15109212 15679488 402653184 402653184 313
limitが384MBに上がっている。
エラーも出なくなったのでしばらく様子見。。