mongodb 2.6 クラスタ構成で過負荷対応
クラスタ構成環境のmongosで下記エラー発生。
調査・対応を下記へ記載しておく。
- エラー内容
対応方法
1.カーネル設定
vm.swappinessの設定をします。
vm.swappinessは、swap領域の扱いを制御するカーネルの設定です。
この設定値が小さければ小さいほどswapを抑制します。
デフォルトは、vm.swappiness=60です。
参考)Swappiness
vm.swappiness = 0 メモリが一杯になるまでスワップを利用しない
vm.swappiness = 60 規定値
vm.swappiness = 100 全体のパフォーマンスに影響しうるほど積極的にスワップ処理を行う
設定確認
# sysctl vm.swappiness vm.swappiness = 60
設定変更
# echo 10 > /proc/sys/vm/swappiness
設定確認
# sysctl vm.swappiness vm.swappiness = 10
sysctl.confに設定を追記
# vim /etc/sysctl.conf vm.swappiness = 10
2.logrotate設定
公式ドキュメントによると下記3パターンの設定方法がある。
mongo shell
- mongos> db.runCommand( { logRotate : 1 } )
- { "ok" : 1 }
-
- shell> kill -SIGUSR1
- shell> killall -SIGUSR1 mongod
Rotate Log Files — MongoDB Manual 2.6
bashを使用したローテーションが簡易で良いと考えたが、
実行した場合mongosが落ちるという事象が発生。
原因不明な為、mongo shellを使用したケースで対応。
### cat /root/mongologrotate.sh #/bin/sh # mongod log lotate mongo --quiet admin /root/MongoLogRotate.js # clear old olgs cd {/mongologdir} DELDAY=`date --date '30 days ago' '+%Y-%m-%d'` for LINE in `find -iname "mongod.log.$DELDAY*"` do echo "delete $LINE" rm -f $LINE done ### cat /root/MongoLogRotate.js db.auth("root", "******") db.runCommand( { logRotate : 1 } ) ### crontab -l 00 15 * * * /bin/sh /root/mongologrotate.sh
3.[slab | page]cache設定
上記2パターンを実行したケースにおいても現象改善されない状況。下記記事からcache設定。
UPDATE: It's fair that the memory usage looks high, which might lead to the conclusion it's another process. There's no other processes using any significant memory on the server; the memory appears to be consumed in the cache, but I'm not clear why that would be the case:
mongodb - Mongod resident memory usage low - Stack Overflow
OS側が保持している各cache設定を開放。
開放前のメモリー使用状況
### free -m total used free shared buffers cached Mem: 15951 15204 746 0 145 10355 -/+ buffers/cache: 4703 11248 Swap: 511 140 371 ### cat /proc/meminfo MemTotal: 16334048 kB MemFree: 764992 kB Buffers: 149060 kB Cached: 10604528 kB SwapCached: 7712 kB Active: 8825784 kB Inactive: 5337972 kB Active(anon): 2757160 kB Inactive(anon): 653428 kB Active(file): 6068624 kB Inactive(file): 4684544 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 524284 kB SwapFree: 380280 kB Dirty: 36 kB
OS保持の各cache開放
# free && sync && echo 3 > /proc/sys/vm/drop_caches && echo "" && free
開放後のメモリー使用状況
### free -m total used free shared buffers cached Mem: 15951 4908 11042 0 166 1183 -/+ buffers/cache: 3559 12392 Swap: 511 124 387 ### cat /proc/meminfo MemTotal: 16334048 kB MemFree: 11306796 kB Buffers: 170120 kB Cached: 1212012 kB SwapCached: 5716 kB Active: 3907484 kB Inactive: 99016 kB Active(anon): 2608944 kB Inactive(anon): 15848 kB Active(file): 1298540 kB Inactive(file): 83168 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 524284 kB SwapFree: 396408 kB Dirty: 40 kB Writeback: 0 kB AnonPages: 2618788 kB Mapped: 14892 kB Shmem: 424 kB Slab: 326744 kB SReclaimable: 84616 kB SUnreclaim: 242128 kB KernelStack: 410944 kB PageTables: 63036 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 8691308 kB Committed_AS: 28622200 kB VmallocTotal: 34359738367 kB VmallocUsed: 171952 kB VmallocChunk: 34359558216 kB HardwareCorrupted: 0 kB AnonHugePages: 1978368 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB DirectMap4k: 10240 kB DirectMap2M: 16766976 kB
cache開放後、free領域がmongoに割り当てされれば問題ない為
mongo shell 起動し、物理メモリ(resident)領域がcache開放前後で増加しているか確認。
mongos> db.serverStatus().mem { "bits" : 64, "resident" : 3299, "virtual" : 29016, "supported" : true }