カーネルパラメータとは | 若手エンジニアのブログ

若手エンジニアのブログ

文系出身の若手女子エンジニアによる技術ブログ。
日々の経験や学びをアウトプットするためにブログを書いています。
バックエンド(Java+SpringFramework)を経てインフラエンジニアになりました。
今は育休中につき、本で勉強したことを中心にアウトプットしています。

久しぶりの更新となりました(´・ω・`)

 

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に記述する+設定反映操作が必要

 

今回は以上!