![判断哪个应用程序/进程正在使用交换的最佳方式?](https://linux22.com/image/1000567/%E5%88%A4%E6%96%AD%E5%93%AA%E4%B8%AA%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%2F%E8%BF%9B%E7%A8%8B%E6%AD%A3%E5%9C%A8%E4%BD%BF%E7%94%A8%E4%BA%A4%E6%8D%A2%E7%9A%84%E6%9C%80%E4%BD%B3%E6%96%B9%E5%BC%8F%EF%BC%9F.png)
答案1
您可以通过以下命令查看特殊进程使用了多少交换分区:
cat /proc/"PID"/status | grep "^VmSwap"
你可以PID
通过这个命令找到:
ps -A | grep "Application_name"
但是如果你想要找出哪些进程正在使用交换分区,你可以使用这个脚本:
#!/bin/bash
for i in /proc/*/status ; do
vmswap=$(cat $i | grep "^VmSwap")
echo "$vmswap" | grep -qv ' 0 kB'
if [ $? == 0 ] && [ "$vmswap" != "" ] ; then
echo "$i : $vmswap"
fi
done
然后您可以从脚本返回的 PID 中找到应用程序名称。
更新:我将此脚本更改为每 10 秒创建一次日志文件(您可以更改时间),并且在该文件中,您可以看到从运行此脚本到现在的许多进程:
#!/bin/bash
counter=1
touch ~/swap_process_usage.log
while true ; do
echo -e "************************************\nSwap's process in count $counter " >> ~/swap_process_usage.log
for i in /proc/*/status ; do
vmswap=$(cat $i | grep "^VmSwap")
echo "$vmswap" | grep -qv ' 0 kB'
if [ $? == 0 ] && [ "$vmswap" != "" ] ; then
pid=$(echo "$i" | tr -d /proc/ | tr -d status)
proc_name=$(ps -p $pid -o comm=)
echo "$proc_name : $pid : $vmswap" >> ~/swap_process_usage.log
fi
done
sleep 10s
counter=$((counter+1))
done
您可以将此脚本设置为在启动所以它每次都会创建日志。