「Sysctl」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(同期)
(同期)
21行目: 21行目:
 
{{Note|カーネルドキュメントをインストールしている場合 ({{Pkg|linux-docs}})、sysctl 設定に関する詳細な情報が {{Ic|/usr/lib/modules/$(uname -r)/build/Documentation/sysctl/}} で読めます。sysctl 設定を変更する前にこれらを一読することが強く推奨されています。}}
 
{{Note|カーネルドキュメントをインストールしている場合 ({{Pkg|linux-docs}})、sysctl 設定に関する詳細な情報が {{Ic|/usr/lib/modules/$(uname -r)/build/Documentation/sysctl/}} で読めます。sysctl 設定を変更する前にこれらを一読することが強く推奨されています。}}
   
設定の変更はファイルの操作によるか {{Ic|sysctl}} ユーティリティを使って行います。例えば、一時的に[[Wikipedia:ja:マジックSysRqキー|マジック SysRq キー]]を有効にするには:
+
設定の変更はファイルの操作によるか {{Ic|sysctl}} ユーティリティを使って行います。例えば、一時的に[[キーボードショートカット|マジック SysRq キー]]を有効にするには:
   
 
# sysctl kernel.sysrq=1
 
# sysctl kernel.sysrq=1
52行目: 52行目:
 
ユースケースによって、例えば[[ルーター]]として使用するシステムで、他のパラメータが役に立ったり必要になることもあります。
 
ユースケースによって、例えば[[ルーター]]として使用するシステムで、他のパラメータが役に立ったり必要になることもあります。
   
  +
{{hc|/etc/sysctl.d/51-net.conf|2=
{{bc|1=
 
 
#### ipv4 networking and equivalent ipv6 parameters ####
 
#### ipv4 networking and equivalent ipv6 parameters ####
   
65行目: 65行目:
 
net.ipv4.tcp_rfc1337 = 1
 
net.ipv4.tcp_rfc1337 = 1
   
## sets the kernels reverse path filtering mechanism to value 1(on)
+
## sets the kernels reverse path filtering mechanism to value 1 (on)
 
## will do source validation of the packet's recieved from all the interfaces on the machine
 
## will do source validation of the packet's recieved from all the interfaces on the machine
 
## protects from attackers that are using ip spoofing methods to do harm
 
## protects from attackers that are using ip spoofing methods to do harm
  +
net.ipv4.conf.default.rp_filter = 1
 
net.ipv4.conf.all.rp_filter = 1
 
net.ipv4.conf.all.rp_filter = 1
net.ipv6.conf.all.rp_filter = 1
 
   
 
## tcp timestamps
 
## tcp timestamps
80行目: 80行目:
   
 
## log martian packets
 
## log martian packets
  +
net.ipv4.conf.default.log_martians = 1
 
net.ipv4.conf.all.log_martians = 1
 
net.ipv4.conf.all.log_martians = 1
   
89行目: 90行目:
   
 
## send redirects (not a router, disable it)
 
## send redirects (not a router, disable it)
  +
net.ipv4.conf.default.send_redirects = 0
 
net.ipv4.conf.all.send_redirects = 0
 
net.ipv4.conf.all.send_redirects = 0
   
 
## ICMP routing redirects (only secure)
 
## ICMP routing redirects (only secure)
  +
#net.ipv4.conf.default.secure_redirects = 1 (default)
 
#net.ipv4.conf.all.secure_redirects = 1 (default)
 
#net.ipv4.conf.all.secure_redirects = 1 (default)
 
net.ipv4.conf.default.accept_redirects=0
 
net.ipv4.conf.default.accept_redirects=0
101行目: 104行目:
 
== 仮想メモリ ==
 
== 仮想メモリ ==
   
Linux カーネルの仮想メモリ (VM) サブシステムの制御やダーティデータのディスクへの書き出しを調整するパラメータがいくつか存在します。詳しくは [https://www.kernel.org/doc/Documentation/sysctl/vm.txt Linux カーネルドキュメント]を見てさい。
+
Linux カーネルの仮想メモリ (VM) サブシステムの制御やダーティデータのディスクへの書き出しを調整するパラメータがいくつか存在します。詳しくは [https://www.kernel.org/doc/Documentation/sysctl/vm.txt Linux カーネルドキュメント]を見てください。例えば以下のようなパラメータが存在します:
   
  +
* {{ic|1=vm.dirty_ratio = 3}}
{{bc|1=
 
  +
: システムの空きページや回収可能ページを含む合計メモリから見たパーセンテージとして、ダーティデータを書き出し始めるディスク書き込みを発生させるページ数。
# Contains, as a percentage of total system memory, the number of pages at which
 
# a process which is generating disk writes will start writing out dirty data.
 
vm.dirty_ratio = 3
 
   
  +
* {{ic|1=vm.dirty_background_ratio = 2}}
# Contains, as a percentage of total system memory, the number of pages at which
 
  +
: システムの空きページや回収可能ページを含む合計メモリから見たパーセンテージとして、ダーティデータを書き出し始めるバックグラウンドカーネルのフラッシュスレッドのページ数。
# the background kernel flusher threads will start writing out dirty data.
 
  +
vm.dirty_background_ratio = 2
 
  +
上記の値を設定する際はメモリの合計量を考慮する必要があります。例えば、マシンに搭載されているシステムメモリとして話を簡単にすると以下のようになります:
}}
 
   
  +
* 搭載されているメモリが 1GB の場合は {{ic|vm.dirty_ratio}} の設定をメモリの 10% に設定するというコンセンサスが合理的です (メモリの 10% はつまり {{#expr: 1000/10 round 0}} MB になります)。ただしマシンにもっと大量にメモリを搭載している、例えば 16 GB もマシンに積んでいる場合 (その場合 10% は {{#expr: 16/10 round 1 }} GB となります)、磁気ディスクにライトバックするのに数秒近くもかかってしまうため適当な数字とは言えません。この場合、3 に設定するのが適当でしょう (16 GB の 3% は約 491 MB です)。
コメントで説明されているように、これらの値を設定する際は RAM の合計量を考慮する必要があります。
 
  +
* {{ic|vm.dirty_background_ratio}} も同じように、メモリが少ない時はデフォルトの 5 が丁度良いかもしれませんが、システムの合計メモリの量によって調整するべきです。
   
  +
他にも以下のパラメータが存在します:
* {{ic|vm.dirty_ratio}} のデフォルトは 10 です (RAM の 10%)。RAM が 1GB の半分のときは RAM の 10% というのがコンセンサスで (つまり 10% は 50 MB 以下) 磁気ディスクならば合理的な値です。ただし RAM が大きい、例えば 16 GB のときは (10% は 1.6 GB 以下) 磁気ディスクにライトバックするのに数秒かかるのであまり良くありません。この場合に合理的な値は 3 です (16*0.03 ~ 491 MB)。
 
   
  +
* {{ic|1=vm.vfs_cache_pressure = 60}}
* {{ic|vm.dirty_background_ratio}} は同じように、メモリが少ない時はデフォルトの 5 (% の RAM) が丁度良いですが、システムの RAM の量によって調整するべきです。
 
  +
: ディレクトリや inode オブジェクトのキャッシュ (VFS キャッシュ) に使用されるメモリをカーネルがどれくらい回収するか制御する値です。デフォルト値の 100 から低くするとカーネルは VFS キャッシュをあまり回収しなくなります (0 に設定してはいけません。メモリ不足状態になる可能性があります)。
   
 
== MDADM ==
 
== MDADM ==
148行目: 151行目:
 
== 参照 ==
 
== 参照 ==
   
* [http://linux.die.net/man/8/sysctl sysctl(8)][http://www.unixlore.net/cgi-bin/man/man2html?5+sysctl.conf sysctl.conf(5)] の man ページ
+
* {{man|8|sysctl}}{{man|5|sysctl.conf}}
* Linux カーネルドキュメント ({{Ic|<kernel source dir>/Documentation/sysctl/}})
+
* [https://www.kernel.org/doc/Documentation/sysctl/ /proc/sys/ の Linux カーネルドキュメント]
 
* カーネルドキュメント: [https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt IP Sysctl]
 
* カーネルドキュメント: [https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt IP Sysctl]
* SysCtl.conf Tweaked for Security and Cable Speed [http://blog.gotux.net/code/config/sysctl/]
+
* [http://blog.gotux.net/code/config/sysctl/ SysCtl.conf Tweaked for Security and Cable Speed]{{Dead link|2015|12|14}}
* sysctl のカーネルネットワークパラメータ [http://tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.kernel.html]
+
* [http://tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.kernel.html sysctl のカーネルネットワークパラメータ]

2017年2月19日 (日) 02:07時点における版

sysctl は稼働中のカーネルパラメータを確認・変更するためのツールです (公式リポジトリprocps-ng パッケージ)。sysctl は procfs (/proc/ の仮想プロセスファイルシステム) で実装されています。

設定

ノート: バージョン 207 と 21x から、systemd/etc/sysctl.d/*.conf/usr/lib/sysctl.d/*.conf の設定だけを適用するようになっています。/etc/sysctl.conf をカスタマイズしていた場合は、ファイルの名前を /etc/sysctl.d/99-sysctl.conf のように変更する必要があります。/etc/sysctl.d/foo などのファイルを作成していた場合、/etc/sysctl.d/foo.conf と名前を変更してください。

sysctl のプリロード/設定ファイルは /etc/sysctl.d/99-sysctl.conf に作成することができます。systemd では、/etc/sysctl.d//usr/lib/sysctl.d/ はカーネルの sysctl パラメータにどちらも使えるディレクトリです。名前と元のディレクトリによって処理される順番が決まります。最後のパラメータによって前の方のパラメータが置き換えられるので順番は重要です。例えば、/usr/lib/sysctl.d/50-default.conf に書かれたパラメータは /etc/sysctl.d/50-default.conf や両方のディレクトリよりも後に処理される設定ファイルにある同じパラメータによって置き換えられます。

全ての設定ファイルを手動でロードするには、次を実行します:

# sysctl --system 

適用される階層が出力されます。単一のパラメータファイルを指定してロードすることも可能です:

# sysctl -p filename.conf

詳しくは the new configuration filessystemd の sysctl.d man ページ を見て下さい。

利用可能なパラメータは /proc/sys/ 以下に並んでいます。例えば、kernel.sysrq パラメータはファイルシステム上の /proc/sys/kernel/sysrq ファイルにあたります。sysctl -a コマンドを使うことで現在利用可能な値を全て表示することができます。

ノート: カーネルドキュメントをインストールしている場合 (linux-docs)、sysctl 設定に関する詳細な情報が /usr/lib/modules/$(uname -r)/build/Documentation/sysctl/ で読めます。sysctl 設定を変更する前にこれらを一読することが強く推奨されています。

設定の変更はファイルの操作によるか sysctl ユーティリティを使って行います。例えば、一時的にマジック SysRq キーを有効にするには:

# sysctl kernel.sysrq=1

もしくは:

# echo "1" > /proc/sys/kernel/sysrq

再起動後も変更を維持させるには、/etc/sysctl.d/99-sysctl.conf や他の /etc/sysctl.d/ 内の適用されるパラメータファイルに適切な行を追加・編集してください。

ヒント: 適用することができるパラメータがロードされないカーネルモジュールに依存していることもあります。例えば /proc/sys/net/bridge/* のパラメータは br_netfilter モジュールに依存しています。モジュールが実行時に (または再起動後) ロードされない場合、パラメータはひっそりと適用されないことになります。カーネルモジュール#ロードを見て下さい。

セキュリティ

セキュリティ#カーネルの防御を見て下さい。

ネットワーク

パフォーマンスを向上させる

警告: 以下の設定はロードバランシングや NAT を行っている場合にフレームがドロップする可能性があります。ローカルネットワークでしか通信しないサーバーで使ってください。
# reuse/recycle time-wait sockets
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1

TCP/IP スタックの防御

以下では IPv4 プロトコルでカーネルのネットワークセキュリティを厳しくするオプションのパラメータセットを示しています。同一の効果がある IPv6 パラメータも存在します。

ユースケースによって、例えばルーターとして使用するシステムで、他のパラメータが役に立ったり必要になることもあります。

/etc/sysctl.d/51-net.conf
#### ipv4 networking and equivalent ipv6 parameters ####

## TCP SYN cookie protection (default)
## helps protect against SYN flood attacks
## only kicks in when net.ipv4.tcp_max_syn_backlog is reached
net.ipv4.tcp_syncookies = 1

## protect against tcp time-wait assassination hazards
## drop RST packets for sockets in the time-wait state
## (not widely supported outside of linux, but conforms to RFC)
net.ipv4.tcp_rfc1337 = 1

## sets the kernels reverse path filtering mechanism to value 1 (on)
## will do source validation of the packet's recieved from all the interfaces on the machine
## protects from attackers that are using ip spoofing methods to do harm
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1

## tcp timestamps
## + protect against wrapping sequence numbers (at gigabit speeds)
## + round trip time calculation implemented in TCP
## - causes extra overhead and allows uptime detection by scanners like nmap
## enable @ gigabit speeds
net.ipv4.tcp_timestamps = 0
#net.ipv4.tcp_timestamps = 1

## log martian packets
net.ipv4.conf.default.log_martians = 1
net.ipv4.conf.all.log_martians = 1

## ignore echo broadcast requests to prevent being part of smurf attacks (default)
net.ipv4.icmp_echo_ignore_broadcasts = 1

## ignore bogus icmp errors (default)
net.ipv4.icmp_ignore_bogus_error_responses = 1

## send redirects (not a router, disable it)
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.all.send_redirects = 0

## ICMP routing redirects (only secure)
#net.ipv4.conf.default.secure_redirects = 1 (default)
#net.ipv4.conf.all.secure_redirects = 1 (default)
net.ipv4.conf.default.accept_redirects=0
net.ipv4.conf.all.accept_redirects=0
net.ipv6.conf.default.accept_redirects=0
net.ipv6.conf.all.accept_redirects=0

仮想メモリ

Linux カーネルの仮想メモリ (VM) サブシステムの制御やダーティデータのディスクへの書き出しを調整するパラメータがいくつか存在します。詳しくは Linux カーネルドキュメントを見てください。例えば以下のようなパラメータが存在します:

  • vm.dirty_ratio = 3
システムの空きページや回収可能ページを含む合計メモリから見たパーセンテージとして、ダーティデータを書き出し始めるディスク書き込みを発生させるページ数。
  • vm.dirty_background_ratio = 2
システムの空きページや回収可能ページを含む合計メモリから見たパーセンテージとして、ダーティデータを書き出し始めるバックグラウンドカーネルのフラッシュスレッドのページ数。

上記の値を設定する際はメモリの合計量を考慮する必要があります。例えば、マシンに搭載されているシステムメモリとして話を簡単にすると以下のようになります:

  • 搭載されているメモリが 1GB の場合は vm.dirty_ratio の設定をメモリの 10% に設定するというコンセンサスが合理的です (メモリの 10% はつまり 100 MB になります)。ただしマシンにもっと大量にメモリを搭載している、例えば 16 GB もマシンに積んでいる場合 (その場合 10% は 1.6 GB となります)、磁気ディスクにライトバックするのに数秒近くもかかってしまうため適当な数字とは言えません。この場合、3 に設定するのが適当でしょう (16 GB の 3% は約 491 MB です)。
  • vm.dirty_background_ratio も同じように、メモリが少ない時はデフォルトの 5 が丁度良いかもしれませんが、システムの合計メモリの量によって調整するべきです。

他にも以下のパラメータが存在します:

  • vm.vfs_cache_pressure = 60
ディレクトリや inode オブジェクトのキャッシュ (VFS キャッシュ) に使用されるメモリをカーネルがどれくらい回収するか制御する値です。デフォルト値の 100 から低くするとカーネルは VFS キャッシュをあまり回収しなくなります (0 に設定してはいけません。メモリ不足状態になる可能性があります)。

MDADM

カーネルがソフトウェア raid デバイスの resync を実行するときは、システムに高負担をかけないように速度を制限しています。sysctl を使って速度制限を上げたり下げたりすることが可能です。

# Set maximum and minimum speed of raid resyncing operations
dev.raid.speed_limit_max = 10000
dev.raid.speed_limit_min = 1000

mdadm が md_mod モジュールとしてコンパイルされている場合、上記の設定はモジュールがロードされた後にのみ使うことができます。/etc/sysctl.d を使って起動時に設定をロードする場合、md_mod モジュールは /etc/modules-load.d で事前にロードすることができます。

トラブルシューティング

定期的にシステムがフリーズする

ダーティバイトを十分小さい値に設定 (例えば 4M):

vm.dirty_background_bytes = 4194304
vm.dirty_bytes = 4194304

kernel.io_delay_type を変更してみる (x86 のみ):

  • 0 - IO_DELAY_TYPE_0X80
  • 1 - IO_DELAY_TYPE_0XED
  • 2 - IO_DELAY_TYPE_UDELAY
  • 3 - IO_DELAY_TYPE_NONE

参照