【ツール活用|初心者向け】コンテナが重い?「docker stats」でリソース消費の犯人を特定する方法

1. 導入:なぜリソース監視が必要なのか

Dockerで複数のコンテナを動かしていると、「なんだか最近PCの動作が重いな?」と感じることはありませんか。コンテナはブラックボックスになりがちで、どのプロセスがCPUやメモリを使いすぎているのかが視覚的に見えにくいという課題があります。
そんな時、標準コマンドである「docker stats」を使えば、実行中のコンテナがどれだけのリソースを消費しているか一目で把握できます。パフォーマンスのボトルネックを特定し、快適な開発環境を維持するために必須のテクニックです。

2. 基礎知識:リソース監視の重要性

「docker stats」は、Dockerエンジンから直接リアルタイムの統計情報を取得するコマンドです。
特に重要な指標は以下の3つです。
CPU使用率:コンテナがどれだけCPUを占有しているか。
メモリ使用量:現在使っているメモリ量と、制限値(あれば)の割合。メモリリークの早期発見に役立ちます。
ネットワークI/O:コンテナが送受信しているデータ量。通信エラーの調査にも使われます。
これらを把握することで、本番環境へデプロイする際に「どの程度のスペック(CPU/メモリの制限値)を割り当てるべきか」という設計判断が正確になります。

3. 実装/解決策:コマンドの使い方

ターミナルを開き、以下のコマンドを入力するだけで監視が始まります。

基本的な実行コマンド:
docker stats

特定のコンテナだけを監視したい場合は、コンテナ名やIDを指定します。
docker stats コンテナ名

4. サンプルプログラム:実用的な監視スクリプト

単に表示するだけでなく、特定のフォーマットで情報を取得したい場合に便利なコマンド例です。以下のコマンドは、CPUとメモリの使用率をCSVライクな形式で出力します。

現在実行中のコンテナの統計情報を「名前、CPU%、メモリ%」のみ抽出し、1秒間隔で表示するコマンド例です
–no-stream オプションをつけると、その瞬間の統計のみを出力します
–format を使うことで、必要な情報だけを整形して表示可能です

docker stats –format “table {{.Name}}\t{{.CPUPerc}}\t{{.MemPerc}}”

もし、すべてのコンテナを常に監視し続けたい場合は、以下をそのまま実行してください
docker stats –all –no-trunc

5. 応用・注意点:現場での活用と落とし穴

現場で活用する際のポイントが2つあります。

1. メモリリークの発見
アプリケーションを長時間起動したまま「docker stats」を眺めてみてください。処理を行っていないにも関わらず、メモリ使用量が右肩上がりに増え続けている場合は、プログラム内のメモリリークを疑いましょう。

2. 制限(Limits)の検討
Docker Composeファイルなどで「deploy: resources: limits」を設定する際、適当な数値を設定するのは危険です。まずは「docker stats」を使って、通常時の最大使用量を数日間測定し、その数値の1.2倍〜1.5倍程度を制限値に設定するのが運用のセオリーです。

「docker stats」を使いこなして、コンテナの挙動を可視化し、安定したインフラ構築を目指しましょう。

コメント

タイトルとURLをコピーしました