This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
如果在你的日志中看到很多 error: too many open files
,这时就应该优化你的系统了。
本教程适用于所有 Shadowsocks 服务端 (Python 版、libev 版、还有其他)
以下教程适用于 Debian7 系统:
新建 /etc/sysctl.d/local.conf
这个文件并添加下面的内容:
fs.file-max = 51200
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.core.rmem_default = 65536
net.core.wmem_default = 65536
net.core.netdev_max_backlog = 4096
net.core.somaxconn = 4096
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 10000 65000
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_fastopen = 3
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
net.ipv4.tcp_mtu_probing = 1
net.ipv4.tcp_congestion_control = hybla
然后运行:
sysctl --system
注意:不要开启 net.ipv4.tcp_tw_recycle
!!!看这个文章。
如果你在使用 Supervisor 的话,请确保 /etc/default/supervisor
文件中有下面这一行。添加这一行之后,请重启 Supervisor(service supervisor stop && service supervisor start
)
ulimit -n 51200
如果您通过其他方式来启动 Shadowsocks,确保 ulimit -n 51200
在您的启动脚本中。
优化后,一个繁忙的处理很多连接数的 Shadowsocks 服务器,会占用大约 30MB 的内存以及 10% 的 CPU。要注意的是同时,Linux 内核使用了 >100MB 内存来存储这些连接的缓存。用了上面提供的 sysctl 设置后,你是在用内存空间换取速度。如果你想用更少内存的话,减少 rmem 以及 wmem。
使用前 & 使用后: