Linux
從每個PID擷取命令併計算GIGA中命令的記憶體消耗(使用排序方式)
我正在執行這種方法以驗證在 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),要麼忽略共享部分。