Linux

從每個PID擷取命令併計算GIGA中命令的記憶體消耗(使用排序方式)

  • August 4, 2021

我正在執行這種方法以驗證在 linux redhat 機器上從高到低消耗記憶體的命令

我將這種方法寫為 1024/1024 ,以獲取 GIGA 中的值

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

任何建議我的語法有什麼問題?

有不同的方法來測量程序中使用的記憶體。問題是程序共享記憶體(想想使用同一個共享庫的兩個程序,它一次在記憶體中),你可以有駐留的(在 RAM 晶片上)、交換的(在磁碟上)或虛擬的(一個/兩個)。

使用 rss 而不是 size 將消除交換/虛擬問題,但不會消除共享問題。

procps 的(可能)下一個版本將具有 ps 和 top 提供 PSS 和 USS 欄位,用於比例/唯一段大小。這些要麼分配(例如,使用共享庫的 3 個程序獲得該庫大小的 1/3),要麼忽略共享部分。

引用自:https://unix.stackexchange.com/questions/662889