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

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

【Linux】webのためのカーネルパラメータ

linuxの話です。

web関連でもlinuxカーネルパラメータが実は大事だということがたまにあるらしい。

クラウドを使っててもawsのec2なんかは実は結構見落とされがちなだけで結構効果が出たりするとのこと

散財してるノウハウをまとめてみた。

ちなみにcentos7.7では実に800種類ほどのカーネルパラメータが存在する。

OS屋さんでもない限りこれを把握するのは難しそう。。。

$ cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)

$ sysctl -a | wc
sysctl: reading key "net.ipv6.conf.all.stable_secret"
sysctl: reading key "net.ipv6.conf.default.stable_secret"
sysctl: reading key "net.ipv6.conf.ens192.stable_secret"
sysctl: reading key "net.ipv6.conf.lo.stable_secret"
    809    2538   28726
# 共有メモリの最大サイズ。サーバーの搭載メモリ(1GB)に合わせて変更
kernel.shmmax

# システム全体の共有メモリ・ページの最大数
kernel.shmall

# システム全体のプロセス数の上限
kernel.threads-max

# TCPソケットが受け付けた接続要求を格納する、キューの最大長。hard limit的な役割
net.core.somaxconn

# ソケット当たりのSYNを受け付けてACKを受け取っていない状態のコネクションの保持可能数。
net.ipv4.tcp_max_syn_backlog

# ソケットキューのサイズ
net.ipv4.tcp_tw_reuse

# TCPの受信バッファサイズの最大値
net.core.rmem_max

# TCPの送信バッファサイズの最大値
net.core.wmem_max

# TCPのTIME_WAITを再利用するかどうか
net.ipv4.tcp_tw_reuse

# TCPのFINを送信してからのタイムアウト時間
net.ipv4.tcp_fin_timeout 

# tcpのSYNを送信するリトライ回数
net.ipv4.tcp_syn_retries

# synflood攻撃対策
net.ipv4.tcp_syncookies

# TCP/IPの送信時に使用するポートの範囲。エフェメラルポートに使用する範囲なので枯渇しないように設定
net.ipv4.ip_local_port_range

# 
# 設定した値が大きすぎると、システムのポート、ファイルの記述子、およびメモリーが制御できなくなる。
# 設定した値が小さすぎると、システムは、遅延したパケットをリークする。
net.ipv4.tcp_max_tw_buckets

# 
net.ipv4.tcp_orphan_retries

# 
net.ipv4.tcp_keepalive_probes 

# 
net.core.netdev_max_backlog

# RFC1337に準拠させる
net.ipv4.tcp_rfc1337