以前会社で使っていたsysctlとさらに改良

私が商用に作った環境で入れていた設定。
全部自分で調べて設定したため
参考にしたサイトも含め公開します。
CentOS6を想定。
それ以降は別途カーネル3.0以降の機能を見てください。

sysctl以外の設定は
[CentOSユーザがUbuntu16.04にMySQL構築してドツボにはまる(徹底チューニング編)] (http://qiita.com/bringer1092/items/dee887430015f8cf643f)
を参考にしてください

##サーバ関係なくいれる設定
###IPv6無効
\# [How do I disable IPv6? - FAQ/CentOS6 - CentOS Wiki](https://wiki.centos.org/FAQ/CentOS6#head-d47139912868bcb9d754441ecb6a8a10d41781df)

```ini
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
```

###極力スワップさせない
\# [OOM relation to vm.swappiness=0 in new kernel; kills MySQL server process](https://www.percona.com/blog/2014/04/28/oom-relation-vm-swappiness0-new-kernel/)

```ini
vm.swappiness = 1
```
kernel4.6からは0で問題ないかもしれないが未調査

###メモリの使用量制御をコントロールする
\# [About vm.overcommit_memory](https://qiita.com/h-imaoka/items/9c0dc9e07bf39175b7ea)

```ini
vm.overcommit_memory=1
```
きちんと制御できるなら1がベスト
複数アプリが稼働しているなら2にせざるを得ない

###TCP再送回数
\# [ウェブ広告のインフラについて(第5回) LinuxのTCP再送アルゴリズムとモバイルネットワークの相性の悪さ | 多脚.com](http://takyaku.com/?p=859)

```ini
net.ipv4.tcp_orphan_retries = 3
```

###keepalive先の通信状況確認
\# [High Performance Browser Networking - 愛と勇気と缶ビール](http://zentoo.hatenablog.com/entry/20130711/1373552725)

```ini
net.ipv4.tcp_slow_start_after_idle = 0
```

###SYN Flood攻撃対策
\# [listen backlog 【3.6】 - Linuxカーネルメモ](http://wiki.bit-hive.com/linuxkernelmemo/pg/listen%20backlog%20%A1%DA3.6%A1%DB)

```ini
net.ipv4.tcp_syncookies = 1
```

###相手がいないのにESTABLISHEDになる
\# [相手がいないのに ESTABLISHED になってる TCP ポート - @tmtms のメモ](http://tmtms.hatenablog.com/entry/2014/08/06/tcp-established)

```ini
net.ipv4.tcp_abort_on_overflow=1
```

###TCPのオプションを無効
\# [net.ipv4.tcp_tw_recycle は廃止されました ― その危険性を理解する](https://qiita.com/tmshn/items/b49f1b51bfc472968b30)
net.ipv4.tcp_tw_recyclは4.12から廃止

```ini
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
```

###Oracleの設定がいいんじゃないかとそのまま入れた部分
\# [Installing the Oracle Database Software](https://docs.oracle.com/cd/E26370_01/doc.121/e26358/dbinstall.htm)

```
kernel.sem = 250 32000 100 128
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
fs.aio-max-nr = 1048576
fs.file-max = 681574
```
###NoSQLや1Gbps以上のトラフィックがあるならCassandraをベースに
\# [Recommended production settings for Apache Cassandra] (http://docs.datastax.com/en/landing_page/doc/landing_page/recommendedSettings.html)

```
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.rmem_default = 16777216
net.core.wmem_default = 16777216
net.core.optmem_max = 40960
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
vm.max_map_count = 1048575
```
###その他設定
\# [＠IT：Linuxでは表示できないWebサイトがある](http://www.atmarkit.co.jp/flinux/rensai/linuxtips/667cantshowweb.html)

```ini
net.ipv4.tcp_ecn = 1
```

\# [あまり知られていない設定 - Linux Advanced Routing & Traffic Control HOWTO](https://linuxjf.osdn.jp/JFdocs/Adv-Routing-HOWTO/lartc.kernel.obscure.html)

```ini
net.ipv4.tcp_rfc1337 = 1
```

\# [Linux におけるソケット機能の向上](https://www.ibm.com/developerworks/jp/linux/library/l-hisock/)

```ini
net.ipv4.tcp_sack = 1
net.ipv4.tcp_fack = 1
```

###送信用TCPポート範囲
```ini
#NAT、リバースプロクシ用
#net.ipv4.ip_local_port_range = 1024 65000
```

#サーバの種類で変えた方がいい設定
###TCP再送回数の設定
フェイルオーバーのかかる時間で設計、
フェイルオーバーしなくていいなら2回までとする。
\# [LinuxのTCP SYNの再送間隔の初期値が3秒から1秒に変更されていた - 元RX-7乗りの適当な日々](http://d.hatena.ne.jp/rx7/20131129/p1)


```ini
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_synack_retries = 2
```

###KEEPALIVEの設定
\# [CLOSE_WAITのセッションを早く消す方法 – Hiro Fukami's Blog](http://hirofukami.com/2008/08/11/close-wait/)

```ini
#フロント用サーバ(PC)
#net.ipv4.tcp_keepalive_time = 5
#net.ipv4.tcp_keepalive_intvl = 2
#net.ipv4.tcp_keepalive_probes = 5

#フロント用サーバ(mobile)
#net.ipv4.tcp_keepalive_time = 10
#net.ipv4.tcp_keepalive_intvl = 2
#net.ipv4.tcp_keepalive_probes = 10

#それ以外のサーバ
#net.ipv4.tcp_keepalive_time = 60
#net.ipv4.tcp_keepalive_intvl = 2
#net.ipv4.tcp_keepalive_probes = 60
```

###FINで強制的に接続を切る
\# [ぜんぶTIME_WAITのせいだ！ - Qiita](http://qiita.com/kuni-nakaji/items/c07004c7d9e5bb683bc2)

```ini
net.ipv4.tcp_fin_timeout = 30
```

###高負荷時の動作安定
\# [DSAS開発者の部屋:高負荷サイトのボトルネックを見つけるには](http://dsas.blog.klab.org/archives/51977201.html)
\# [LinuxのTCP/IPの実装について調べてみた - nyantの日記](http://d.hatena.ne.jp/nyant/20111216/1324043063)

```ini
net.core.netdev_max_backlog = 4096
net.core.somaxconn = 4096
net.ipv4.tcp_max_syn_backlog = 4096
```

###スループット重視(未検証)
\# [Linux におけるソケット機能の向上](https://www.ibm.com/developerworks/jp/linux/library/l-hisock/)

```ini
net.ipv4.tcp_low_latency = 0
```

###ディスク性能で変わるミドルウェアの場合いじると効果がある(未検証)
\# [Better Linux Disk Caching & Performance with vm.dirty_ratio](https://lonesysadmin.net/2013/12/22/better-linux-disk-caching-performance-vm-dirty_ratio/)

```ini
#vm.dirty_background_ratio = 5
#vm.dirty_ratio = 80
```