導入
私が学生だった頃、先生やクラスメートがlinux
学ぶことの大切さについてよく話していました。しかし、このコマンド ライン インターフェイスを見たときに頭が痛くなったので、急いで覚えましたが、ああ、ゲームはまだ良いです。
しかし、ここ 2 日間サーバーをいじっていたときに、デプロイしたサービスが常にクラッシュすることがわかり、最終的にサーバーのメモリが不足していることがわかりました。
問題の原因を突き止めるのは大変なことです。「それは有害です。私がこれまでよく勉強して練習しなかっただけです。今でも頭痛がするはずのときに頭痛がします。それは時間の問題です。」(まあ、後発の人たちにもアドバイスしておきますが、関連分野に携わりたいのであれば、基礎知識のしっかりした基盤が必要であり、内面的なスキルや精神的な方法についてもっと学ぶのは常に正しいことです)。
今日の記事では、linux
システム内のメモリを分析する方法を簡単に紹介します。
一般的なメモリ分析ツールの紹介
/proc/meminfo
cat /proc/meminfo
言葉 | 説明する |
---|---|
メモリ合計 | BIOS システムメモリ、カーネルなども一定量のメモリを占有するため、通常、システム メモリの合計はハードウェア メモリよりも小さくなります。 |
メムフリー | システム空きメモリ、物理メモリの残り。 |
メモリ利用可能 | アプリケーションで使用可能なメモリとの違いはMemFree 、MemFree システム レベルのメモリ スティックの残りの領域です。これMemAvailable はアプリケーション レベルです。システム内の一部のメモリが使用されていますが、その一部は次のようにリサイクルできます。Buffers アプリケーションCached がメモリを使用する必要がある場合、システムはメモリのこの部分を積極的に解放します。 |
バッファー | バッファ メモリ。まだディスクに「書き込まれていない」コンテンツをキャッシュするために使用されます。 |
キャッシュされた | ディスクから「読み取った」内容をキャッシュします。 |
buffer
io
デバイス書き込みのキャッシュとして使用されます。デバイスの読み取りキャッシュcache
として使用されます。io
ここでのデバイスとはio
主にブロックデバイスファイルやファイルシステム上の通常のファイルを指します。
MemAvailable = MemFree + Buffers + Cached
これはあくまで理想的な計算方法であり、実際のデータはさらに大きな誤差を伴うことが多いことに注意してください。
無料
free -h
言葉 | 説明する |
---|---|
メム | 行(2行目)のメモリ使用量 |
スワップ | 行 (3 行目) のスワップ領域の使用量。仮想メモリと考えるとwindows 、メモリが不足した場合に、ハードディスク領域の一部が仮想化されてメモリになります。 |
合計 | 利用可能な物理メモリの合計。 |
使用済み | 使用されている物理メモリとスワップ領域。 |
無料 | システムによってまだ使用されていない物理メモリ。 |
共有 | 共有メモリ空間。 |
バフ/キャッシュ | この列には、buffer とcache によって使用される物理メモリのサイズが表示されます。メモリのこの部分は、アプリケーションが使用する必要があるときに、システムによってアクティブに解放できます。システムで頻繁に使用されるファイルとブロック デバイス ファイルは、通常、キャッシュされます。 |
利用可能 | アプリケーションに使用可能なメモリ。 |
MemTotal = used + free + buff/cache
vmstat
vmstat 2 3
最初のパラメータは実行される秒数を表し、2 番目のパラメータは実行と終了の回数を表します。2 番目のパラメータが指定されていない場合、コンテンツは引き続き出力されるため、Ctrl+C
終了する必要があります。
言葉 | 説明する |
---|---|
r | Procs (プロセス) は、タスクの実行を待っているプロセスの数、つまりcpu 実行を待っているプロセスの数を分析に使用できますcpu 。通常、この値はこの数を超えることはありませんcpu 。これを超えるとcpu ボトルネックが発生します。起こる。 |
b | 待機中のプロセスの数io |
swpd | 使用されている仮想メモリのサイズ、単位k |
無料 | 空きメモリのサイズ |
バフ | buff ブロックデバイスへの読み取りと書き込みをバッファリングするために使用されるサイズ |
キャッシュ | 使用cache サイズ、ファイルシステムcache |
そして | 1秒あたりにスワップ領域から書き込まれたメモリサイズ(単位:kb/s) |
それで | 1 秒あたりにメモリからスワップ領域に書き込まれるサイズ |
バイ | io プロファイリング、1 秒あたりのブロック読み取り (ディスクからの読み取り) |
ボー | io プロファイリング、1 秒あたりに書き込まれるブロック (ディスクへの書き込み) |
で | クロック割り込みを含む、1 秒あたりの割り込み数 (少ないほど良い) |
cs | 1 秒あたりのコンテキスト スイッチの数 (小さいほど良い)。値が大きすぎる場合は、プロセスまたはスレッドの数を減らすことを検討してください。 |
私たち | ユーザープロセスの実行にはcpu 時間がかかります(user time )。それを長時間超える場合は50% 、アルゴリズムの最適化を検討するなどの対策が必要です。 |
そして | システム プロセスはcpu 時間 ( system time ) を消費します。この値は高すぎます。カーネルがcpu 大量のリソースを消費する原因を確認し、最適化する必要があります。通常、us + sy 基準値は80% |
ID | 一般的にアイドル時間(io 待ち時間を含む)us+sy+id=100 |
の | 待機io 時間が長すぎるwa 場合はio 、待機が深刻であることを意味しており、ディスクへの大量のランダム アクセスが原因であるか、ディスクの帯域幅のボトルネックである可能性があります。 |
上
top
プロセスが表示されますPID
。制御不能になったプロセスを見つけた場合は、トラブルシューティングのために対応するプロセスを見つけることができます ( kill
)。
コマンドライン対話、表示データのリアルタイム更新、q
および終了。
これまで述べてきたことから、基本的には誰でもその意味を理解できると思いますが、これまで見たことがないものをいくつか紹介します。
言葉 | 説明する |
---|---|
仮想 | virtual memory usage 仮想メモリの使用量 |
レス | resident memory usage 実際のメモリ使用量 |
SHR | shared memory 共有メモリの使用量 |
ps
ps aux --sort=rss
正の順序で並べ替えますrss
。
とtop
ほぼ同じなので詳しい説明は省略します。
言葉 | 説明する |
---|---|
%MEM | プロセスが占有している物理メモリの割合 |
VSZ | 使用される仮想メモリのサイズ |
RSS | プロセスによって使用される物理メモリのサイズ。この値に注目してください |
pmap
pmap -x pid
プロセスのメモリ イメージ情報を表示し、メモリがどこでどのくらい使用されているかを確認するために使用されます。
言葉 | 説明する |
---|---|
住所 | メモリを占有しているファイルのメモリ開始アドレス |
キロバイト | メモリ内で占有されているバイト数 |
RSS | 実際に占有されているメモリサイズ |
汚い | ダーティページサイズ |
マッピング | メモリを占有しているファイルは、[anon] 割り当てられたメモリ[stack] とプログラム スタックです。 |
最後はtotal
統計の合計値です。通常、このプログラムのメモリ消費量を確認したい場合は、次のように最後の行を確認するだけです。
while true; do pmap -x pid | tail -1; sleep 1; done
要約する
上記のツールはすべてlinux
組み込まれており、もちろん、さらに高度なツールが多数あります。実際の業務では、自分が使うものを選んで簡単に使うだけで、基本的にはスムーズに使えば問題の箇所が特定できます。私が普段使っているもの:
- システムのメモリ使用量のみを表示します:
free -h
、非常に直感的です。 - プロセスのメモリ使用量を分析します:
top
/ps
はすべて良好です。 - 詳細な分析:
pmap
もちろん、サーバー上に運用保守管理パネルを設置することもできますが、現在はオープンソースのプロジェクトが多く、グラフィカルインターフェースで直接閲覧できる方が便利です。
すべてのツールは問題を解決するために使用されます。ツールを使用するためだけに使用しないでください。この記事では、後で確認できるように、一般的に使用されるツールを記録します。まず、ツールで何ができるかを大まかに把握できます。本当に必要なときに使用してください。使用方法について詳しく学びましょう。