分享一个可以查看进程虚拟内存占用的 shell 脚本
来源:https://gceasy.io/gc-recommendations/long-pause-solution.jsp
这里命名为 show_process_swap.sh
#!/bin/bash
# Get current swap usage for all running processes
# Erik Ljungstrom 27/05/2011
# Modified by Mikko Rantalainen 2012-08-09
# Pipe the output to "sort -nk3" to get sorted output
# Modified by Marc Methot 2014-09-18
# removed the need for sudo SUM=0
OVERALL=0
for DIR in `find /proc/ -maxdepth 1 -type d -regex "^/proc/[0-9]+"`
doPID=`echo $DIR | cut -d / -f 3`PROGNAME=`ps -p $PID -o comm --no-headers`PROGPATH=`pwdx $PID | awk '{print $2}'`for SWAP in `grep VmSwap $DIR/status 2>/dev/null | awk '{ print $2 }'`; dolet SUM=$SUM+$SWAPdoneif (( $SUM > 0 )); thenecho "PID=$PID swapped $SUM KB ($PROGNAME $PROGPATH)"filet OVERALL=$OVERALL+$SUMSUM=0
done
echo "Overall swap used: $OVERALL KB"
脚本执行示例如下
最后,对比上文链接中的脚本本文示例的脚本做了些改进,原文没有输出程序路径,例如 Java 进程部署在同一台机器有多个路径,这样调整后打印出来的信息会更加清晰
# 把程序路径也查出来
PROGPATH=`pwdx $PID | awk '{print $2}'`