使用tcp_hybla算法提高国外VPS访问速度


现在国外的VPS都是白菜价了,但是性能和稳定性却各有千秋。最近打算开一个性能好的VPS比如DO,然后用SS自己搭建一个VPN用。在搜集教程的时候,发现有人说DO开了VPS速度并不好,连720P的YOUTUBE都卡,后来有人提醒说由于国际带宽有限,造成720P卡顿的原因是TCP拥堵。所以才有了下面这个小教程,就是启用TCP_HYBLA模块,开解决TCP拥堵的问题。DigitalOcean、RamNode和BlueVM的KVM都可以正常加载此模块。

加载tcp_hybla模块

首先,OpenVZ的VPS可以不用继续了。对内核的操作权限太低,没法添加相关模块。建议使用KVM。
加载tcp_hybla模块(OpenVZ在这一步就会报错):
/sbin/modprobe tcp_hybla
然后查看是否已经正常加载:
lsmod |grep hybla
如果你的内核版本较新,比如CentOS 6.x的2.6.32,则可以用下列命令查看当前可用的拥堵算法,里面应该有hybla了:
sysctl net.ipv4.tcp_available_congestion_control
建议想折腾的可以先买个DigitalOcean的,毕竟可以按小时计费,不浪费钱。

修改/etc/sysctl.conf

将下述内容添加入sysctl.conf文件:
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.ip_local_port_range = 10000 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
net.core.netdev_max_backlog = 250000
net.ipv4.tcp_mtu_probing=1
net.ipv4.tcp_congestion_control=hybla
保存后,可以用下面命令让设置立即生效:
sysctl -p

设置开机后自动加载tcp_hybla模块

刚才第一步里加载的模块只是暂时的,开机后还得重新加载。怎样自动加载呢?
以CentOS为例,在/etc/sysconfig/modules目录下添加一个hybla.modules文件,并且写入以下内容:
#!/bin/sh
/sbin/modprobe tcp_hybla
然后设置下可执行属性,以便于系统在开机时自动执行:
chmod +x hybla.modules

测试

  • 本优化对普通网页浏览估计效果不大,可以搭个使用tcp协议的梯子,比如tcp版的openvpn,以及近年来的新秀ss(我用的nodejs版),访问下youtube视频吧!下面是我在几个VPS上的测试结果,因为各人网络情况不同,仅供参考:
  • DigitalOcean和RamNode: 稍微有所改善,不过不明显。顶多是从连480p都看不了变成了能看480p。
  • BlueVM:在我这里非常给力,优化前后差别较大。之前只能卡卡地看480p甚至320p,现在720p毫无压力,看1080p速度也能接受。如果不是这家的老板爱折腾,黑历史比较多,我就直接把博客直接迁移到BlueVM了,还便宜。
  • 目前安心做站还是得找个靠谱的idc,Hostigation就挺不错的。BlueVM只适合买来折腾,没多大用。
  • 顺便提一下吧,最近比较靠谱、口碑比较好的VPS商家顺序:Linode>DigitalOcean>VULTR