OpenVZで「Cannot allocate memory」が出た件。


OpenVZで「Cannot allocate memory」が出た件。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に上がっている。

エラーも出なくなったのでしばらく様子見。。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です