9
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Organization

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

カーネルパラメータとは

カーネルパラメータというのは、カーネルの個々の機能やドライバが解釈して、 それぞれの振る舞いを変更できるようにするためのもの。

なぜこの設定が必要なのかというと、例えば「Webサーバ」だったり「DBサーバ」だったり「インメモリーのキャッシュサーバ」だったりサーバは様々な用途があるがそれぞれ必要な特性がありその特性を活かすために設定するのが主ではないかと思う。

どんなパラメータがあるの?

カーネルパラメータの説明は下記を読むのが一番性格。

linux/Documentation/sysctl/

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

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
9
Help us understand the problem. What are the problem?