各PIDのコマンドをキャプチャし、GIGAはコマンドのメモリ消費を計算します(ソート)。

各PIDのコマンドをキャプチャし、GIGAはコマンドのメモリ消費を計算します(ソート)。

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を取得する)、共有部分を無視します。

関連情報