linux下改动内核參数进行Tcp性能调优 -- 高并发

前言:

Tcp/ip协议对网络编程的重要性,进行过网络开发的人员都知道,我们所编写的网络程序除了硬件,结构等限制,通过改动Tcp/ip内核參数也能得到非常大的性能提升,

以下就列举一些Tcp/ip内核參数,解释它们的含义并通过改动来它们来优化我们的网络程序,主要是针对高并发情况。

这里网络程序主要指的是server端


1. fs.file-max

最大能够打开的文件描写叙述符数量。注意是整个系统。

在server中。我们知道每创建一个连接,系统就会打开一个文件描写叙述符,所以,文件描写叙述符打开的最大数量也决定了我们的最大连接数

select在高并发情况下被代替的原因也是文件描写叙述符打开的最大值,尽管它能够改动但一般不建议这么做,详情可见unp select部分。


2.net.ipv4.tcp_max_syn_backlog

Tcp syn队列的最大长度,在进行系统调用connect时会发生Tcp的三次握手,server内核会为Tcp维护两个队列。Syn队列和Accept队列,Syn队列是指存放完毕第一次握手的连接。Accept队列是存放完毕整个Tcp三次握手的连接,改动net.ipv4.tcp_max_syn_backlog使之增大能够接受很多其它的网络连接。

注意此參数过大可能遭遇到Syn flood攻击,即对方发送多个Syn报文端填充满Syn队列,使server无法继续接受其它连接

可參考此文http://tech.uc.cn/?p=1790


3.net.ipv4.tcp_syncookies

改动此參数能够有效的防范上面所说的syn flood攻击

原理:在Tcpserver收到Tcp Syn包并返回Tcp Syn+ack包时,不专门分配一个数据区。而是依据这个Syn包计算出一个cookie值。

在收到Tcp ack包时,Tcpserver在依据那个cookie值检查这个Tcp ack包的合法性。假设合法,再分配专门的数据区进行处理未来的TCP连接。

默觉得0。1表示开启


4.net.ipv4.tcp_keepalive_time

Tcp keepalive心跳包机制。用于检測连接是否已断开。我们能够改动默认时间来间断心跳包发送的频率。

keepalive通常是server对client进行发送查看client是否在线。由于server为client分配一定的资源。可是Tcp 的keepalive机制非常有争议。由于它们可耗费一定的带宽。

Tcp keepalive详情见Tcp/ip具体解释卷1 第23章


5.net.ipv4.tcp_tw_reuse

我的上一篇文章中写到了time_wait状态,大量处于time_wait状态是非常浪费资源的,它们占用server的描写叙述符等。

改动此參数。同意重用处于time_wait的socket。

默觉得0,1表示开启


6.net.ipv4.tcp_tw_recycle

也是针对time_wait状态的,该參数表示高速回收处于time_wait的socket。

默觉得0,1表示开启


7.net.ipv4.tcp_fin_timeout

改动time_wait状的存在时间。默认的2MSL

注意:time_wait存在且生存时间为2MSL是有原因的。见我上一篇博客为什么会有time_wait状态的存在。所以改动它有一定的风险,还是依据具体的情况来分析。


8.net.ipv4.tcp_max_tw_buckets

所同意存在time_wait状态的最大数值,超过则立马被清楚而且警告。


9.net.ipv4.ip_local_port_range

表示对外连接的端口范围。


10.somaxconn

前面说了Syn队列的最大长度限制,somaxconn參数决定Accept队列长度,在listen函数调用时backlog參数即决定Accept队列的长度,该參数太小也会限制最大并发连接数,由于同一时间完毕3次握手的连接数量太小,server处理连接速度也就越慢。server端调用accept函数实际上就是从已连接Accept队列中取走完毕三次握手的连接。

Accept队列和Syn队列是listen函数完毕创建维护的。

/proc/sys/net/core/somaxconn改动



上面每个參数事实上都够写一篇文章来分析了,这里我仅仅是概述下部分參数,注意在改动Tcp參数时我们一定要依据自己的实际需求以及測试结果来决定。



參考博客:

http://cenwj.com/2015/2/25/19

时间: 2024-08-03 02:58:05

linux下改动内核參数进行Tcp性能调优 -- 高并发的相关文章

linux下修改内核参数进行Tcp性能调优 -- 高并发

前言: Tcp/ip协议对网络编程的重要性,进行过网络开发的人员都知道,我们所编写的网络程序除了硬件,结构等限制,通过修改Tcp/ip内核参数也能得到很大的性能提升, 下面就列举一些Tcp/ip内核参数,解释它们的含义并通过修改来它们来优化我们的网络程序,主要是针对高并发情况. 这里网络程序主要指的是服务器端 1. fs.file-max 最大可以打开的文件描述符数量,注意是整个系统. 在服务器中,我们知道每创建一个连接,系统就会打开一个文件描述符,所以,文件描述符打开的最大数量也决定了我们的最

[转载] 高流量大并发Linux TCP 性能调优

原文: http://cenwj.com/2015/2/25/19 本文参考文章为: 优化Linux下的内核TCP参数来提高服务器负载能力 Linux Tuning 本文所面对的情况为: 高并发数 高延迟高丢包(典型的美国服务器) 值得注意的是,因为openvz的VPS权限比较低,能够修改的地方比较少,所以使用openvz的VPS作VPN服务器是非常不推荐的. 我们通过修改 /etc/sysctl.conf 来达到调整的目的,注意修改完以后记得使用: sysctl -p 来使修改生效. 首先,针

Linux下Tomcat VM參数改动

不可行的方法 最初我直接改动catalina.sh, 将JAVA_OPTS变量加上了 -server -Xms1G -Xmx1G -XX:+UserG1GC 最初看起来没啥问题,可是当服务器运行几天后,发现运行shutdown.sh无法关闭tomcat, 错误信息例如以下: # [email protected]:~/projects/taolijie# cat hs_err_pid5519.log # There is insufficient memory for the Java Runt

Linux下的内核测试工具——perf使用简介

Perf是Linux kernel自带的系统性能优化工具.Perf的优势在于与Linux Kernel的紧密结合,它可以最先应用到加入Kernel的new feature.pef可以用于查看热点函数,查看cashe miss的比率,从而帮助开发者来优化程序性能. 1.perf的安装 由于我们经常是在自己编译的内核上进行开发工作,这里需要有包含调式信息的内核启动镜像文件vmlinux,在自定义内核的基础之上,进入linux内核源码,linux/tools/perf make make instal

linux kernel的cmdline參数解析原理分析

利用工作之便,今天研究了kernel下cmdline參数解析过程.记录在此.与大家共享.转载请注明出处.谢谢. Kernel 版本:3.4.55 Kernel启动时会解析cmdline,然后依据这些參数如console root来进行配置执行. Cmdline是由bootloader传给kernel.如uboot.将须要传给kernel的參数做成一个tags链表放在ram中,将首地址传给kernel,kernel解析tags来获取cmdline等信息. Uboot传參给kernel以及kerne

Linux下的内核编译与模块操作

Linux下的内核编译与模块操作 一:实验环境 1):虚拟机 2):linux系统 3):linux系统的硬盘的空余空间要大于7G 4):虚拟机的内存要大于2.5G以上 二:实验目标 1):源码编译Linux内核 2):使用Linux内核模块 3):实战-编译一个NTFS内核模块,实现linux挂载NTFS文件系统并实现读写功能 三:实验脚本 第一块 --源码编译Linux内核 linux系统与windows系统是两种截然不同的系统,windows系统中的软件都是需要付费的,而linux系统中的

Linux 下 简单客户端服务器通讯模型(TCP)

原文:Linux 下 简单客户端服务器通讯模型(TCP) 服务器端:server.c #include<stdio.h> #include<stdlib.h> #include<errno.h> #include<string.h> #include<sys/socket.h> #include<sys/types.h> #include <stdio.h> #include <unistd.h> #inclu

Hadoop作业性能指标及參数调优实例 (二)Hadoop作业性能调优7个建议

作者:Shu, Alison Hadoop作业性能调优的两种场景: 一.用户观察到作业性能差,主动寻求帮助. (一)eBayEagle作业性能分析器 1. Hadoop作业性能异常指标 2. Hadoop作业性能调优7个建议 (二)其他參数调优方法 二.Hadoop集群报告异常,发现个别作业导致集群事故. 一.用户观察到作业性能差,主动寻求帮助. (一)eBay Eagle作业性能分析器 对一般作业性能调优.eBay Eagle[i]的作业性能分析器已经能满足用户大部分需求. eBayEagle

Linux TCP/IP调优参数 /proc/sys/net/目录

所有的TCP/IP调优参数都位于/proc/sys/net/目录. 例如, 下面是最重要的一些调优参数,后面是它们的含义: /proc/sys/net/core/rmem_default "110592" 定义默认的接收窗口大小:对于更大的 BDP 来说,这个大小也应该更大. /proc/sys/net/core/rmem_max "110592" 定义接收窗口的最大大小:对于更大的 BDP 来说,这个大小也应该更大. /proc/sys/net/core/wmem