LinuxでRAMの少ない状態のテストをしたいなと思ってコマンドラインオプションにメモリ制限のオプションをつけて試してみました.
物理RAMモジュールが制限したい容量に刺し直すことができればいいのですが,都合の良いサイズのRAMモジュールがあるとは限りません.Linuxの起動オプションで制限できそうだったので試してみました.
Linuxマシンを起動して,GRUBのメニューで編集したいエントリを矢印上下キーで選択して, e
ボタンを押して編集メニューに入ります.
linux /vmlinuz〜
といった行に移動して末尾に追加の起動オプションを追記します.今回はメモリを2GBに制限したいので, mem=2048m
を指定します.(実メモリ以上にも設定できるようですがそこを使おうとしたときにクラッシュしそうですね)
- 旧
linux /vmlinuz-5.13.2-mptcp+le9 root=/dev/mapper/yoga—260—vg-root ro
- 新
linux /vmlinuz-5.13.2-mptcp+le9 root=/dev/mapper/yoga—260—vg-root ro mem=2048m
Ctrl + x
を押してこのオプションで起動します.
起動したら確認してみます.
$ cat /proc/cmdline (1)
BOOT_IMAGE=/vmlinuz-5.13.2-mptcp+le9 root=/dev/mapper/yoga--260--vg-root ro mem=2048m
$ head -1 /proc/meminfo (2)
MemTotal: 2032968 kB
$ free (3)
total used free shared buff/cache available
Mem: 2032968 1575032 70032 161360 387904 139588
Swap: 0 0 0
- コマンドラインオプションの確認
- メモリの確認
- メモリの確認
2GBに制限できたようです :)
詳細はKernelドキュメントを
linux-5.13/Documentation/admin-guide/kernel-parameters.txt
mem=nn[KMG] [KNL,BOOT] Force usage of a specific amount of memory Amount of memory to be used in cases as follows: 1 for test; 2 when the kernel is not able to see the whole system memory; 3 memory that lies after 'mem=' boundary is excluded from the hypervisor, then assigned to KVM guests. [X86] Work as limiting max address. Use together with memmap= to avoid physical address space collisions. Without memmap= PCI devices could be placed at addresses belonging to unused RAM. Note that this only takes effects during boot time since in above case 3, memory may need be hot added after boot if system memory of hypervisor is not sufficient.
今回の手順はアドホックな手順で再起動すれば元に戻ってしまいます.もし永続化したいのであれば, grub.cfg
を書き換えればOKなはずです.今回のDebian Bullseye の場合は, /etc/grub.d/10_linux
を編集して sudo update-grub2
の実行で /boot/grub/grub.cfg
が更新されます.
環境
$ dpkg-query -W grub2* linux-image-`uname -r` procps
grub2
grub2-common 2.04-19
linux-image-5.13.2-mptcp+le9 5.13.2-mptcp+le9-3
procps 2:3.3.17-5
$ lsb_release -dr
Description: Debian GNU/Linux 11 (bullseye)
Release: 11
$ arch
x86_64