はじめに
この実験では、Linux で仮想メモリのオーバーコミット設定を確認する方法を学びます。sysctl コマンドを使用して、vm.overcommit_memory カーネルパラメータを表示し、その異なる値の意味を理解します。
また、/proc ファイルシステム、特に /proc/sys/vm ディレクトリを調査して、カーネルパラメータがどのようにファイルとして公開されているかを確認します。最後に、/etc/sysctl.conf ファイルを調べて、これらの設定を永続的に構成する方法を確認します。この実験を通じて、Linux 環境でカーネルのオーバーコミット設定を検証し理解する方法を実践的に学ぶことができます。
sysctl vm.overcommit でオーバーコミットを確認する
このステップでは、sysctl コマンドを使用して Linux で仮想メモリのオーバーコミット設定を確認する方法を学びます。
仮想メモリのオーバーコミットは、Linux の機能で、システムが物理的に利用可能なメモリよりも多くのメモリをプロセスに割り当てることを許可します。これは場合によっては有益ですが、プロセスが割り当てられたすべてのメモリを実際に使用しようとすると問題を引き起こす可能性もあります。
sysctl コマンドは、実行時にカーネルパラメータを表示および変更するために使用されます。ここでは、vm.overcommit_memory パラメータの値を確認するために使用します。
まだターミナルを開いていない場合は、開いてください。デスクトップの左側にある Xfce Terminal アイコンをクリックすることで開くことができます。
次に、以下のコマンドをターミナルに入力し、Enter キーを押します。
sysctl vm.overcommit_memory
このコマンドは、カーネルに vm.overcommit_memory パラメータの現在の値を表示するよう要求します。
以下のような出力が表示されるはずです。
vm.overcommit_memory = 0
値 0 は、デフォルトのヒューリスティックなオーバーコミット処理を示しています。他の可能な値は 1(常にオーバーコミット)と 2(決してオーバーコミットしない)です。この設定を理解することは、特にメモリ要求の高い環境におけるシステムのパフォーマンスと安定性にとって重要です。
Continue をクリックして次のステップに進みます。
/proc/sys/vm の設定を検証する
このステップでは、/proc ファイルシステム、特に /proc/sys/vm ディレクトリを調査して、仮想メモリに関連するカーネルパラメータがどのように公開されているかを確認します。
/proc ファイルシステムは、プロセスに関する情報やその他のシステム情報を提供する仮想ファイルシステムです。カーネルの現在の状態を調べるのに最適な場所です。/proc 内の /proc/sys ディレクトリには、実行時に表示したり、場合によっては変更したりできるカーネルパラメータに対応するファイルが含まれています。
/proc/sys/vm ディレクトリには、仮想メモリサブシステムに関連するファイルが格納されています。前のステップで確認した vm.overcommit_memory パラメータには、このディレクトリ内に対応するファイルがあります。
cat コマンドを使用して、vm.overcommit_memory を表すファイルの内容を表示しましょう。cat コマンドは、ファイルの内容を表示するために使用されます。
以下のコマンドをターミナルに入力し、Enter キーを押します。
cat /proc/sys/vm/overcommit_memory
このコマンドは、/proc/sys/vm にある overcommit_memory ファイルの内容を読み取り、ターミナルに表示します。
前のステップで sysctl コマンドを使用して確認したのと同じ値が表示されるはずです。
0
これは、sysctl が基本的に /proc/sys ファイルシステム内のこれらのファイルから読み取ったり、書き込んだりしていることを示しています。
また、/proc/sys/vm ディレクトリ内のファイルを一覧表示して、他の仮想メモリ関連のパラメータを確認することもできます。ls コマンドを使用します。
ls /proc/sys/vm/
仮想メモリに関連する異なるカーネルパラメータを表すファイルのリストが表示されます。
compact_hueristic
compact_memory
dirty_background_bytes
dirty_background_ratio
dirty_bytes
dirty_expire_centisecs
dirty_ratio
dirty_writeback_centisecs
drop_caches
extfrag_threshold
hugetlb_shm_group
laptop_mode
lowmem_reserve_ratio
min_free_bytes
min_slab_ratio
min_unmapped_ratio
mmap_min_addr
nr_hugepages
nr_hugepages_mempolicy
nr_overcommit_hugepages
numa_balancing
numa_balancing_scan_period_max_ms
numa_balancing_scan_period_min_ms
numa_balancing_scan_size_mb
numa_balancing_settle_count
numa_balancing_timeout
oom_dump_tasks
oom_kill_allocating_task
overcommit_memory
overcommit_ratio
page-cluster
panic_on_oom
percpu_pagelist_fraction
stat_interval
swappiness
user_reserve_kbytes
vfs_cache_pressure
watermark_boost_factor
watermark_scale_factor
zone_reclaim_mode
これにより、Linux カーネルの仮想メモリサブシステムで利用可能な多くの調整可能なパラメータの一部を見ることができます。
Continue をクリックして次に進みます。
cat /etc/sysctl.conf で設定を確認する
このステップでは、再起動を跨いでカーネルパラメータを永続的に設定するために使用される /etc/sysctl.conf ファイルについて学びます。
sysctl コマンドを使用するか、/proc/sys 内のファイルに書き込むことで、実行時にカーネルパラメータを変更することができますが、これらの変更は通常一時的であり、システムを再起動すると失われます。カーネルパラメータの変更を永続的にするには、通常、それらを /etc/sysctl.conf ファイルまたは /etc/sysctl.d/ ディレクトリ内のファイルに追加します。
システムが起動すると、/etc/sysctl.conf から設定を読み取り、適用します。
再び cat コマンドを使用して、/etc/sysctl.conf ファイルの内容を表示しましょう。
以下のコマンドをターミナルに入力し、Enter キーを押します。
cat /etc/sysctl.conf
これにより、主要な sysctl 設定ファイルの内容が表示されます。
# で始まる行があるかもしれませんが、これらはコメントで無視されます。他の行は、sysctl コマンドの出力で見たように、parameter = value の形式になります。
#
## /etc/sysctl.conf - Configuration file for setting system variables
## See /etc/sysctl.d/ .conf files for other system variables
#
#kernel.domainname = example.com
## Uncomment the following to stop low-level messages on console
#kernel.printk = 3 4 1 3
##############################################################3
## Functions previously found in netbase
#
## Uncomment the next two lines to enable Spoofing attacks protection
#net.ipv4.conf.default.rp_filter=1
#net.ipv4.conf.all.rp_filter=1
## Uncomment the next line to enable TCP/IP SYN cookies
#net.ipv4.tcp_syncookies=1
## Uncomment the next line to enable packet forwarding for IPv4
#net.ipv4.ip_forward=1
## Uncomment the next line to enable packet forwarding for IPv6
#net.ipv6.conf.all.forwarding=1
##############################################################3
## Blow away nobody in the kernel
#
#kernel.yama.ptrace_scope = 1
##############################################################3
## Magic system request Key
#
#kernel.sysrq = 176
##############################################################3
## Dynamic Shared Memory:
#
#kernel.shmmax = 4294967295
#kernel.shmall = 268435456
##############################################################3
## Other settings
#
#fs.file-max = 100000
#vm.swappiness = 60
#vm.vfs_cache_pressure = 50
#kernel.nmi_watchdog = 0
vm.overcommit_memory パラメータはこのファイルで明示的に設定されていない場合があることに注意してください。パラメータが /etc/sysctl.conf または /etc/sysctl.d/ で設定されていない場合、カーネルはそのデフォルト値を使用します。sysctl コマンドと /proc/sys/vm/overcommit_memory で見た値は、現在有効な値であり、デフォルト値か、起動時に他の設定ファイルまたはスクリプトによって設定された値です。
/etc/sysctl.conf を理解することは、永続的なシステムチューニングに不可欠です。
Continue をクリックしてこの実験を終了します。
まとめ
この実験では、Linux で仮想メモリのオーバーコミット設定を確認する方法を学びました。sysctl vm.overcommit_memory コマンドを使用して、このカーネルパラメータの現在の値を表示し、値が 0 はデフォルトのヒューリスティックな処理を示し、1 は常にオーバーコミットすることを意味し、2 は決してオーバーコミットしないことを意味することを理解しました。
また、/proc ファイルシステム、特に /proc/sys/vm ディレクトリを調査して、vm.overcommit_memory のようなカーネルパラメータがこの仮想ファイルシステム内のファイルとしてどのように公開されているかを確認しました。これにより、仮想メモリ設定に関するカーネルの現在の状態を調べる別の方法が提供されます。



