VPSの制限を越えた場合のトラブルシューティング

webarenaのVPSサーバが停止してしまったので、その際のトラブルシューティングのメモ。


現象
・すべてのウェブサイトが 403 Forbidden を返す。
SSHDが接続できない。
・工事障害情報に特に自サーバに対するメンテナンスは無い。(http://web.arena.ne.jp/suitepro/support/mainte/index.html
・コントロールパネルでも異常なし(https://pro.arena.ne.jp/apanel/login
・サーバを再起動すると復旧する。


対処
サポートからの返答では、メモリ不足であること、VPSなので細かな制限値があり、/proc/user_beancountersで内容を確認して欲しい、コントロールパネルの「リソース使用状況表示」はすべての制限値を記載しているわけではない、最近発売したVPS v3は制限値がゆるやかになっているのでオススメ。という事だった。


muninというサーバ監視ツールで状況を確認するとメモリは1Gバイト近く余っているので、メモリ関連で別の制限事項にあたっているようだ。webarena の vps v2 は、Virtuozzoで管理されているとのことで以下のコマンドをroot権限で叩くと制限値が確認できる。


cat /proc/user_beancounters


resource held maxheld barrier limit failcnt
kmemsize 12826377 26543346 134217728 147639500 0
lockedpages 0 0 844 844 0
privvmpages 107697 182106 447426 492168 0
shmpages 10699 44742 44742 44742 5559
dummy 0 0 0 0 0
numproc 62 146 192 192 0
physpages 42816 82228 0 9223372036854775807 0
vmguarpages 0 0 74571 9223372036854775807 0
oomguarpages 42816 104085 74571 9223372036854775807 0
numtcpsock 15 319 512 512 0
numflock 8 25 675 742 0
numpty 1 1 42 42 0
numsiginfo 0 60 1024 1024 0
tcpsndbuf 431176 2225336 4036394 5764906 0
tcprcvbuf 245760 1385664 4036394 5764906 0
othersockbuf 174600 2019920 2018197 3746709 6
dgramrcvbuf 0 91896 2018197 2018197 0
numothersock 111 296 512 512 0
dcachesize 744697 3803020 3775875 3889152 21654931325
numfile 1383 3111 6752 6752 0
dummy 0 0 0 0 0
dummy 0 0 0 0 0
dummy 0 0 0 0 0
numiptent 10 10 35 35 0


held が現在値、limitが制限値、failcntが制限値を超えて失敗した数のようだ。サーバが停止した原因はshmpagesとdcachesizeリソースが枯渇しているからということが分かった。
共有メモリが枯渇しているためにdcachesizeでもエラーが頻発していると推測される。shmpagesはtmpfsに利用されているとのことで、muninで確認するとtmpfsのサイズが増加傾向にあった調査するとphpのeacceleratorのキャッシュが原因だ。

VPS(Virtuozzo) リソース消費量モニタリング – Linux
http://www.makizou.com/archives/1330

shmpages
特定のVPS のプロセスにより割り当てられる共用メモリの合計

dcachesize
メモリでロックされているdentryおよびiノード構造の合計サイズ

shmpages

shmpages: the total size of shared memory (IPC, shared anonymous mappings and tmpfs objects). These pages are also accounted into privvmpages.

The barrier should be set equal to the limit. The configuration of this parameter doesn't affect security and stability of the whole system or isolation between Containers. Its configuration affects functionality and resource shortage reaction of applications in the given Container only.


ということで、キャッシュを物理ディスクに配置することで対応しました。