【发布时间】:2015-05-27 11:36:06
【问题描述】:
有很多可用内存(大约 4G),但在我的 Fedora 盒子中使用了交换(200+M)。
我想知道哪个进程正在使用交换。我怎么知道。
ps 和 top 只显示内存使用情况。
提前致谢。
【问题讨论】:
-
见
VmSwap/proc/<pid>/status。 -
为什么你想知道这个?
有很多可用内存(大约 4G),但在我的 Fedora 盒子中使用了交换(200+M)。
我想知道哪个进程正在使用交换。我怎么知道。
ps 和 top 只显示内存使用情况。
提前致谢。
【问题讨论】:
VmSwap/proc/<pid>/status。
改进cyberciti.biz 命令以显示更简洁的答案:
(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
示例输出:
COMM PID SWAP
dockerd 662 2736 kB
skypeforlinux 26865 1320 kB
NetworkManager 303 1112 kB
slim 392 1028 kB
redis-server 350 204 kB
【讨论】:
来自here:
[a] /proc/meminfo - 此文件报告有关内存使用情况的统计信息 系统。由 free 使用来报告免费和使用的数量 系统上的内存(物理和交换)以及共享 内核使用的内存和缓冲区。也可以免费使用,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"
【讨论】:
在/proc/'processPID'/status 上,您可以在VmSwap 字段中找到该信息。
使用此命令,您可以列出所有正在使用交换的进程。
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/
【讨论】:
我对使用 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 答案。
【讨论】: