在 Solaris 上,如何找出某个进程占用了多少交换空间?或者更好的是,如何按交换空间使用情况排序列出所有正在运行的进程?
我特别针对 Solaris 询问这个问题。我没有top
可用的命令,似乎prstat
也swap
无法提供有关给定进程正在使用多少交换空间的信息。
答案1
您可以使用以下命令:
pmap -S <pid>
查看所有内存统计信息,包括交换使用情况。
借助一些 shell 魔法,你可以将其包装在 bash 循环中:
cd /proc
for i in *; do
SWAP=`pmap -S $i | grep ^total | awk '{ print $3; }'`
[ "xx$SWAP" != "xx" ] && echo "$SWAP bytes $i"
done | sort -n
输出以字节为单位,格式如下:
<number> bytes <pid>
答案2
我不确定 $3 是否与您想要的列匹配,因为它是“Kbytes”而不是“Swap”列。
在标题中它是第三个但不在grep total
(因为“总 Kb”中为空白):
Address Kbytes Swap Mode Mapped File
total Kb 240576 235028`
答案3
对于 i 在 * 中;执行 pmap -S $i 2> /dev/null | nawk -v PID=$i '$1 == "total" && $4 > 0 {print PID,"=>",$4,$2}';完成 |sort -rn -k 3,3