OpenVZ コンテナでのpostgresqlのshared_buffer設定ではまる。。
Proxmox配下で動かしているOpenVZコンテナに検証環境用DBがあってpostgresを動かしているのですが
そのshared_bufferの設定でちょいはまりしたのでメモ。
とりあえず、shared_bufferについてはデフォルトの設定で動作させていて
shared_buffers = 32MB
と設定していた。
今回、postgresの共有メモリを増加した
場合の検証をしたくて、この値を256MBにした。
実際はもっと詳細に数値を検討し、設定する必要があるが、今回は取り急ぎの確認をしたかったので
この値に特に意味はなし。
きちんとした計算方式は以下の参考ページにすごく細かく記載されている。
あとで見ないと…。
Stray Penguin - Linux Memo (PostgreSQL-5)
PostgreSQLのチューニング事例 - Qiita
実際にshared_bufferを変更する際に、kernelに割当てられている共有メモリの上限を超えると
postgresql起動時にエラーが発生して起動できないため
# cat /proc/sys/kernel/shmmax 33554432
ここで確認できる32MBの上限を増やします。
# cp -p /etc/sysctl.conf /etc/sysctl.conf.back バックアップファイルを取得 # echo "kernel.shmmax = 335544320" >> /etc/sysctl.conf sysctl.confにshmmaxを320MBにするように設定を追加。 # sysctl -p 設定を反映する。 # cat /proc/sys/kernel/shmmax 335544320
では、kernelの共有メモリの上限も変更したのでpostgresqlを再起動しますかと
再起動したところ…。
2015-04-16 17:13:03 JST DB: PID:20878 FATAL: could not create shared memory segment: Cannot allocate memory 2015-04-16 17:13:03 JST DB: PID:20878 DETAIL: Failed system call was shmget(key=5432001, size=289128448, 03600). 2015-04-16 17:13:03 JST DB: PID:20878 HINT: This error usually means that PostgreSQL's request for a shared memory segment exceeded available memory or swap space, or exceeded your kernel's SHMALL parameter. You can either reduce the request size or reconfigure the kernel with larger SHMALL. To reduce the request size (currently 289128448 bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections. The PostgreSQL documentation contains more information about shared memory configuration
いやいや、shmmaxもshmallも256MB以上を設定しておりますゾ。
なんでやー。。
といろいろ確認してみたところ、vzの設定ファイルにXXXX.confに共有ページ設定があるんですが
そちらが上限84MBになっていたというオチでした…。
Postgresql and shared memory - OpenVZ Linux Containers Wiki
SHMPAGES・・・特定のコンテナプロセスに割り当てられる共用メモリの合計
# UBC parameters (in form of barrier:limit) KMEMSIZE="1951399936:2147483648" LOCKEDPAGES="524288" PRIVVMPAGES="unlimited" SHMPAGES="21504:21504" 21504 * 4 / 1024 でメモリのMBとなる。 | | |
で、ProxmoxのUBCのタブで確認しても84MBとなっていることを確認できたので
ではそちらを修正。
# vzctl set CTID --shmpages 81920 --save UB limits were set successfully CT configuration saved to /etc/pve/openvz/CTID.conf
Proxmoxの画面上で確認しても320MBの共有メモリが割当られていることを確認。
で再起動してみたら問題なしでしたー。
これでpostgresqlの共有メモリを256MBにした場合の検証ができるー。
ああ、でも反対に、confの設定をこのままにして
kernel.shmmaxの値を32MBに戻したらどうなるんだろう。
あとでやってみよう。
OpenVZ徹底入門 バーチャルデータセンター構築完全ガイド (DVD付)
- 作者: 中島能和,里浜圭一
- 出版社/メーカー: 翔泳社
- 発売日: 2008/11/05
- メディア: 大型本
- クリック: 8回
- この商品を含むブログ (5件) を見る
★4/21am9:59迄Facebook経由5000円購入でP5倍★【Joshinは平成20/22/24年度製品安全対策優良企... |