久しぶりの更新となりました(´・ω・`)
5月とても忙しかったので、アメブロ自体放置していたのですが、
いつの間にか5月の合計PVが1万を超えてました…!
いつもありがとうございます^^
さて、今日はカーネルパラメータについて。
確認環境はCenOS7です。
もくじ
1.カーネルパラメータとは
2.カーネルパラメータの種類
3.カーネルパラメータの変更方法
1.カーネルパラメータとは
OSシステムの挙動を制御するパラメータで、システムの実行中に調整できる特徴を持つ。
具体的な制御対象は後述するが、OS挙動の中核的パラメータであり、
設定をミスると、最悪OSが起動しなくなってしまうこともある。
カーネルパラメータは自ら設定せずとも、デフォルトで必要な値が設定されている。
が、OSの利用用途によって、最適なパフォーマンスを実現できるよう、
ユーザによる設定変更が可能となっている。
例えば、OSにデータベースをインストールすることを考えてみる。
データベースは大量のデータを処理し、メモリも多く必要となることが多い。
そんな時、データベースの処理を適切な速度や内容で行えるよう、利用できるメモリ容量を調整するといったことが、カーネルパラメータで可能となっている。
一方、データベースをインストールしない場合は、
データベースのために必要なスペックを、わざわざ用意してやる必要はない。
このように、カーネルパラメータは、必要に応じて、デフォルトから調整してやることで、
よりリソースを有効に活用できるものである。
なおデフォルト値は、物理環境やOSによって変わってくるため、一概には言えない。
が、以下のコマンドを実行することで、
各カーネルパラメータの現在設定されている値を確認することができる。
$ sysctl -a
2.カーネルパラメータの種類
カーネルパラメータは、パラメータで設定する内容によって種別分けされており、各種別は「クラス」と呼ばれる。
例えば、ファイルシステムに関するパラメータ群は「fs」クラス、
メモリやバッファ、キャッシュのチューニングと管理に関するパラメータ群は「vm」クラスに分けられる。
1つのクラスの中に、さらに細分化されたサブクラスがあることもある。
イメージしやすいように、Oracle Databaseの公式ドキュメントにあった例をそのまま出してみる。
fs.aio-max-nr = 1048576 ←fsクラスのaio-max-nrというパラメータ
fs.file-max = 6815744
kernel.shmall = 2097152 ←kernelクラスのshmallというパラメータ
kernel.shmmax = 4294967295
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500 ←netクラスのipv4に属する、ip_local_port_rangeパラメータ
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
ちなみに、カーネルパラメータの一覧がどこかにあるかネットを探してみたけど、見つからず…。
ただクラスの一覧は、RedHat7のドキュメントにあった。(OSによって多少違うかも。)
3.カーネルパラメータの変更方法
カーネルパラメータの変更は、大きく2通りの方法がある。
・一時的に変更する方法
・永続的に変更する方法
一時的な変更は、OSシステムを再起動するともとの値に戻る。
が、たいていは目的に応じてカーネルパラメータを変えようとするはずのため、永続変更を行うことが多いだろう。
永続的な変更を行うには、設定ファイルにカーネルパラメータを記述する必要がある。
カーネルパラメータの設定ファイルは以下である。
・/etc/sysctl.conf
・/etc/sysctl.d/配下のconfファイル
1つ目の設定ファイルがメインファイルとなるが、/etc/sysctl.d/配下のconfファイルは、メインのファイルに書かれた設定をオーバーライドする。
そのため、基本的には/etc/sysctl.d/配下に専用のconfファイルを新規作成して、設定を記述していくことが多い。
専用ファイルを追加することで、どのパラメータにどんな値を設定追加したのかが明確になるため、その意味でも専用ファイルを作ることをお勧めする。
設定ファイルは、以下のような規則で記述していく。
記述はvim等で問題ない。
パラメータ名=値
例えばこんなかんじ。
fs.aio-max-nr = 1048576
必要なパラメータと値を設定ファイルに追加したら、設定を反映する。
反映方法は以下の2通り。
①OSを再起動する
②sysctl -p 追加した設定ファイルパス (例: sysctl -p /etc/sysctl.d/99-custom.conf)
②のほうが手軽かつ、反映された値が標準出力されるので、反映の確認もしやすい。
まとめ
なんか久々のブログで、だらだらと書いてしまった気が…(;^_^A
ということで、要点を改めてまとめておきます。
・カーネルパラメータで、ネットワークやメモリ等々、OSの設定を調整できる
・カーネルパラメータの設定変更は、/etc/sysctl.conf または /etc/sysctl.d/xxx.confに記述する+設定反映操作が必要
今回は以上!