我怎么知道哪个进程使用swap?

时间:2015-05-27 11:36:06

标签: linux memory swap

有很多可用的内存(大约4G)但在我的软呢帽中使用了交换(200 + M)。

我想知道哪个进程正在使用swap。我怎么知道呢。

ps 顶部仅显示内存使用情况。

提前致谢。

4 个答案:

答案 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答案。