カーネルパラメータとは
カーネルパラメータというのは、カーネルの個々の機能やドライバが解釈して、 それぞれの振る舞いを変更できるようにするためのもの。
なぜこの設定が必要なのかというと、例えば「Webサーバ」だったり「DBサーバ」だったり「インメモリーのキャッシュサーバ」だったりサーバは様々な用途があるがそれぞれ必要な特性がありその特性を活かすために設定するのが主ではないかと思う。
どんなパラメータがあるの?
カーネルパラメータの説明は下記を読むのが一番性格。
Linuxカーネルソースに付属しているドキュメントです。
例えばnet系のパラメータの説明をみたいならここで確認できます。
linux/Documentation/sysctl/net.txt
よく使う設定項目である「netdev_max_backlog」なんかの説明も以下のように記載されています。
(もちろんここで見れるのは概要だけであり詳細がみたいならソースをおう必要があります。)
netdev_max_backlog
Maximum number of packets, queued on the INPUT side, when the interface
receives packets faster than kernel can process them
TCPサーバ向けのtuning
基本
# 恒久的設定
$ vi /etc/sysctl.conf
$ sysctl -p
kernel
# 共有メモリの最大サイズ。サーバーの搭載メモリ(1GB)に合わせて変更
kernel.shmmax = 1073741824
# システム全体の共有メモリ・ページの最大数
kernel.shmall = 262144
# システム全体のプロセス数の上限
kernel.threads-max = 1060863
# kernel panicで自動再起動
kernel.panic=30
ファイルシステム関連
# ファイルシステムでのオープンファイルの上限
fs.file-max = 1619870
仮想メモリ
# OOM killer 発動した場合は kernel panicを起こして再起動させる
vm.panic_on_oom=1
Network
# ネットワークデバイス別にカーネルが処理できるように貯めておくqueueのサイズ
net.core.netdev_max_backlog
# backlog値のhard limit
net.core.somaxconn = 4096
# ソケット当たりのSYNを受け付けてACKを受け取っていない状態のコネクションの保持可能数
net.ipv4.tcp_max_syn_backlog = 16000
# NIC に対する受信パケットの最大キューイング数
net.core.netdev_max_backlog = 16000
# TCPとUDPの受信バッファのデフォルトサイズと最大サイズ
net.core.rmem_max = 4194304
# TCPとUDPの送信バッファのデフォルトサイズと最大サイズ
net.core.wmem_max = 4194304
# データ受信バッファ サイズ
net.ipv4.tcp_rmem = 4096 87380 4194304
# FINのタイムアウト時間
net.ipv4.tcp_fin_timeout = 12
# tcpのSYNを送信するリトライ回数
net.ipv4.tcp_syn_retries = 2
# TCP/IPの送信時に使用するポートの範囲
net.ipv4.ip_local_port_range = 32768 60999
# 自分からの接続を使い回す
net.ipv4.tcp_tw_reuse = 1
# RFC1337に準拠させる
net.ipv4.tcp_rfc1337 = 1
# システムが同時に保持するtime-waitソケットの最大数
net.ipv4.tcp_max_tw_buckets = 360000
# クライアントからの Sync パケットは捨てずに、 Syn cookies を利用した通信を行うかの設定
net.ipv4.tcp_syncookies = 1
# accept キューがあふれた場合、クライアントからの SYN に RST を返す
net.ipv4.tcp_abort_on_overflow = 0
# SYN flood攻撃対策。
net.ipv4.tcp_syncookies = 1