有很多内存可用(约4G),但在我的fedora盒使用交换(200 + M)。
我不知道哪个过程使用交换。 我怎么知道
ps和top只显示内存使用情况。
提前致谢。
从这里 :
[a] / proc / meminfo – 此文件报告有关系统上的内存使用情况的统计信息。 它被免费地用来报告系统中的空闲和使用内存(包括物理和交换)以及内核使用的共享内存和缓冲区。 您也可以使用免费的,vmstat和其他工具来查找相同的信息。
[b] / proc / $ {PID} / smaps,/ proc / $ {PID} / status和/ proc / $ {PID} / stat :使用这些文件来查找每个进程使用的内存,页面和交换使用其PID。
[c] smem – 这个命令(python脚本)报告内存使用情况,共享内存按比例分配。
你也可以参考找出什么是使用你的交换
#!/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"
改进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
在/proc/'processPID'/status
你可以找到VmSwap
字段的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/
运行上面的脚本时,我看到了“使用的总体交换”与“自由”输出使用的交换之间的区别
PID=1 swapped 1028 KB (systemd) PID=591 swapped 220 KB (systemd-journal) PID=614 swapped 1588 KB (lvmetad) PID=634 swapped 2524 KB (systemd-udevd) PID=785 swapped 356 KB (auditd) PID=787 swapped 176 KB (audispd) PID=789 swapped 152 KB (sedispatch) PID=806 swapped 116 KB (lsmd) ... Overall swap used: 419248 KB
[root @ jumpbox〜]#free -k
total used free shared buff/cache available Mem: 5946192 422468 4635164 8440 888560 5219248 Swap: 3907580 432676 3474904