パフォーマンス分析| Linuxのメモリフットプリント分析

このブログは、Linux環境を導入し、2つの方法のメモリ使用量を表示します。ps、トップのコマンドを使用して、下の/ proc / [PID] /ファイルを参照してください。この記事では、簡単にしばらくの/ proc / [PID] /コンテンツファイルが作られたいくつかの詳細、コマンドといくつかのパラメータの意味の使用を記載しています。不適切な場合、Googleからの記事の内容と自己概要は、批判を歓迎します。

ビューLinuxのメソッドメモリ

Linuxのようなコマンドps、トップ、フリー、PMAP、等のチャネル、種々のを表示するために、次のメモリ、又は/ PROCシステムを介して。要件を満たすために自由に通常の状況は、ps、トップ、PMAP、下では、あなたは/ procのシステムを通じて、全体のプロセスのメモリ使用量のより詳細で正確な知識やメモリを必要とする場合。

コマンドを使用します。

フリー:利用可能なディスプレイシステムメモリ、および使用されているメモリ情報

PS:ビューのプロセス情報、静的な、それは、現在の状態であります

トップ:ビューのプロセス情報、ダイナミック

pstreeコマンド:プロセスツリーを見ます

PMAP:プロセスに従い、IDビューのプロセス情報

トップ対PS

  1. psコマンド - 過去の情報を提供するためのシステムの一回限りのスナップショットは、そのシステム情報のプロセスを表示するだけでpsコマンドです。
  2. topコマンドの応答は、デフォルトではすべての10秒を更新し、情報を処理し、動的システムです。
  3. PSおよび上部は、現在のシステムプロセスに関する有用な情報のカーネル様々なこの擬似ディレクトリに配置され、プロセス/ procディレクトリステータス情報から読み出されます。

一般的なpsコマンド:

PSの-aux:すべてのプロセスを見ます

PSの-l:あなたのbash関連のプロセスにチェック

詳細topコマンド、http://www.jb51.net/article/40807.htmを参照してください。

基本的なコマンド:

  • キーボード番号「1」は、各論理CPUの状態を監視するには:
  • キーボードの「B」(オープン/ハイライトを閉じます)
  • キーボードの「X」(オープン/ハイライトのソート列を閉じます)
  • 「> + Shiftキー」やソート列を変更するには、右または左かもしれ「<+シフト」
  • タップディスプレイ欄「F」キー、基本的なレイアウトビュー
  • S、画面の更新頻度を変更します
  • L、近い又は第1の上部の行の第1の部分は情報を表し開き
  • Tは、近隣又は2行3列目のタスク情報の最初の部分を開くには、CPUを示し
  • M、近い又はMemの情報交換を示す4行目と5行目の最初の部分を開き

特定の用途、人[CMD]ビューを使用することができます。

関連パラメータ

VSZ&VIRT

  1. すべてのコード、データ、共有ライブラリを含む、プロセスが使用する仮想メモリの合計値がからスワップアウトされています。VIRT = SWAP + RES。
  2. psコマンドからVSZ、topコマンドからVIRTは、両方のプロセスの仮想メモリのサイズによって占められる表現しました。
  3. アプリケーションプロセスのメモリ100メートル、10メートルだけの実際の使用は、100メートルは、それはむしろ、実際の利用よりも、成長する場合

RES&RSS

  1. プロセスは、現在のメモリサイズを使用するが、スワップを含んでいない。RES = CODE +データ。
  2. 他のプロセスが共有含めます
  3. topコマンドからRES、psコマンドからRSS、意味表現における差はないの両方の、猫の/ proc /から読み取った情報である/ [PID] / STATファイル。
  4. もしアプリケーションメモリ100メートル、10メートル実用化、唯一の10メートルの増加、逆VIRT
  5. ライブラリの場合についてのみ、統計的にロードされたライブラリファイル共有メモリサイズ、メモリを占有

コード

実行可能コードによって占有物理メモリサイズ

データ

  1. データを格納する物理メモリのサイズは、プログラムが使用する必要がで実行されます
  2. topコマンドが表示されない場合は、Fを表示するためのボタンを押してください

SHR

  1. 共有メモリサイズ
  2. 共有メモリの独自のプロセスに加えて、共有メモリは、他のプロセスが含まれています
  3. - SHR RES:によって占められた物理メモリサイズを計算するためのプロセス
  4. スワップアウトした後、値が低下します。

プロセスメモリ情報のステップを見ます

1.プロセスPIDを取得

$ psの-aux | grepのは/ usr / sbinに/ NetworkManagerの
ルート845 0.0 0.0 387084 13332?SSL 3月28午後12時00分は/ usr / sbinに/ NetworkManagerの--no-デーモン

2.すべてのスレッドのプロセスを見直し

$ psの融点845 -o THREAD、TIDの
ユーザ%CPU PRI SCNT WCHANユーザシステムTIDの
ルート0.0 - - - - - -
ルート0.0 19 - - - - 845
ルート0.0 19 - - - - 1025
- - - 1027 -ルート0.0 19

3.すべての子プロセスをチェック

$ pstreeコマンド-p 845 
NetworkManagerの(845)─┬─dhclient(30278)
├─dnsmasq(1123)
├─{gdbus}(1027)
└─{グマイン}(1025)

下の/ procファイルの使用

/ procの/ [PID] /メモリのプロセスに関連する以下の文書は、主にマップ、smaps、状態です。

マップ:ファイルは、仮想アドレスに対応する処理のコードセグメント、スタック領域、スタック領域、動的ライブラリ、カーネル領域を表示することができ

smaps:各パーティションの表示より詳細なメモリ使用状況データ

状態:アクティブなCPUはすべての情報が含まれ、ファイル内のすべての値は、現在のシステム起動時に最初から累積されます

有名と匿名:

ファイルがメモリのプロセスの領域にマッピングすることができ、vm_area_struct-> vm_fileドメイン内に格納されたマッピングファイルディスクリプタは、メモリのこの領域は逆に、匿名のマッピングされたメモリ領域があり、メモリの知られているエリアと呼ばれます。

マップファイル解析

PROC / [PID] /マップは、メモリとアクセス権の面積をマッピングするプロセスを示しています。カーネルに対応する一連の操作はproc_pid_maps_op、特定のエクスポート関数show_mapです。いくつかのカーネルアドレス空間は、アドレス空間のすべては、task-> MM-> mmapのリストに格納され、プロセスするvm_area_struct構造によって表されます。

次のように撮影したライン:

7f4e3f5ca000-7f4e3f674000 R-XP 00000000 8時02分525202 /usr/lib/x86_64-linux-gnu/NetworkManager/libnm-device-plugin-wifi.so

次の表を解決するために対応するvm_area_struct各:

Linuxのメモリフットプリント分析

マップファイルは、唯一のSMAPファイルは、パーティションごとに、より詳細なメモリ使用状況データを表示することができ、簡単なパーティションを表示することができます。

SMAPファイル解析

ファイルの傍受、次のように解釈各フィールド:

RW-P 8時02 00026000 7f148b2fa000-7f148b2fb000 2883675 /lib/x86_64-linux-gnu/ld-2.23.so 
サイズ:仮想メモリのサイズ4キロバイト
のRss:4キロバイト実際の物理メモリサイズRSS = Shared_Clean + Shared_Dirty + Private_Clean + Private_Dirty
PSS:プライベートメモリページの4キロバイトRSS
Shared_Clean:0 kBのRSS共有メモリではなく、書き換えられたページ
Shared_Dirty:0 kBのRSS共有メモリ、書き換えられたページ
Private_Clean:プライベートメモリ内の0 kBのRSSなく、書き換え
Private_Dirtyを:プライベートメモリの4キロバイトRSSを書き換えている
4キロバイト:参照
匿名:4キロバイト
AnonHugePages:0 kBの
Shared_Hugetlb:0 kBの
Private_Hugetlb:0 kBの
スワップ:為替ゾーンで0 KBのページ・サイズ
0キロバイト:SwapPss
KernelPageSize:4キロバイトOSページサイズ
MMUPageSize:4 KBのページ・サイズMMUアーキテクチャは、
ロック:0 kBの
VmFlags:私の氏DWのMwのRD WR交流SD

何のケース交換メカニズムが存在しない場合はダーティ次のページは、それがリサイクルされるべきではありません。

スクリプトの分析:

私は次のように、スクリプトの簡単な分析を書いて、必要に応じて変更することができます。

#!/ binが/バッシュ
AWK「はBEGIN {
= 0合計。
printf( "SIZE \項書換え系\ tSHARED_CLEAN \ tSHARED_DIRTY \ tPRIVATE_CLEAN \ tPRIVATE_DIRTY \ n")
} {
IF(NF> 3){
場合($ 2〜/ [R - ] [W - ] [X - ] [PS] /){
($ 6 == "")であれば
名前= $ 1;
それ以外の
名前は$ 6 =。
}
}
一方(のgetline)
{
IF(NF> 3){
場合($ 2〜/ [R - ] [W - ] [X - ] [PS] /){
IF($ 6 == "")
名= $ 1;
それ以外の
名前は$ 6 =。
}
}
もし($ 1〜/ ^サイズ/){
サイズ= $ 2;
合計+ = $ 2;
}

もし($ 1〜/ RSSリーダーに登録/){
RSS = $ 2;
}

もし($ 1〜/ Shared_Clean /){
shared_clean = $ 2;
}
($ 1〜/ Shared_Dirty /){もし
shared_dirty = $ 2;
}

もし($ 1〜/ Private_Clean /){
private_clean = $ 2;
}

もし($ 1〜/ Private_Dirty /){
private_dirty = $ 2;
}
もし($ 1〜/ VmFlags /){
のprintf( "%D \ T%D \ T%D \ T%D \ T%D \ T%D \ T%S \ n"は、サイズ、RSS、shared_clean、shared_dirty 、private_clean、private_dirty、名);
サイズ= 0。
名前= "";
RSS = 0;
shared_clean = 0;
shared_dirty = 0;
private_clean = 0;
private_dirty = 0;
持続する;
}
}
} END {
のprintf( "====合計:%Dを\ n"、合計)。
}」$ 1

匿名のマッピングについて

mmapメカニズムを使用して生成されますが、任意のファイルに関連付けられていない匿名smapsエリア、多数のがあるかもしれません。一般的に、彼らは主に、ヒープ上の取り扱いや共有メモリバッファが適用されないなど、いくつかの卑しいタスクに対処するために使用されています。例は、Linuxでは、新しいスレッドのスタックとして匿名のマッピング領域を使用してpthreadのための空間は、メモリのオーバーフローを検出するための小さなオンチップメモリ​​(例えば、4Kbの)を有するように、新しいスレッドは、8Mアプリケーションスタック領域をpthreadの。それぞれのpthreadに作成されるように、それが0にマッピングされたノードの8MBのメモリ、およびノー​​ド4KBのゾーン0にマップが割り当てられます。

ステータスファイル解析

次のフィールドを解析し、ファイルをインターセプト:

開発> CAT / procの/ 24475 /ステータス
名:実行可能プログラムnetioの名前
/スリープ/死んで実行するR(ランニング)タスクのステータス、:州
24475スレッドグループ番号:TGID
はPid:24475のプロセス上記のID
PPID:上記のid言及19635親
TracerPid: 0
Uidの:0 0 0 0
GID:0 0 0 0
FDSize:プロセスのファイルディスクリプタの256最大数
0:グループ
VmPeak:6330708キロバイトのメモリ使用量のピーク
VmSize:268876 kBのプロセスの仮想アドレス空間
VmLck:0 kBのプロセスロック物理メモリサイズ、ハードディスクに物理メモリをロックできない
VmHWM:16656キロバイト
VmRSS:使用中の物理メモリの11420 kbのプロセス
VmData:230844 kBのプロセス・データ・セグメント・サイズ
VmStk:136 kBのユーザ・モード・プロセス・スタック・サイズ
VmExe:760キロバイト処理コードセグメントサイズ
vmLib:7772 kbのプロセスは、仮想メモリ空間のサイズにマッピングライブラリ使用
120 kBのプロセス・ページ・テーブル・サイズ:VmPTE
VmSwap:0 kBの
スレッド:信号の数5つの共有タスクディスクリプタ、複数行のPOSIXをアプリケーションプログラム、信号記述子を使用して、同じスレッドグループ内のすべてのスレッド。
SigQ:信号の0/63346数が処理される
SigPnd:0000000000000000マスクビット、処理される信号は、スレッド記憶され
0000000000000000マスクビット、そのスレッドグループ格納され処理される信号:ShdPnd
SigBlk:0000000000000000蓄積された信号が遮断され
SigIgnました: 0000000001000000記憶された信号は無視され
SigCgt:捕捉信号の0000000180000000記憶
CapInhは:0000000000000000能力は、現在のプロセスで実行可能なプログラム継承
CapPrm:能力ffffffffffffffffプロセスを使用することができるが、CapEffないで能力を含んでいてもよい、これらの機能はプロセス、一時はあきらめ、自分のを、CapEffはCapPrm、セキュリティ向上させるために必要のない能力あきらめのプロセスの一部である
プロセスffffffffffffffff有効容量:CapEffを
CapBndを:ffffffffffffffff
cpus_allowed:01
Cpus_allowed_list:0
Mems_allowed:01
Mems_allowed_list:0
voluntary_ctxt_switches:201
nonvoluntary_ctxt_switches:909

meminfoのファイル解析

ファイルのマシンのメモリ使用量は/ proc / meminfoに、除去は、以下の

CATの/ proc / meminfoに>開発
8112280 kBのすべての利用可能なRAMのサイズ(即ち、物理メモリマイナスバイナリコードとカーネルサイズのいくつかの予約ビット):MemTotal
MEMFREE:4188636 kBのLowFreeとHighFree和、システムは未使用記憶保持され
バッファ:ファイルバッファサイズ作るために使用される34728キロバイト
キャッシュを:289740 kBのキャッシュメモリ(キャッシュメモリ)のメモリサイズである
(マイナスswapCacheのDISKCACHEに等しい)が
SwapCached:0 kBのキャッシュメモリ(キャッシュメモリ)スワップでありますサイズは、
メモリからスワップアウトされているが、まだスワップファイルに保存されています。
すぐに再びI / Oポートを開く必要なしに交換することが必要なときに使用し
アクティブ:キャッシュページファイルの積極的な利用や、サイズが435240 kBのバッファ、
それは非常に必要でない限り、そうでない場合は、他の目的に使用されません
無効:で231512 kBの使用頻度の低いまたはバッファ・キャッシュ・メモリ・ページ・ファイルのサイズは、他の方法で使用することができる。
アクティブ(アノン):361 252 kBの
非アクティブ(アノン):120 688 kBの
活性(ファイル):73 988 kBの
非アクティブ(ファイル):110 824 kBの
Unevictable:0 kBの
Mlocked:0 kBの
SwapTotal:スワップ領域の0 kBの合計サイズ
SwapFree:0 kBのスワップ領域のサイズを使用していない
汚れ:ディスクメモリサイズに書き戻されるのを待っている0キロバイト
0 kBのディスクのメモリサイズに書き戻されている:ライトバック
マップされていないメモリのページサイズは348408キロバイト:AnonPages
マップされた:33600 kBのは、の大きさなどのデバイスとファイルマッピングされている
133 536キロバイト:SHMEM
55984 kBのカーネルデータ構造のキャッシュサイズは、メモリ消費アプリケーションを持参し、解放するために削減することができます:スラブ
25028 kBの回復可能なスラブサイズ:SReclaimable
SUnreclaim:30956 kBの回収不能をスラブサイズ(SUnreclaim + SReclaimable =スラブ)
KernelStack:1896 kBのカーネルスタック領域のサイズの
ページテーブル:8156キロバイトのメモリ管理ページインデックステーブルサイズページング
ページ・テーブル・サイズ0 kBの不安定:NFS_Unstable
バウンス:0 kBの
WritebackTmp:0 kBの
CommitLimitを:2483276 kBの
Committed_AS:1804104 kBの
VmallocTotal:34359738367 kBの仮想メモリサイズvmallocができる
565680 kBの仮想メモリのサイズ使用されている:VmallocUsed
34359162876キロバイト:VmallocChunk
HardwareCorrupted:0キロバイト
HugePages_Total:1536ページの多数
HugePages_Free:ラージ・ページの自由の0数
HugePages_Rsvd:0
HugePages_Surp:0
Hugepagesize:2048 kBの大きなページサイズ
DirectMap4k:10240キロバイト
DirectMap2M:8302592キロバイト

概要

アプリケーションプロセスのメモリが使用されるので、Linuxでのメモリフットプリントは、プログラム「メモリ消費」サイズを判断しないように、単純に単一の指標によって、より複雑な概念です(malloc関数やMMAPの実現)は必ずしも真実ではないと本当のこれは、(例えば、動的共有ライブラリなどの)プロセスは自分自身だけでは必ずしもないメモリを使用します。私たちは、メモリ使用量を分析するための特定のニーズに応じて適切な方法を選択する必要があります。

おすすめ

転載: www.cnblogs.com/wyf0518/p/11456818.html