Wiky L
Wiky L

Reputation: 161

How can I know which process is using swap?

There is lots of memory avaiable(about 4G) but swap is used(200+M) in my fedora box.

I wonder which process is using swap. How can I know it.

ps and top only show the memory usage.

Thanks in advance.

Upvotes: 15

Views: 29794

Answers (4)

h0tw1r3
h0tw1r3

Reputation: 6818

My take on using awk to output a nice table sorted by swap usage:

  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'

Sample Output:

  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

Based on @adrianlzt answer.

Upvotes: 2

adrianlzt
adrianlzt

Reputation: 2031

Improving the cyberciti.biz command to show a more concise answer:

(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

An example output:

COMM             PID    SWAP  
dockerd          662    2736  kB
skypeforlinux    26865  1320  kB
NetworkManager   303    1112  kB
slim             392    1028  kB
redis-server     350    204   kB

Upvotes: 34

user2336876
user2336876

Reputation: 21

On the /proc/'processPID'/status you can find that information on the field VmSwap.

With this command you can list all process that are using swap.

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

Reference: http://www.cyberciti.biz/faq/linux-which-process-is-using-swap/

Upvotes: 2

Rahul Tripathi
Rahul Tripathi

Reputation: 172458

From here:

[a] /proc/meminfo - This file reports statistics about memory usage on the system. It is used by free to report the amount of free and used memory (both physical and swap) on the system as well as the shared memory and buffers used by the kernel. You can also use free, vmstat and other tools to find out the same information.

[b] /proc/${PID}/smaps, /proc/${PID}/status, and /proc/${PID}/stat : Use these files to find information about memory, pages and swap used by each process using its PID.

[c] smem - This command (python script) reports memory usage with shared memory divided proportionally.

Also you can refer 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"

Upvotes: 10

Related Questions