Help us understand the problem. What is going on with this article?

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
ryuichi1208
ITエンジニアっぽい仕事してます。
https://ryuichi1208.hateblo.jp/about
yyphp
PHPerが毎週集まり、ざっくばらんに情報交換する雑談コミュニティ
https://yyphp.connpass.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした