我希望交换大小等于机器RAM(内存)

时间:2017-02-07 00:11:02

标签: linux bash ubuntu memory

我已经写了一些代码:

echo " > Get MemTotal"
export MEM_TOTAL=`echo "scale=0; ($(awk '/MemTotal/ { print $2 }' /proc/meminfo) / 1000) + 1" | bc 2>/dev/null`

echo " > Set new swap memory"
sudo /bin/dd if=/dev/zero of=/var/swap.1 bs=${MEM_TOTAL}M count=1024
sudo /sbin/mkswap /var/swap.1
sudo /sbin/swapon /var/swap.1

我只是不确定放置${MEM_TOTAL}变量的位置。其他一切都经过测试和运作。

所以换句话说,如果我的目标是让我的记忆大小等于我的记忆大小,我是否正确行事?

2 个答案:

答案 0 :(得分:3)

首先,您获得了megabytes中的总内存值,但您使用的是M,这意味着mebibytes代表sed。这是一个区别。

您需要使用MB告诉sed块大小以兆字节为单位:

dd if=/dev/zero of=/var/swap.1 bs=1MB count="${MEM_TOTAL}"

但是,你也可以使用truncate命令,速度要快得多:

truncate -s "${MEM_TOTAL}"MB /var/swap.1

此外,您可以使用free命令获取以兆字节为单位的内存量:

MEM_TOTAL="$(free -m --si | awk 'NR==2{print $2}')"

这可能不那么苛刻了。

但最后你甚至可以使用/proc/meminfo中的字节值并将其传递给truncate,无需计算:

truncate -s "$(awk '/MemTotal/{print $2}' /proc/meminfo)" /var/swap.1

(不要使用字节,bs=1使用dd。执行速度非常慢。使用truncate

答案 1 :(得分:2)

MEM_TOTAL大致以兆字节为单位,因此您应该使用:

dd if=/dev/zero of=/var/swap.1 bs=1M count=$MEM_TOTAL

您的代码尝试分配和写入数千兆字节的RAM一千倍。一般来说,bs(块大小)应该是您的常量基本单位,并且只有每一个都应该变化。