GRUBの設定でカーネルが認識するメモリ容量を制限する
もう年末です。今年のISUCONではpixivさんの社内ISUCONで練習させていただきました。
その時に気になったことがありまして。インスタンスタイプがc4.largeなのにメモリが1Gしかなくて、なんでかなーと。
$ free -m total used free shared buffers cached Mem: 998 236 762 12 11 105 -/+ buffers/cache: 119 879 Swap: 0 0 0 $ cat /proc/meminfo MemTotal: 1022972 kB
c4.largeのメモリは3.75GBのはずですが、1Gしか認識されていません。
どこかで制限しているのだろうけど・・・OSが認識していない、OSが起動する前に制限してる?ブートローダー?と思ったらそうでした。
/boot/grub/grub.cfg
を確認すると、 mem=1G
という記述があります!
linux /boot/vmlinuz-3.16.0-4-amd64 root=UUID=e0f20fc2-3ca6-416b-8907-4050fe6120ab ro mem=1G init=/bin/systemd console=hvc0 console=ttyS0
この設定を変えてみます。 /boot/grub/grub.cfg
を直接変更するのではなく、 /etc/default/grub
を編集します。
参考 GRUB を設定する 〜 GRUB 2 編 - いますぐ実践! Linuxシステム管理 / Vol.202
/etc/default/grub
を確認してみると
$ cat /etc/default/grub | grep GRUB_CMDLINE_LINUX GRUB_CMDLINE_LINUX_DEFAULT="init=/bin/systemd console=hvc0 console=ttyS0" GRUB_CMDLINE_LINUX="mem=1G"
ありますねー、 mem=1G
という記述が。 GRUB_CMDLINE_LINUX
にはカーネルの起動パラメータを記述できます。ここに起動パラメータを記述してOSが認識するメモリ容量を制限していました。
GRUB_CMDLINE_LINUX
から mem=1G
の記述を消して、以下のコマンド実行します。
$ sudo update-grub Generating grub configuration file ... Found linux image: /boot/vmlinuz-3.16.0-4-amd64 Found initrd image: /boot/initrd.img-3.16.0-4-amd64 done
再度 /boot/grub/grub.cfg
を確認してみると mem=1G
がなくなっています。
linux /boot/vmlinuz-3.16.0-4-amd64 root=UUID=e0f20fc2-3ca6-416b-8907-4050fe6120ab ro init=/bin/systemd console=hvc0 console=ttyS0
インスタンスを再起動して、確認してみると
$ free -m total used free shared buffers cached Mem: 3774 245 3529 16 11 109 -/+ buffers/cache: 124 3650 Swap: 0 0 0 $ cat /proc/meminfo MemTotal: 3865596 kB
使用できるメモリが増えました!