web-dev-qa-db-ja.com

どのプロセスがスワップを使用しているかをどのようにして知ることができますか?

利用可能なメモリはたくさんありますが(約4G)、Fedoraボックスではスワップが使用されています(200 + M)。

どのプロセスがスワップを使用しているのでしょうか。どうすればそれを知ることができますか。

psおよびtopはメモリ使用量のみを表示します。

前もって感謝します。

10
Wiky L

ここ から:

[a]/ proc/meminfo-このファイルは、システムのメモリ使用量に関する統計を報告します。 freeは、システム上の空きメモリと使用済みメモリ(物理メモリとスワップの両方)の量、およびカーネルが使用する共有メモリとバッファを報告するために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"
8
Rahul Tripathi

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
26
adrianlzt

/proc/'processPID'/statusフィールド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/

2
user2336876

私が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の回答に基づいています。

1
h0tw1r3