[英]How can I know which process is using swap?
有很多可用的內存(大約4G)但在我的軟呢帽中使用了交換(200 + M)。
我想知道哪個進程使用swap。 我怎么知道呢
ps和top僅顯示內存使用情況。
提前致謝。
改進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
從這里 :
[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"
在/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/
我使用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
基於onadrianlzt的答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.