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

Wik*_*y L 10 linux memory swap

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

我想知道哪个进程使用swap.我怎么知道呢

pstop仅显示内存使用情况.

提前致谢.

adr*_*lzt 26

改进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
Run Code Online (Sandbox Code Playgroud)

示例输出:

COMM             PID    SWAP  
dockerd          662    2736  kB
skypeforlinux    26865  1320  kB
NetworkManager   303    1112  kB
slim             392    1028  kB
redis-server     350    204   kB
Run Code Online (Sandbox Code Playgroud)


Rah*_*thi 8

这里:

[a] / proc/meminfo - 此文件报告有关系统内存使用情况的统计信息.它可以免费用于报告系统上的空闲和已用内存(物理内存和交换内存)以及内核使用的共享内存和缓冲区.您还可以使用free,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"
Run Code Online (Sandbox Code Playgroud)