読者です 読者をやめる 読者になる 読者になる

GRUBの設定でカーネルが認識するメモリ容量を制限する

Linux

もう年末です。今年のISUCONではpixivさんの社内ISUCONで練習させていただきました。

inside.pixiv.net

その時に気になったことがありまして。インスタンスタイプが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

使用できるメモリが増えました!

JJUG CCC Fall 2016 で Spring のソースコードを読んだことについて話してきた #jjug_ccc

Java

SpringはどうやってDIしているのか?というタイトルで話してきました。

資料はこちらです。

資料を書いている時にいろいろ迷ったのですが、Springのソースコードを淡々と話すスタイルにしました。過去にはSeasarGoogle Guiceを使うことが多くて、Spring暦は1年ちょっとくらいです。Springを使い始めた時、 @ComponentScan 書いて @Component 書いて @Autowired 書いておけばDIされて便利だなぁと思って何となくソースコードを読んだら、想像以上に読むのが大変でした。Springが裏で泥臭いことをやってくれていたり色々な機能を提供してくれていたので、後々参考になるようにまとめました。

Springを使っている前提で話しを進めました。が、使ったことのない人も聞いて頂いていたようで、Springを使ってる人向けであることを発表の説明文でもっと強調しておくべきだったなぁと反省しております。。

Springにどういう機能があるとか、どうやって使うとかはこの本と公式ドキュメントを読むのが良いと思います。

個人的には、ブログをよく参考にさせて頂いている方達にお礼ができてよかったなぁ。

スタッフのみなさん、楽しいイベントをありがとうございました!