Linux Redhatシステムでメモリを高レベルから低レベルに消費するコマンドを確認するために、この方法を実行しました。
GIGAからその値を取得するために、このメソッドを1024/1024で作成しました。
ps -eo size,pid,user,command --sort -size |
awk '{ hr=$1/1024/1024 ; printf("%13.2f GIGA ",hr) }
{ for ( x=4 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" }' |
cut -d "" -f2 | cut -d "-" -f1 | more
58.13 GIGA java
38.39 GIGA /home/mc/lok_agent/mc.pl
36.00 GIGA /usr/lib/jvm/java
23.99 GIGA /usr/jdk64/jdk1.8.0_112/bin/java
19.42 GIGA /usr/jdk64/jdk1.8.0_112/bin/java
19.39 GIGA /usr/jdk64/jdk1.8.0_112/bin/java
19.37 GIGA /usr/jdk64/jdk1.8.0_112/bin/java
17.42 GIGA java
15.43 GIGA /usr/jdk64/jdk1.8.0_112/bin/java
15.42 GIGA /usr/jdk64/jdk1.8.0_112/bin/java
15.23 GIGA /usr/jdk64/jdk1.8.0_112/bin/java
10.18 GIGA /usr/jdk64/jdk1.8.0_112/bin/java
7.22 GIGA /usr/jdk64/jdk1.8.0_112/bin/java
7.02 GIGA /usr/jdk64/jdk1.8.0_112/bin/java
5.71 GIGA /usr/jdk64/jdk1.8.0_112/bin/java
5.57 GIGA /usr/bin/gnome
.
.
.
これまで、上記の命令の合計は200Gを超えていました。
しかし、free -gを実行すると168に慣れます。
free -g
total used free shared buff/cache available
Mem: 251 168 2 0 81 82
Swap: 15 11 4
だから私のアプローチに問題があります。
ps -eo size,pid,user,command --sort -size | awk '{ hr=$1/1024/1024 ; printf("%13.2f GIGA ",hr) } { for ( x=4 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" }' | cut -d "" -f2 | cut -d "-" -f1 |more
私の構文には何の問題がありますか?
答え1
プロセスで使用されているメモリを測定する方法はいくつかあります。問題は、プロセスがメモリを共有し(同じ共有ライブラリを使用する2つのプロセスが同時にメモリにあることを想像してみてください)、常駐(RAMチップ)、スワップ(ディスク)、または仮想(両方または両方)が可能であることです。です。 。
サイズの代わりにRSSを使用すると、スワッピング/ダミーの問題は削除されますが、共有の問題は削除されません。
(おそらく)次のバージョンのprocpsにはpsとtopが含まれているため、PSSフィールドとUSSフィールドは比例/固有セグメントサイズに使用できます。それらは共有部分を割り当てるか(共有ライブラリを使用する3つのプロセスがライブラリサイズの3分の1を取得する)、共有部分を無視します。