地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【Linux】カーネルパラメータの変更方法

概要

カーネルパラメータを変更する機会があったわけですが、全くといっていいほど今まで気にしたことがなかったのでこれを機にカーネルパラメータ周りや sysctl の使い方を整理してみます。

sysctl

説明

man sysctl より抜粋

sysctl は カーネルのパラメータを実行時に修正するのに用いる。変更できるパラメータは /proc/sys/ 以下にリストされているものである。 Linux における sysctl の機能には procfs が必要である。 sysctl は sysctl データの読み書き両方に使える。

option について

option 意味
-n  キーの名前は表示せず、値だけ表示する
-e 不明なキーについてエラーを無視する
-N 名前のみ表示する
-q 値のセットを標準出力に表示しない
-w sysctl の設定を変更する場合には、このオプションを指定する
-p 指定されたファイルから読み込んだ内容を sysctl 設定へロード。指定がなければ /etc/sysctl.confから
-a 現在利用できる全ての値を表示
-A -a に同じ

コマンド例一覧

  • 値のみ表示
# sysctl -n net.ipv4.tcp_keepalive_time
7200
  • 名前のみ表示
# sysctl -N net.ipv4.tcp_keepalive_time
net.ipv4.tcp_keepalive_time
  • 設定の変更
# sysctl -w net.ipv4.tcp_keepalive_time=100
net.ipv4.tcp_keepalive_time = 100

# sysctl -a | grep keepalive_time
net.ipv4.tcp_keepalive_time = 100
  • 設定のロード
* vim で設定変更してから -p でロード
# vim /etc/sysctl.conf
net.ipv4.tcp_keepalive_time = 100
を追記

# sysctl -a | grep keepalive_time
net.ipv4.tcp_keepalive_time = 7200
* まだ反映されていない

# sysctl -p
* 反映

net.ipv4.tcp_keepalive_time = 100
* 一部抜粋、反映された

# sysctl -a | grep keepalive_time
net.ipv4.tcp_keepalive_time = 100
* 反映されていることを確認

/etc/sysctl.conf と /proc/sys 配下の関係

設定変更は sysctl コマンドを使用して行えますが /proc/sys 配下の管理ファイル群に echo 値 > で書き込む形で反映させる方法もあります。

# echo 100 > /proc/sys/net/ipv4/tcp_keepalive_time
# sysctl -a | grep keepalive_time
net.ipv4.tcp_keepalive_time = 100

ただし /etc/sysctl.conf へ書き込んでおらず /proc/sys 以下のみ変更した場合だと暫定での変更となり再起動後はデフォルトの設定へ戻ってしまいます。恒久的に反映したい際は/etc/sysctl.conf へ設定を記載し sysctl -p で反映させるのが良いと思います。

sysctl の覚書でした。 カーネルパラメータ1つ1つの覚書もしようと思いましたが数が多いのでまたそのような場面に遭遇したらということで:p