Sometimes stuff gets swapped out. When it does, it’s good to know what is swapped. I was getting this Nagios alert this morning.
SWAP CRITICAL - 32% free (1302 MB out of 4095 MB) [1302 (32%)]
I started searching. I found this post about showing what is using swap via:
[dan@knew:~] $ ps ax | awk 'NR==1{print};$3 ~ /W/'
PID TT STAT TIME COMMAND
12 - WL 54:27.37 [intr]
10147 - IWsJ 0:00.00 /bin/sh /usr/local/bin/mysqld_safe --defaults-extra-file=/usr/local/etc/mysql/my.cnf --based
12791 - IWsJ 0:00.00 /bin/sh /usr/local/bin/mysqld_safe --defaults-extra-file=/var/db/mysql/my.cnf --user=mysql -
15305 - IWsJ 0:00.00 nginx: master process /usr/local/sbin/nginx
15306 - IWJ 0:00.00 nginx: worker process (nginx)
19848 - IWsJ 0:00.00 /bin/sh /usr/local/bin/mysqld_safe --defaults-extra-file=/usr/local/etc/mysql/my.cnf --based
12717 3 IWs 0:00.00 -sh (sh)
12718 3 IW 0:00.00 bash
12722 3 IW 0:00.00 su
12723 3 IW 0:00.00 _su (csh)
96806 0 IWs 0:00.00 -sh (sh)
96915 1 IWsJ 0:00.00 -sh (sh)
96916 1 IWJ 0:00.00 bash
4558 2 IWsJ 0:00.00 -sh (sh)
4560 2 IWJ 0:00.00 bash
[dan@knew:~] $
It does not tell me what jails.
I started searching for displaying jail information via ps. I found this post:
ps -o pid,jid -awux
Let’s combine the two.
In the first command, NR==1{print}; says to always print the first row (so we see the column headers. $3 ~ /W/ says that if the third column contains a W, print it.
The 3rd column for the first command is STAT. In our second command, that column is number column 9. Hence, our new combined command is:
[dan@knew:~] $ ps -o pid,jid -awux | awk 'NR==1{print};$9 ~ /W/'
PID JID USER %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
12 0 root 0.8 0.0 0 704 - WL Thu08PM 54:29.29 [intr]
10147 8 mysql 0.0 0.0 17096 0 - IWsJ - 0:00.00 /bin/sh /usr/local/bin/mysqld_safe --defaults-extra-file=/usr/loc
12791 9 mysql 0.0 0.0 17096 0 - IWsJ - 0:00.00 /bin/sh /usr/local/bin/mysqld_safe --defaults-extra-file=/var/db/
15305 11 root 0.0 0.0 29348 0 - IWsJ - 0:00.00 nginx: master process /usr/local/sbin/nginx
15306 11 www 0.0 0.0 29348 0 - IWJ - 0:00.00 nginx: worker process (nginx)
19848 15 mysql 0.0 0.0 17096 0 - IWsJ - 0:00.00 /bin/sh /usr/local/bin/mysqld_safe --defaults-extra-file=/usr/loc
12717 0 dan 0.0 0.0 17100 0 3 IWs - 0:00.00 -sh (sh)
12718 0 dan 0.0 0.0 17892 0 3 IW - 0:00.00 bash
12722 0 root 0.0 0.0 47748 0 3 IW - 0:00.00 su
12723 0 root 0.0 0.0 23604 0 3 IW - 0:00.00 _su (csh)
96806 0 dan 0.0 0.0 17100 0 0 IWs - 0:00.00 -sh (sh)
96915 15 dan 0.0 0.0 17096 0 1 IWsJ - 0:00.00 -sh (sh)
96916 15 dan 0.0 0.0 17876 0 1 IWJ - 0:00.00 bash
4558 15 dan 0.0 0.0 17096 0 2 IWsJ - 0:00.00 -sh (sh)
4560 15 dan 0.0 0.0 17876 0 2 IWJ - 0:00.00 bash
[dan@knew:~] $
Success.
So, what now?
Once stuff has been swapped out, it’s hard to get it swapped back in. For me, these are not critical task. Just annoying. I take the easy & lazy way out. I restart the jails in question.
You can also run swapoff to remove the devices from swap. That forces the stuff back into RAM.
After restarting my jails, I was at:
$ swapinfo Device 1K-blocks Used Avail Capacity /dev/mirror/swap 4194300 360300 3834000 9%
Yep, this is a dirty approach.











