Reputation: 161
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
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
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
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
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