其实主要是手里面的跑openvpn服务器 。因为并没有明文禁p2p(哎……想想那么多流量好像不跑点p2p也跑不完) , 所以造成有的时候如果有比较多人跑BT的话 , 会造成VPN速度急剧下降 。
本文所面对的情况为:
高并发数
高延迟高丢包(典型的美国服务器)
值得注意的是 , 因为openvz的VPS权限比较低 , 能够修改的地方比较少 , 所以使用openvz的VPS作VPN服务器是非常不推荐的 。
我们通过修改 /etc/sysctl.conf 来达到调整的目的 , 注意修改完以后记得使用:
sysctl -p
来使修改生效 。
首先 , 针对高并发数 , 我们需要提高一些linux的默认限制:
fs.file-max = 51200
#提高整个系统的文件限制
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 = 0
#表示开启TCP连接中TIME-WAIT sockets的快速回收 , 默认为0 , 表示关闭;
#为了对NAT设备更友好 , 建议设置为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将立刻被清除并打印警告信息 。
#额外的 , 对于内核版本新于**3.7.1**的 , 我们可以开启tcp_fastopen:
net.ipv4.tcp_fastopen = 3
其次 , 针对大流量高丢包高延迟的情况 , 我们通过增大缓存来提高 TCP 性能 , 自己看E文注释吧……感觉我翻译出来各种味道不对 = =:

文章插图
这里面涉及到一个 TCP 拥塞算法的问题 , 你可以用下面的命令查看本机提供的拥塞算法控制模块:
sysctl net.ipv4.tcp_available_congestion_control
如果没有下文提到的htcp,hybla算法 , 你可以尝试通过modprobe启用模块:
/sbin/modprobe tcp_htcp
/sbin/modprobe tcp_hybla
对于几种算法的分析 , 详情可以参考下: TCP拥塞控制算法 优缺点 适用环境 性能分析 , 但是这里面没有涉及到专门为卫星通讯设计的拥塞控制算法:Hybla 。根据各位大神的实验 , 我们发现Hybla算法恰好是最适合美国服务器的 TCP 拥塞算法 , 而对于日本服务器 , 个人想当然的认为htcp算法应该可以比默认的cubic算法达到更好的效果 。但是因为htcp算法恰好没有编入我们所使用的VPS中 , 所以没办法测试 。
#设置 TCP 拥塞算法为 hybla
net.ipv4.tcp_congestion_control=hybla
Tcp性能调优 解决Tcp长延时根据Tcp的理论计算 , Tcp最佳状态下传输是流水并行的 , 传输时间等于传输数据耗时+TTL , 即千兆网卡的环境下
传输1MB数据需要: 1000ms/100MB*1MB+TTL=10ms+TTL , 同机房传输1MB耗时10毫秒 , 跨机房理论耗时14毫秒
传输4MB数据需要: 1000ms/100MB*4MB+TTL=40ms+TTL , 同机房传输4MB需要耗时40毫秒 , 跨机房理论耗时44毫秒
在我的生产环境 , 同机房的两个机器之间ping耗时0.15毫秒;两个机器之间读1MB数据和4MB的数据延时极度不稳定 , 在10毫秒~300毫秒之间波动 。
另外一个跨机房使用了专线的环境 , 两台机器之间ping耗时4毫秒 , 但两个机器之间读1MB数据和4MB的数据延时也极度不稳定 , 在40毫秒~500毫秒之间波动 。
这个现象看起来就像:网卡压力小时性能差 , 网卡压力大时性能反而好 。
推荐阅读
- 为什么水龙头的水突然小了,自来水出水量大小和水龙头有关吗
- 一个排风扇一天用多少电 排风扇耗电量大不大
- 千万级 高并发“秒杀”架构设计
- 淘宝店铺怎么提高流量和销量 淘宝新店如何提高销量
- 汽车排量大小的区别
- 空气能热水器耗电量大吗,空气能热水器要长期通电吗
- 阿里架构师教你处理高并发:2种方法,解决Redis和Mysql一致性
- 梦见被交警开罚单周公解梦 梦见被交警开罚单并发生争执
- 高并发之API接口,分布式,防刷限流,如何做?
- 如何模拟超过 5 万用户的并发访问?
