转载自 :http://hong.im/2013/04/20/linux-tcp-tuning/
呃……标题比较隐晦。其实主要是手里面的跑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文注释吧……感觉我翻译出来各种味道不对 = =:
# 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启用模块:
/sbin/modprobe tcp_htcp
/sbin/modprobe tcp_hybla
对于几种算法的分析,详情可以参考下:TCP拥塞控制算法 优缺点 适用环境 性能分析,但是这里面没有涉及到专门为卫星通讯设计的拥塞控制算法:Hybla。根据各位大神的实验,我们发现Hybla算法恰好是最适合美国服务器的TCP拥塞算法,而对于日本服务器,个人想当然的认为htcp算法应该可以比默认的cubic算法达到更好的效果。但是因为htcp算法恰好没有编入我们所使用的VPS中,所以没办法测试。
#设置TCP拥塞算法为 hybla
net.ipv4.tcp_congestion_control=hybla
更新:2014-06-22 修改TW快速回收的问题以更好的兼容移动设备。
相关推荐
高性能的CPU能提供更快的计算速度,大容量内存可以减少磁盘I/O,SSD硬盘则能提高数据读写速度。同时,根据业务负载类型,合理分配硬件资源,例如内存与CPU的比例、磁盘RAID配置等,也是优化服务器性能的关键。 其次...
### Linux高性能服务器编程知识点概述 #### 一、TCP/IP协议详解 - **TCP/IP协议族**: TCP/IP协议族是互联网的基础协议集,包含了多种不同功能的协议,如TCP(传输控制协议)、UDP(用户数据报协议)、ICMP...
通过以上对虚拟网络性能调优的技术总结,可以看出,无论是从传统的Linux网络数据包处理流程出发,还是深入探讨虚拟化环境下的各种技术改进,乃至DPDK等高性能框架的应用,都有助于显著提高虚拟网络的整体性能。...
- 原因分析:较大的值可以帮助处理高并发连接请求,但会占用更多的内存资源。 **17. 窗口缩放** - 参数名:`tcp_window_scaling` - 默认值:1 - 功能描述:是否开启TCP窗口缩放功能。 - 推荐值:1 - 原因分析...
《Linux高性能服务器编程》这本书是针对那些希望深入理解如何在Linux操作系统上构建高效、稳定、可扩展服务器应用程序的开发者和系统管理员的专业指南。书中涵盖了从基础到高级的多个主题,旨在帮助读者掌握Linux...
### 通过Linux Sysctl进行系统调优 #### Sysctl参数详解与优化建议 在Linux操作系统中,`sysctl`是一个非常强大的...通过上述步骤,可以有效地利用`sysctl`参数对Linux系统进行调优,提升系统的整体性能和稳定性。
在构建高性能高并发的Web服务器架构时,我们需要关注多个关键领域,这些领域涵盖了系统设计、网络优化、数据库处理、负载均衡、缓存策略以及代码效率等多个方面。以下是对这两个PDF文档主题的详细解读: 1. **系统...
Linux内核参数调优是优化服务器性能的关键环节,特别是在硬件资源有限的情况下,通过调整内核参数可以有效地提高服务器的并发处理能力。对于Web服务器,如Nginx和Apache,它们的并发模型对于处理高负载至关重要。...
3. **网络调优**:网络性能优化涉及TCP/IP堆栈的参数调整,如增加`net.core.somaxconn`提升并发连接能力,调整`net.ipv4.tcp_timestamps`和`net.ipv4.tcp_sack`改善TCP性能。此外,还可以根据应用需求调整内核的网络...
#### 七、Linux下高并发系统内核优化 - **内核参数调优**: - 调整内核参数以适应高并发场景。 - 如调整文件描述符数量、TCP连接数等。 - **内存管理优化**: - 通过优化内存分配策略提升系统响应能力。 - 如减少...
同时,还会介绍网络性能调优的方法,如TCP缓冲区大小调整、队列管理策略优化等,以提升网络系统的整体效率。 总的来说,《深入理解Linux网络技术内幕》是一本全面而深入的Linux网络指南,它不仅适合初学者系统学习...
他们需要了解如何根据业务需求规划和调整架构,以支持大流量、大并发的业务场景。 4. **故障排查与解决**:当出现大型故障时,运维工程师需快速定位问题,分析原因并提出解决方案,以减少业务中断时间。 5. **自动...
在很多场景下,Nginx被用作替代Apache服务器的选择,尤其是在高流量网站和需要负载均衡的环境中。本实战指南旨在探讨如何通过Nginx实现高性能的Web服务,以提升网站的响应速度和稳定性。 一、Nginx与Apache的性能...
在Linux系统中,性能分析涉及到多个层面,包括CPU利用率、内存管理、进程监控、网络流量以及磁盘I/O等。以下是对这些核心知识点的详细说明: 1. **CPU利用率指标**: - **user%**:表示CPU执行用户进程的时间占比...
网络游戏通常依赖于TCP协议,因为它提供可靠的数据传输,但TCP的拥塞控制机制可能导致较高的延迟。为了优化网络性能,可以使用TCP快速打开(TCP Fast Open, TFO)技术减少三次握手的开销,或者使用TCP BBR(Bottle...
Katran是由Facebook开源的一款高性能的第4层网络负载均衡器,专为处理大规模网络流量而设计。这个项目的核心是利用了C++编程语言以及内核的eXpress Data Path (XDP)技术,旨在实现高效的四层(TCP/UDP)负载均衡。...
对于高流量站点或独立部署场景,推荐按照CPU核心数分配,例如使用 `worker_processes auto;` 自动根据CPU核心数进行配置。手动配置时,可通过 `/proc/cpuinfo` 文件获取核心数,并相应地调整 `worker_processes` ...
13. 性能调优:研究TCP/IP栈、内存管理、I/O操作等相关知识,优化系统参数以提高Web服务响应速度。 14. 缓存技术:学习Memcached和Redis等缓存系统,减轻数据库压力,提升应用性能。 15. 日志分析:通过Logrotate...
UDT旨在提供类似TCP的可靠性和拥塞控制,但同时保持UDP的低延迟和高吞吐量特性,这使得UDT特别适合于大数据传输、实时流媒体和高性能计算等领域。 UDT-C是UDT协议的C语言实现版本,它提供了C语言接口,方便开发者在...