12

Linuxカーネルを設定してみました。/etc/sysctl.confを編集して実行するsysctl -p
と、エラーが表示されます

Invalid argument" setting key "net.core.somaxconn"

Linux ディストリビューション: Ubuntu 12.04.4 LTS、x86_64、3.2.0-60-generic

$ cat /etc/sysctl.conf
net.ipv4.conf.eth0.arp_notify = 1
vm.swappiness = 0
net.ipv4.tcp_rmem = 4096 87380 4194304
net.ipv4.tcp_wmem = 4096 16384 4194304
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.somaxconn = 262144
net.core.netdev_max_backlog = 262144
fs.file-max = 1048576
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_max_syn_backlog = 409600
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_max_orphans = 262144

を増やすことはできますnet.core.somaxconn262144?

4

1 に答える 1

36

nginxを微調整しようとしたときに発生したのと同じ問題。これは、Ubuntu カーネルに加えられたパッチの問題です。の

sock 構造体の sk_max_ack_backlog フィールドは unsigned short として定義されています。

したがって、 のバックログ引数はinet_listen() を超えてはなりませんUSHRT_MAX。syscallの backlog 引数listen()は値に切り捨てられsomaxconnます。したがって、値は( )somaxconnを超えてはなりません。65535USHRT_MAX

要するに、あなたのnet.core.somaxconn作品を作るために、あなたはそれ以上の価値を与えるべきではありません65535

net.core.somaxconn = 65535

これは悲しいことですが、カーネルを再パッチしても問題ない限り、私たちはそれを受け入れなければなりません: https://lists.ubuntu.com/archives/kernel-team/2013-October/033041.html

于 2014-08-01T07:07:17.937 に答える