Linux パフォーマンス分析のメモリ分析 (free、vmstat、top、ps、pmap などのツールの使用の紹介)

導入

私が学生だった頃、先生やクラスメートがlinux学ぶことの大切さについてよく話していました。しかし、このコマンド ライン インターフェイスを見たときに頭が痛くなったので、急いで覚えましたが、ああ、ゲームはまだ良いです。

しかし、ここ 2 日間サーバーをいじっていたときに、デプロイしたサービスが常にクラッシュすることがわかり、最終的にサーバーのメモリが不足していることがわかりました。

問題の原因を突き止めるのは大変なことです。「それは有害です。私がこれまでよく勉強して練習しなかっただけです。今でも頭痛がするはずのときに頭​​痛がします。それは時間の問題です。」(まあ、後発の人たちにもアドバイスしておきますが、関連分野に携わりたいのであれば、基礎知識のしっかりした基盤が必要であり、内面的なスキルや精神的な方法についてもっと学ぶのは常に正しいことです)。

今日の記事では、linuxシステム内のメモリを分析する方法を簡単に紹介します。

一般的なメモリ分析ツールの紹介

/proc/meminfo

cat /proc/meminfo

ここに画像の説明を挿入します

言葉 説明する
メモリ合計 BIOSシステムメモリ、カーネルなども一定量のメモリを占有するため、通常、システム メモリの合計はハードウェア メモリよりも小さくなります。
メムフリー システム空きメモリ、物理メモリの残り。
メモリ利用可能 アプリケーションで使用可能なメモリとの違いはMemFreeMemFreeシステム レベルのメモリ スティックの残りの領域です。これMemAvailableはアプリケーション レベルです。システム内の一部のメモリが使用されていますが、その一部は次のようにリサイクルできます。BuffersアプリケーションCachedがメモリを使用する必要がある場合、システムはメモリのこの部分を積極的に解放します。
バッファー バッファ メモリ。まだディスクに「書き込まれていない」コンテンツをキャッシュするために使用されます。
キャッシュされた ディスクから「読み取った」内容をキャッシュします。

bufferioデバイス書き込みのキャッシュとして使用されます。デバイスの読み取りキャッシュcacheとして使用されますioここでのデバイスとはio主にブロックデバイスファイルやファイルシステム上の通常のファイルを指します。

MemAvailable = MemFree + Buffers + Cached

これはあくまで理想的な計算方法であり、実際のデータはさらに大きな誤差を伴うことが多いことに注意してください。

無料

free -h

無料

言葉 説明する
メム 行(2行目)のメモリ使用量
スワップ 行 (3 行目) のスワップ領域の使用量。仮想メモリと考えるとwindows、メモリが不足した場合に、ハードディスク領域の一部が仮想化されてメモリになります。
合計 利用可能な物理メモリの合計。
使用済み 使用されている物理メモリとスワップ領域。
無料 システムによってまだ使用されていない物理メモリ。
共有 共有メモリ空間。
バフ/キャッシュ この列には、buffercacheによって使用される物理メモリのサイズが表示されます。メモリのこの部分は、アプリケーションが使用する必要があるときに、システムによってアクティブに解放できます。システムで頻繁に使用されるファイルとブロック デバイス ファイルは、通常、キャッシュされます。
利用可能 アプリケーションに使用可能なメモリ。
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

もちろん、サーバー上に運用保守管理パネルを設置することもできますが、現在はオープンソースのプロジェクトが多く、グラフィカルインターフェースで直接閲覧できる方が便利です。

すべてのツールは問題を解決するために使用されます。ツールを使用するためだけに使用しないでください。この記事では、後で確認できるように、一般的に使用されるツールを記録します。まず、ツールで何ができるかを大まかに把握できます。本当に必要なときに使用してください。使用方法について詳しく学びましょう。

参考

おすすめ

転載: blog.csdn.net/DisMisPres/article/details/132418391
おすすめ