当 RAM 足够时,服务器会使用交换内存,因此用户会遇到间歇性缓慢和性能问题。在 free 命令中,我可以看到使用了 6927mbs 的交换空间,但是当我通过 top 对 PID 进行排序时,我发现只有 2 个 pid 消耗了几 kbs。
细节:-
free -m
total used free shared buffers cached
Mem: 129043 123398 5644 56782 147 59134
-/+ buffers/cache: 64116 64926
Swap: 8191 6927 1264
按 SWAP 使用情况排序的最佳输出:-
top - 11:08:18 up 17 days, 8:29, 318 users, load average: 18.64, 18.34, 17.73
Tasks: 3115 total, 12 running, 3103 sleeping, 0 stopped, 0 zombie
Cpu(s): 26.3%us, 3.5%sy, 0.0%ni, 67.5%id, 2.5%wa, 0.0%hi, 0.1%si, 0.0%st
Mem: 132140360k total, 131050280k used, 1090080k free, 27072k buffers
Swap: 8388604k total, 7093580k used, 1295024k free, 60220780k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ **SWAP** COMMAND
2353 mfg 20 0 38.6g 532m 2452 S 0.2 0.4 9:06.68 **4096** java
23499 mfg 20 0 24.4g 358m 245m S 0.0 0.3 0:56.71 **2692** D_finqonddb_AS_
1 root 20 0 23600 724 368 S 0.0 0.0 7:20.05 0 init
2 root 20 0 0 0 0 S 0.0 0.0 3:08.08 0 kthreadd
3 root RT 0 0 0 0 S 0.0 0.0 1:04.47 0 migration/0
swappiness 值
cat /proc/sys/vm/swappiness
**1**
请帮我如何识别哪些进程正在使用/写入 SWAP 内存。
答案1
您可能需要使用 smem 查看或检查 /proc/-PID-/status 中以 VmSwap 开头的行。
https://confluence.atlassian.com/bamkb/how-to-review-swap-space-usage-on-a-linux-server-865042927.html有这个很好的 CLI 表达式来报告该行和所有 PID 的进程名称:
对于 /proc/*/status 中的文件;执行 awk'/VmSwap|Name/{printf $2" " $3}END{print""}'$file;完成 |sort -k 2 -n -r |less
答案2
smaps 文件存储交换详细信息。使用下面的脚本获取交换消耗 PID 详细信息。
ps ax -o pid,args | grep -v '^ PID'|sed -e 's,^ *,,' > /tmp/ps_ax.output
echo -n >/tmp/results
for swappid in $(grep -l Swap /proc/[1-9]*/smaps ); do
swapusage=0
for x in $( grep Swap $swappid 2>/dev/null |grep -v '\W0 kB'|awk '{print $2}' ); do
let swapusage+=$x
done
pid=$(echo $swappid| cut -d' ' -f3|cut -d'/' -f3)
if ( [ $swapusage -ne 0 ] ); then
echo -ne "$swapusage kb\t\t" >>/tmp/results
egrep "^$pid " /tmp/ps_ax.output |sed -e 's,^[0-9]* ,,' >>/tmp/results
fi
done
echo "top swap using processes which are still running:"
sort -nr /tmp/results | head -n 10