我以为交换分区的整个本质是在RAM满了的时候充当一个临时存储安全网,但是我的交换分区经常被使用,即使有时候我有多达3GB的空闲RAM。这正常吗?
sudo sysctl --load=/etc/sysctl.conf
来应用更改。free -m
的信息。 - thomasrutter设置 swappiness 值并不在所有情况下都有效。如果对您有效,很好。如果没有效果,我编写了一个脚本,定期通过关闭然后重新启动来清除交换空间。
如果你不小心切换交换空间,会有一些风险。如果你没有足够的空闲内存来容纳所有的数据和交换空间中的内容,尝试禁用交换空间将导致系统无响应。我的脚本首先检查是否有足够的空闲内存(这需要一些操作,因为实际上的空闲内存量与 free
报告的不同),只有在有足够内存时才切换交换空间。但是,如果你的内存有点不足,请在脚本运行时不要启动另一个重要的进程。以下是脚本:
#!/bin/bash
# Make sure that all text is parsed in the same language
export LC_MESSAGES=en_US.UTF-8
export LC_COLLATE=en_US.UTF-8
export LANG=en_US.utf8
export LANGUAGE=en_US:en
export LC_CTYPE=en_US.UTF-8
# Calculate how much memory and swap is free
free_data="$(free)"
mem_data="$(echo "$free_data" | grep 'Mem:')"
free_mem="$(echo "$mem_data" | awk '{print $4}')"
buffers="$(echo "$mem_data" | awk '{print $6}')"
cache="$(echo "$mem_data" | awk '{print $7}')"
total_free=$((free_mem + buffers + cache))
used_swap="$(echo "$free_data" | grep 'Swap:' | awk '{print $3}')"
echo -e "Free memory:\t$total_free kB ($((total_free / 1024)) MB)\nUsed swap:\t$used_swap kB ($((used_swap / 1024)) MB)"
# Do the work
if [[ $used_swap -eq 0 ]]; then
echo "Congratulations! No swap is in use."
elif [[ $used_swap -lt $total_free ]]; then
echo "Freeing swap..."
swapoff -a
swapon -a
else
echo "Not enough free memory. Exiting."
exit 1
fi
export LANGUAGE=en_US.UTF-8
吗? - alper#!/bin/bash
free_mem="$(free | grep 'Mem:' | awk '{print $7}')"
used_swap="$(free | grep 'Swap:' | awk '{print $3}')"
echo -e "Free memory:\t$free_mem kB ($((free_mem / 1024)) MiB)\nUsed swap:\t$used_swap kB ($((used_swap / 1024)) MiB)"
if [[ $used_swap -eq 0 ]]; then
echo "Congratulations! No swap is in use."
elif [[ $used_swap -lt $free_mem ]]; then
echo "Freeing swap..."
sudo swapoff -a
sudo swapon -a
else
echo "Not enough free memory. Exiting."
exit 1
fi
swapoff -av
(需要sudo
权限)。
swapon -av
(同样需要sudo
权限)。
free -m
,top -b 1
。 - ish