<分区>
我写了一个简短的脚本来比较 free -m
命令报告的可用 RAM 量与使用的交换空间量,如果有足够的空间用于交换空间 + 128M(到补偿在发出命令的确切时间交换使用的瞬时增加),将交换的数据移回 RAM。问题是无论我使用多少 RAM,脚本都会返回“内存中没有足够的空间来取消交换”。我输入了 echo
命令并且数学运算有效,所以我认为这与 if ((diff > 128)); 有关然后
行。如果有人可以看一下,我将不胜感激。
注意:我想在虚拟化服务器上使用带有 cron 作业的脚本来返回已换出到内存(如果有空间)的 KVM 机器。由于我的服务器也是我试用新发行版的地方,因此我的 RAM 使用率往往会出现周期性的峰值。因此,像 ownCloud 这样很少使用的 VM 偶尔会被换出,但在我或其他人需要它们做某事之前不会重新使用,然后我就会收到提示它们坏了或速度慢得令人痛苦的消息。
#!/bin/bash
# This script moves data from swap back into RAM
meminfo=$(mktemp -d -t meminfo.XXXXXX)
cd $meminfo
info=$(mktemp info.XXXXXX)
swapline=$(mktemp swapline.XXXXXX)
freeline=$(mktemp freeline.XXXXXX)
free -m > info
exec 0< info
sed -n '2p' info > freeline
less freeline | while read -a values;
do
free=${values[3]}
cached=${values[6]}
avail=$[$free+$cached]
done
sed -n '4p' info > swapline
less swapline | while read -a bytes;
do
swap=${bytes[2]};
done
diff=$((avail - swap))
if (( diff > 128 )); then
echo "unswapping"
swapoff -a
swapon /dev/sda2
else
echo "Not enough room in memory to unswap"
fi
rm -r $meminfo
#
这是 free -m
的当前输出;脚本仍然不起作用。
total used free shared buffers cached
Mem: 3019 2930 88 12 49 851
-/+ buffers/cache: 2029 989
Swap: 1928 165 1763