LoginSignup
16
22

More than 5 years have passed since last update.

Linux TCP/IP parameter note

Posted at

簡単なメモ

net.core.(r|w)mem_max

setsockopt(2) の SO_RCVBUF, SO_SNDBUF で指定できる値の最大値。
SO_RCVBUF, SO_SNDBUF はそれぞれソケットの受信・送信バッファのサイズ。
rmem_max は初期 window サイズの上限値にもなる。

net.ipv4.tcp_mem

システム全体で TCP が消費できるメモリの最大値。単位はページ。
左から順に min/pressure/max.

# CentOS 7.0.1406 での例
# この場合は 135MB, 181MB, 271MB になる
$ cat /proc/sys/net/ipv4/tcp_mem 
33972   45296   67944

デフォルト値は起動時の空きメモリをベースに計算される。
min は使えることが保証される値。
TCP 全体の消費量が pressure を超えるとメモリ消費が抑制されはじめる。
具体的には windows サイズを大きくすることをやめたり送信バッファの拡張を控えて最小限のメモリ確保で動作するようになる。
このモードになった回数は /proc/net/netstat の TCPMemoryPressures で確認できる。
これは min を下回るまで続く。(下回ると解除される)
max を超えることは無く、仮に超えるようなメモリ確保が走ると失敗する。

net.ipv4.tcp_(r|w)mem

ソケット1つ1つが使うバッファのサイズ。
左から順に min, deault, max.

$ cat /proc/sys/net/ipv4/tcp_rmem
4096    87380   6291456

$ cat /proc/sys/net/ipv4/tcp_wmem
4096    16384   4194304

ソケットが作られると送受信バッファはデフォルトが割り当てられ、必要に応じて最大値まで大きくなる。
メモリに余裕があるならば最大値の設定を変えることで性能を向上させられる。
ただしこれはソケットごとの設定のため、ソケット数の最大値や運用状況に応じて計算する必要がある。

16
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
22