Here is a handy script that will check all processes and report what is swapping
#!/bin/bash
for pid in `ps x|awk '{print $1}'`; do
result=`cat /proc/$pid/status|grep VmSwap|awk '{print $2}'|grep -v ^"0"`
if [ ! -z "$result" ]; then
programresult=`ps x|grep $pid|grep -v grep`
if [ $? == 0 ]; then
program=`echo $programresult|awk '{print $5}'|grep -v ^grep`
fi
echo "$pid $program swap = $result kB"
fi
done
You can also pipe the output like this to sort the largest swap processes:
|sort -nr -k4
The old way that never worked very well:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ SWAP COMMAND
7371 on 20 0 1558m 1148 740 S 0 0.0 0:00.02 1.5g services.exe
7369 on 20 0 1558m 1084 708 S 0 0.0 0:00.02 1.5g wineboot.exe
Run top then press 'O' (capital letter o) followed by 'p' then 'enter'. Now processes should be sorted by their swap usage.