Answers:
多个程序可能会使用相同的交换区,因此将被报告两次。
无需尝试告诉Linux使用缓冲区而不是交换-它在做什么方面已经很聪明了。如果您使用的是9gb的交换和9gb的缓冲区,那是一件好事……这意味着Linux意识到加载到内存中的9gb的东西并没有得到积极使用,因此将其交换到磁盘以使您的磁盘更有效缓冲区可以变大,并提高性能。
编辑:如果您累加了每个进程使用的所有内存,您将获得比物理RAM更大的内存。这是由于多个程序使用了共享库,以及Linux处理fork的方式-它不复制整个程序在内存中,它仅复制两个实例之间不同的部分。在某些情况下,视频内存可以显示为X进程的一部分-我认为旧的Voodoo3卡可以做到这一点。在其他情况下,“虚拟”内存也可能出现在顶部。
解析/ proc子目录的工作原理是:
作为bash脚本:
for PROCESS in /proc/*/; do
swapused=$(awk 'BEGIN { total = 0 } /^Swap:[[:blank:]]*[1-9]/ { total = total + $2 } END { print total }' ${PROCESS}/smaps 2>/dev/null || echo 0)
if [ $swapused -gt 0 ]; then
/bin/echo -e "${swapused}k\t$(cat ${PROCESS}/cmdline)"
fi
done
可以通过管道排序对输出进行高/低排序:
{blah}| sort -rn
当然,您可以根据自己的喜好用一周中的一种语言来重写它。我的Awk-fu不强壮。
(剪切可粘贴)
#!/bin/bash
#
# show swap used by processes
#
(for PROCESS in /proc/*/; do
swapused=$(awk 'BEGIN { total = 0 } /^Swap:[[:blank:]]*[1-9]/ { total = total + $2 } END { print total }' ${PROCESS}/smaps 2>/dev/null || echo 0)
if [ $swapused -gt 0 ]; then
/bin/echo -e "${swapused}k\t$(cat ${PROCESS}/cmdline)"
fi
done ) | sort -nr
for file in /proc/*/status ; do awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file; done | sort -k 2 -n -r | less
来自:http : //www.cyberciti.biz/faq/linux-which-process-is-using-swap/
替代方式:
smem -s swap -r