有很多可用的内存(大约4G)但在我的软呢帽中使用了交换(200 + M)。
我想知道哪个进程正在使用swap。我怎么知道呢。
ps 和顶部仅显示内存使用情况。
提前致谢。
答案 0 :(得分:24)
改进cyberciti.biz命令以显示更简洁的答案:
TAODTable
示例输出:
(echo "COMM PID SWAP"; for file in /proc/*/status ; do awk '/^Pid|VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file; done | grep kB | grep -wv "0 kB" | sort -k 3 -n -r) | column -t
答案 1 :(得分:8)
来自here:
[a] / proc / meminfo - 此文件报告有关内存使用情况的统计信息 系统。免费使用它来报告免费和使用的数量 系统上的内存(物理和交换)以及共享 内核使用的内存和缓冲区。你也可以使用免费的vmstat 和其他工具,以找出相同的信息。
并[b] / proc / $ {PID} / smaps,/ proc / $ {PID} / status和/ proc / $ {PID} / stat :使用 这些文件可以查找有关内存,页面和交换的信息 每个进程使用其PID。
[c] smem - 此命令(python脚本)报告内存使用情况 共享内存按比例分配。
您也可以参考 Find out what is using your swap
#!/bin/bash
# Get current swap usage for all running processes
# Erik Ljungstrom 27/05/2011
SUM=0
OVERALL=0
for DIR in `find /proc/ -maxdepth 1 -type d | egrep "^/proc/[0-9]"` ; do
PID=`echo $DIR | cut -d / -f 3`
PROGNAME=`ps -p $PID -o comm --no-headers`
for SWAP in `grep Swap $DIR/smaps 2>/dev/null| awk '{ print $2 }'`
do
let SUM=$SUM+$SWAP
done
echo "PID=$PID - Swap used: $SUM - ($PROGNAME )"
let OVERALL=$OVERALL+$SUM
SUM=0
done
echo "Overall swap used: $OVERALL"
答案 2 :(得分:2)
在/proc/'processPID'/status
上,您可以在字段VmSwap
上找到该信息。
使用此命令,您可以列出正在使用swap的所有进程。
for file in /proc/*/status ;
do
awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file;
done
参考:http://www.cyberciti.biz/faq/linux-which-process-is-using-swap/
答案 3 :(得分:1)
我对使用awk输出按交换使用排序的漂亮表的看法:
awk 'function pr(){if (s ~ /^[1-9]/) print p,n,s;n="";p="";s=""}BEGIN{FS="\t *";OFS="\t"}/^Name:/{pr();n=$2}/^VmSwap:/{s=$2}/^Pid:/{p=$2}END{pr()}' /proc/*/status | sort -t $'\t' -k3 -n -r | column -t -s $'\t'
样本输出:
33992 httpd 13916 kB
9331 httpd 10616 kB
43124 httpd 1800 kB
31353 httpd 592 kB
8592 master 184 kB
8606 crond 44 kB
8653 mingetty 40 kB
8655 mingetty 32 kB
基于adrianlzt答案。