简介

标题好别扭,意思就是对于Ubuntu等采用systemd,将shadowsocks写成.service的,对于服务器端shadowsocks日志出现大量error: too many open files的优化处理方法。

以下绝大多数内容照搬shadowsocks官方的优化 Shadowsocks

实际上这是一个以空间换时间的方法,即用更多的内存空间存储shadowsock的连接,来防止shadowsock由于内存等限制而造成error: too many open files,所以小内存服务器请慎重。

优化Shadowsocks

新建local.conf

新建/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

修改shadowsocks.service

这里shadowsocks.service是我写的service的名字,注意替换成你自己的。

编辑shadowsocks.service

[Unit]
Description=shadowsocks server
After=network.target

[Service]
Type=forking
PIDFile=/run/shadowsocks.pid
PermissionsStartOnly=true
ExecStart=/usr/local/bin/ssserver --pid-file /run/shadowsocks.pid -c /etc/shadowsocks/config.json -d start
Restart=on-abort

[Install]
WantedBy=multi-user.target

这是我的修改之前的文件内容,可能会有些差别,但不要紧,能用就行

然后在ExecStart上一行加入

ExecStartPre=/bin/sh -c 'ulimit -n 51200'

修改之后文件像这样:

[Unit]
Description=shadowsocks server
After=network.target

[Service]
Type=forking
PIDFile=/run/shadowsocks.pid
PermissionsStartOnly=true
ExecStartPre=/bin/sh -c 'ulimit -n 51200'
ExecStart=/usr/local/bin/ssserver --pid-file /run/shadowsocks.pid -c /etc/shadowsocks/config.json -d start
Restart=on-abort

[Install]
WantedBy=multi-user.target

注意:如果你的.service文件本身就有ExecStartPre也没关系,再加一行ExecStartPre就行了。

保存并重启shadowsocks

由于修改了.service文件,需要首先reload一次再重启

sudo systemctl daemon-reload
sudo systemctl restart shadowsocks

参考

优化 Shadowsocks · shadowsocks/shadowsocks Wiki