现在爬墙用的梯子是越来越多样化了,其中基于GAE的GoAgent和全平台支持的Shadowsocks最受欢迎。
大家的梯子服务器大多数也是购买的美国VPS,由于跨越了太平洋,网络质量不能保证一直都非常良好。
特别是在晚间高峰期,丢包、延迟非常严重,梯子的带宽根本利用不上!
解决上面的问题,最好的办法就是使用锐速这款TCP加速软件了,当然是收费的。
另外,我们还可以修改VPS的内核参数来提高TCP性能,尽可能的最大限度利用硬件资源。
下面就来介绍下这种免费方法,修改过后效果和使用锐速差不多。

注意事项

本文所面对的情况为:

  1. 高并发数

  2. 高延迟高丢包(典型的美国服务器)

  3. 拥有完全的内核控制权,即VPS虚拟技术使用的是XEN或KVM,KVM最好。

  4. Linux内核版本需要在3.5及以上。

我们通过修改 /etc/sysctl.conf 来达到调整的目的,注意修改完以后记得使用:sysctl -p来使修改生效。

修改sysctl.conf

在文件底部加入一下内容,保存即可。
首先,针对高并发数,我们需要提高一些 linux 的默认限制:

net.ipv4.tcp_syncookies = 1 # 表示开启 SYN Cookies。

当出现 SYN 等待队列溢出时,启用 cookies 来处理,可防范少量 SYN 攻击,默认为 0,表示关闭;

net.ipv4.tcp_tw_reuse = 1 # 表示开启重用。

允许将 TIME-WAIT sockets 重新用于新的 TCP 连接,默认为 0,表示关闭;


net.ipv4.tcp_tw_recycle = 1 # 表示开启 TCP 连接中 TIME-WAIT sockets 的快速回收,默认为 0,表示关闭;

net.ipv4.tcp_fin_timeout = 30 # 修改系統默认的 TIMEOUT 时间。


net.ipv4.tcp_keepalive_time = 1200 # 表示当 keepalive 起用的时候,TCP 发送 keepalive 消息的频度。缺省是 2 小时,改为 20 分钟。 net.ipv4.ip_local_port_range = 10000 65000 # 表示用于向外连接的端口范围。

缺省情况下很小:32768 到 61000,改为 10000 到 65000。(注意:这里不要将最低值设的太低,否则可能会占用掉正常的端口!)


net.ipv4.tcp_max_syn_backlog = 8192 # 表示 SYN 队列的长度,默认为 1024,加大队列长度为 8192,可以容纳更多等待连接的网络连接数。

net.ipv4.tcp_max_tw_buckets = 5000 # 表示系统同时保持 TIME_WAIT 的最大数量,如果超过这个数字,TIME_WAIT 将立刻被清除并打印警告信息。

这里还涉及到一个 TCP 拥塞算法的问题,你可以用下面的命令查看本机提供的拥塞算法控制模块:

sysctl net.ipv4.tcp_available_congestion_control

如果没有下文提到的 htcp,hybla 算法,你可以尝试通过 modprobe 启用模块:

/sbin/modprobe tcp_htcp
/sbin/modprobe tcp_hybla

根据各位大神的实验,发现 Hybla 算法恰好是最适合美国服务器的 TCP 拥塞算法:

# 设置 TCP 拥塞算法为 hybla
net.ipv4.tcp_congestion_control=hybla

修改保存后,使用sysctl -p来使修改生效。

修改limit.conf

为了提高TCP连接数性能,我们需要修改limit.conf中的参数,在最末尾添加以下两行:

* soft nofile 51200
* hard nofile 51200

保存即可,开启Shadowsocks服务之前,需要运行ulimit -n 51200此命令。

效果

在经过以上的设置过后,使用监控软件得到的TCP链接状态应该接近于下面图示:
[attach]309676[/attach]