原文: http://cenwj.com/2015/2/25/19
本文参考文章为:
优化Linux下的内核TCP参数来提高服务器负载能力
Linux Tuning
本文所面对的情况为:
- 高并发数
- 高延迟高丢包(典型的美国服务器)
值得注意的是,因为openvz的VPS权限比较低,能够修改的地方比较少,所以使用openvz的VPS作VPN服务器是非常不推荐的。
我们通过修改 /etc/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 = 0 |
#表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭; |
net.ipv4.tcp_fin_timeout = 30 |
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文注释吧……感觉我翻译出来各种味道不对 = =:
# increase TCP max buffer size settable using setsockopt() |
net.core.rmem_max = 67108864 |
net.core.wmem_max = 67108864 |
# increase Linux autotuning TCP buffer limit |
net.ipv4.tcp_rmem = 4096 87380 67108864 |
net.ipv4.tcp_wmem = 4096 65536 67108864 |
# increase the length of the processor input queue |
net.core.netdev_max_backlog = 250000 |
# recommended for hosts with jumbo frames enabled |
net.ipv4.tcp_mtu_probing=1 |
这里面涉及到一个TCP拥塞算法的问题,你可以用下面的命令查看本机提供的拥塞算法控制模块:
sysctl net.ipv4.tcp_available_congestion_control |
如果没有下文提到的htcp,hybla算法,你可以尝试通过modprobe启用模块:
对于几种算法的分析,详情可以参考下:TCP拥塞控制算法 优缺点 适用环境 性能分析,但是这里面没有涉及到专门为卫星通讯设计的拥塞控制算法:Hybla。根据各位大神的实验,我们发现Hybla算法恰好是最适合美国服务器的TCP拥塞算法,而对于日本服务器,个人想当然的认为htcp算法应该可以比默认的cubic算法达到更好的效果。但是因为htcp算法恰好没有编入我们所使用的VPS中,所以没办法测试。
net.ipv4.tcp_congestion_control=hybla
|
- jmeter之如何减负-实现稳定超高并发测试(性能调优)之正确添加监听器
jmeter之如何减负-实现稳定超高并发测试(性能调优)在测试过程中,初学者使用工具不当,添加众多监控组件,非常想看到实时报告,跑不了一会,jmeter就卡死,只得重启 下面来总结下如何正确使用jme ...
- [转]linux tcp/ip调优
LINUX tcp/ip性能调优 On 2011年03月15日, in linux, tips, by netoearth 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接 ...
- Linux TCP/IP调优参数 /proc/sys/net/目录
所有的TCP/IP调优参数都位于/proc/sys/net/目录. 例如, 下面是最重要的一些调优参数,后面是它们的含义: /proc/sys/net/core/rmem_default " ...
- 20个Linux服务器性能调优技巧
Linux是一种开源操作系统,它支持各种硬件平台,Linux服务器全球知名,它和Windows之间最主要的差异在于,Linux服务器默认情况下一般不提供GUI(图形用户界面),而是命令行界面,它的主要 ...
- Linux TCP/IP调优-Linux内核参数注释
固定文件的内核参数 下列文件所在目录: /proc/sys/net/ipv4/ 名称 默认值 建议值 描述 tcpsyn_retries 5 1 对于一个新建连接,内核要发送多少个SYN连接请求才决定 ...
- [转]20个你不得不知的Linux服务器性能调优技巧
Linux是一种开源操作系统,它支持各种硬件平台,Linux服务器全球知名,它和Windows之间最主要的差异在于,Linux服务器默认情况下一般不提供GUI(图形用户界面),而是命令行界面,它的主要 ...
- linux的性能调优
单机调优: 分析性能瓶颈的原因,解决它. cpu子系统 内存子系统 IO子系统 网络系统 @cpu子系统调优 cpu技术指标 xeon E5520 2.27GHz 8192kb # c ...
- linux下改动内核參数进行Tcp性能调优 -- 高并发
前言: Tcp/ip协议对网络编程的重要性,进行过网络开发的人员都知道,我们所编写的网络程序除了硬件,结构等限制,通过改动Tcp/ip内核參数也能得到非常大的性能提升, 以下就列举一些Tcp/ip内核 ...
- Linux内存 性能调优
内存是影响Linux性能的主要因素之一,内存资源的充足与否直接影响应用系统的使用性能. free命令:监控Linux内存使用状况. 由上图可知,空闲内存是free+buffers+cached=155 ...
随机推荐
- Git的搭建和使用技巧完整精华版
[Git使用技巧] 1.把一个已经存在于版本库中的文件加入忽略提交文件(.gitignore)中,需要如下代码: git rm --cached [文件路径] 例如: git rm --cached ...
- jquery.rotate.js库中的rotate函数怎么用。
rotate是jQuery旋转rotate插件,支持Internet Explorer 6.0+ .Firefox 2.0 .Safari 3 .Opera 9 .Google Chrome,高级浏览 ...
- ACM题目————STL练习之字符串替换
描述 编写一个程序实现将字符串中的所有"you"替换成"we" 输入 输入包含多行数据 每行数据是一个字符串,长度不超过1000 数据以EOF结束 输出 对于输 ...
- YTU 2974: C语言习题5.26--文件操作3
2974: C语言习题5.26--文件操作3 时间限制: 1 Sec 内存限制: 128 MB 提交: 213 解决: 92 题目描述 文本文件score.dic 中存储了n名学生的信息(班级编号 ...
- thinkphp和uploadfiy
上传页面 用的是bootstrap <div class="col-sm-6"> <div style="width: 200px; height: 1 ...
- 一些常用的SQL查询语句
学习网站:http://www.w3cschool.cc/sql/sql-tutorial.html 一:查询所有表的属性 SELECT 'ALTER TABLE '+ CASE WHEN O.sch ...
- Python学习笔记-Day2-Python基础之元组操作
元组的常用操作包括但不限于以下操作: 元组的索引,计数等 这里将对列表的内置操作方法进行总结归纳,重点是以示例的方式进行展示. 使用type获取创建对象的类 type(tuple) 使用dir获取类的 ...
- 2016 ACM/ICPC Asia Regional Qingdao Online HDU5882
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5882 解法:一个点必须出度和入度相同就满足题意,所以加上本身就是判断奇偶性 #include<std ...
- java实现按拼音排序名称
private static String[] nameArray = {"张三","李四","王二","付火"}; @ ...
- Maven向本地仓库导入官方仓库没有的jar包
最近工程中需要用到JNotify Java包,可是在Maven公共仓库中没有找到该jar文件,下面是一个补救的办法. 以jnotify-0.94.jar为例: 需要用到Maven如下命令: mvn i ...