2014-01-24 41 views
1

這個答案提供了顯示每個進程多少互換使用好劇本的交換空間的詳細用法:How to find out which processes are swapping in linux?如何取回在Linux上

但是:

[email protected]:~$ free 
      total  used  free  shared buffers  cached 
Mem:  3114288 2930040  184248   0   76 1809800 
-/+ buffers/cache: 1120164 1994124 
Swap:  6287356  977712 5309644 

注:交換區的977MB是使用時,當我跑我在這個問題上的頂部連接的腳本,我看到

PID=1 swapped 76 KB (init) 
PID=369 swapped 404 KB (udevd) 
PID=463 swapped 356 KB (udevd) 
PID=464 swapped 348 KB (udevd) 
PID=1804 swapped 1556 KB (dhclient) 
PID=1859 swapped 168 KB (rpcbind) 
PID=1890 swapped 408 KB (rpc.statd) 
PID=1904 swapped 184 KB (rpc.idmapd) 
PID=2240 swapped 348 KB (rsyslogd) 
PID=2304 swapped 108 KB (acpid) 
PID=2452 swapped 112 KB (atd) 
PID=2529 swapped 136 KB (dbus-daemon) 
PID=2544 swapped 312 KB (ntpd) 
PID=2779 swapped 364 KB (memcached) 
PID=2786 swapped 332 KB (sshd) 
PID=2859 swapped 128 KB (cron) 
PID=2878 swapped 300 KB (exim4) 
PID=2904 swapped 132 KB (getty) 
PID=2905 swapped 128 KB (getty) 
PID=2906 swapped 124 KB (getty) 
PID=2907 swapped 128 KB (getty) 
PID=2908 swapped 128 KB (getty) 
PID=2909 swapped 128 KB (getty) 
PID=2918 swapped 744 KB (console-kit-dae) 
PID=2985 swapped 156 KB (polkitd) 
PID=3243 swapped 3228 KB (node) 
PID=3246 swapped 1688 KB (node) 
PID=3247 swapped 2580 KB (node) 
PID=3249 swapped 2160 KB (node) 
PID=3250 swapped 2336 KB (node) 
PID=3251 swapped 1900 KB (node) 
PID=3686 swapped 16 KB (oracle) 
PID=16915 swapped 16 KB (oracle) 
PID=29843 swapped 204 KB (java) 
PID=29868 swapped 2512 KB (emagent) 
PID=29925 swapped 1060 KB (oracle) 
Overall swap used: 25008 KB 

如何分析交換區,這樣我可以看看這些(977 - 25)MB是用於?有沒有什麼方法可以閱讀如何使用交換和交換的哪些部分用於什麼?

+2

0123爲什麼你問,你爲什麼在乎?重要的是交換使用了多少以及哪些進程......我不明白爲什麼你想知道交換空間的哪個部分被哪個進程使用?(並且可能甚至沒有明確的答案,例如由於[tmpfs](http://en.wikipedia.org/wiki/Tmpfs)...) –

+0

@BasileStarynkevitch我不是問什麼交換的哪個部分被哪個進程使用,而是交換的哪個部分用於什麼(如果有任何進程的話)。正如你在我的例子列表中看到的那樣,使用了超過900MB的交換空間根據腳本的輸出通過NO PROCESS AT ALL。這就是爲什麼我很好奇內核需要這個交換的原因。 – Petr

+0

我的意思是,在列表中你可以看到所有進程在一起只有25MB的交換空間。但免費顯示正在使用977MB交換。那麼,什麼是使用這些952MB? – Petr

回答

0

嘗試以下

cat /proc/PID/status | grep VmSwap 

該腳本將顯示所有進程的交換使用。 (你可以使用grep找到任何確切的匹配項

#!/bin/bash 

for file in /proc/*/status ; 
do 
awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file; 
done