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

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

【Linux】Linux カーネルパラメータのチューニング

カーネルのチューニングに関するメモ この辺の特性を活かした構築をしていきたい(遠い目)

net.core.rmem_max

TCPUDPの受信バッファのデフォルトサイズと最大サイズ

net.core.wmem_max

TCPUDPの送信バッファのデフォルトサイズと最大サイズ

net.nf_conntrack_max

ESTABLISHEDのリストの最大数(OS側の管理数)

net.ipv4.conf.default.accept_source_route

ソースルートが指定されたパケットを拒否。本来は経路のテストを行う目的であるのでoffにする

net.ipv4.tcp_rmem

データ受信バッファ サイズ

net.ipv4.tcp_timestamps

NAT環境下で、複数ホストがクライアントのときに、WAN側のサーバに接続が切られる対策

net.ipv4.tcp_fin_timeout = 5

FINのタイムアウト時間 60

net.ipv4.tcp_syn_retries = 3

tcpのSYNを送信するリトライ回数。 この回数SYNを送ってもダメなら諦める 5

net.ipv4.tcp_synack_retries = 3

接続を受付側としてオープンするとき、 カーネルは SYN に ACK を詰め込んで送り、先に受けとった SYN を確認する。 5

net.ipv4.tcp_syncookies = 1

SYN flood攻撃対策 1

net.ipv4.ip_local_port_range = 10000 65535

TCP/IPの送信時に使用するポートの範囲

可能なら 1024-65535が良いが、iptablesAWSだとNetworkACLとかで 同様に必要に応じて開放しておかないとパケットが途中で止まってハマるから注意。 $ cat /proc/sys/net/ipv4/ip_local_port_rangeで確認できる 32768 61000

net.ipv4.tcp_tw_reuse = 1

自分からの接続を使い回す。tcp_tw_recycleは相手からの接続を使い回す。 0

net.ipv4.tcp_tw_recycle = 0

相手からの接続を使い回す。 0

net.ipv4.tcp_rfc1337 = 1

RFC1337に準拠させる。TIME_WAIT状態のときにRSTを受信した場合、TIME_WAIT期間の終了を待たずにそのソケットをクローズする 0

net.ipv4.tcp_fin_timeout = 5

タイムアウトはできる限り短いほうがいい 60

net.ipv4.tcp_max_tw_buckets = 65536

システムが同時に保持するtime-waitソケットの最大数。 DoS攻撃を防げるため、低くするのはやめたほうが良い。 動的

net.ipv4.tcp_orphan_retries = 0

こちらからクローズしたTCPコネクションを終了する前の再送回数。 webサーバだとリソースを消費する可能性があるため、低くしたほうが良い 0

net.ipv4.tcp_keepalive_probes = 5

TCP が keepalive プローブを送る数。この数に達すると、 その接続が壊れたとみなす。 9

net.ipv4.tcp_slow_start_after_idle = 0

keepaliveしててもしばらく通信がなかったらcongestion window sizeをresetする。 keepaliveを利用しており、かつ輻輳が少ない環境ではoffが良い。 1

net.core.netdev_max_backlog = 65536

パケット受信時にキューに繋ぐことができるパケットの最大数 1000

net.ipv4.tcp_max_syn_backlog = 65536

ソケット当たりのSYNを受け付けてACKを受け取っていない状態のコネクションの保持可能数。 この値を超えたものに関してはOSはSYNパケットを拒否することになる。 溢れたパケットはnetstatで確認できる。 ただし、この値はnet.core.somaxconnより大きかった場合、net.core.somaxconnの値を優先する。 1024

net.ipv4.conf.eth180.arp_ignore = 1

ぶら下がってるAPサーバ群にarpに応答させない(MACアドレスを覚えさせない) IPとmacアドレスが関係ずけられると、送りたい機器に通信できなくなる。 0

net.ipv4.conf.eth180.arp_announce = 2

ぶら下がってるAPサーバ群にarpに応答させない(MACアドレスを覚えさせない) IPとmacアドレスが関係ずけられると、送りたい機器に通信できなくなる。 0

net.core.somaxconn = 65535

一度に受け入れられるTCPセッションのキューの数。 TCPのセッション数をbacklogで管理し、それを超えたものはキューに格納される。 このキューの数をここで設定する 128

vm.swappiness = 0

実メモリがある状態でスワップを使用しない 0

vm.overcommit_memory = 2

実メモリ以上にプロセスにメモリを割り当てない 0

vm.overcommit_ratio = 99

OOM killerで勝手にkillするくらいだったら、メモリ不足を検出してエラー処理をさせる。

kernel.shmmax = メモリのByte数

共有メモリの最大サイズ。サーバーの搭載メモリ(1GB)に合わせて変更するので 動的?

kernel.shmall = 68719476736

システム全体の共有メモリ・ページの最大数 68719476736

kernel.msgmnb = 65536

1つのメッセージキューに保持できるメッセージの最大値 65536

kernel.msgmax = 65536

メッセージキューIDの最大値 65536

kernel.sysrq = 0

SysRqとは、サーバでキーボード操作ができなくなったとき、カーネルが昨日してれば特定のキー(Alt + PrintScreen)で割り込める。使わないので0 0

kernel.core_uses_pid

コアダンプ時、".PID"をコアファイル名に追加しない