深夜にサイトが落ちる、データベースが理由もなく再起動する、SSHが重くて接続できない——これらの症状の最も一般的な原因はメモリ枯渇です。本記事では確認方法、応急処置、恒久対策を解説します。
ステップ1:メモリが原因か確認する
SSHでログインしfree -hを実行、availableの列に注目します。常時200MB未満ならメモリ不足です。次にdmesg | grep -i killを実行し、Out of memory: Killed processが見つかれば、カーネルのOOM Killerがプロセスを強制終了しています。サービスが「勝手に消える」のはこれが原因です。
ステップ2:メモリを食っているプロセスを特定
topを実行しShift+Mでメモリ順にソート。よくある犯人:
- MySQL:デフォルト設定は潤沢なメモリを前提としています。小さなマシンではinnodb_buffer_pool_sizeを下げましょう;
- PHP-FPM:ワーカープロセスが多すぎる。max_childrenは利用可能メモリ÷プロセス単体の使用量で見積もりを;
- 暴走アプリ:メモリリークしたNode.jsやJavaのプロセスは、すべてを食い尽くすまで成長します。
ステップ3:応急処置としてSwapを追加
Swapはディスクを予備メモリとして使う仕組みで、OOM Killerの即時発動を防ぎます。VPSのイメージには通常Swapがありません。2GB追加する手順:fallocateでswapファイルを作成、chmod 600で権限設定、mkswapでフォーマット、swaponで有効化、最後に/etc/fstabに追記して再起動後も有効にします。Swapはあくまでバッファです:メモリが本当に足りないときはクラッシュの代わりに動作が遅くなり、調査の時間を稼いでくれます。
恒久対策
チューニング後もavailableが底を這い、Swap使用率が高止まりするなら、ワークロードがプランの容量を超えています。メモリのアップグレードが最もコスト効率の良い解決策です。00Sharkはプランのアップグレードに対応しています。現在の使用状況を添えてサポートまでご相談ください。