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參数时我们一定要依据自己的实际需求以及測试结果来决定。
$(function () {
$('pre.prettyprint code').each(function () {
var lines = $(this).text().split('\n').length;
var $numbering = $('
$(this).addClass('has-numbering').parent().append($numbering);
for (i = 1; i ').text(i));
};
$numbering.fadeIn(1700);
});
});
linux下改动内核參数进行Tcp性能调优 -- 高并发的更多相关文章
- [转载] 高流量大并发Linux TCP 性能调优
原文: http://cenwj.com/2015/2/25/19 本文参考文章为: 优化Linux下的内核TCP参数来提高服务器负载能力 Linux Tuning 本文所面对的情况为: 高并发数 高 ...
- Linux下Tomcat VM參数改动
不可行的方法 最初我直接改动catalina.sh, 将JAVA_OPTS变量加上了 -server -Xms1G -Xmx1G -XX:+UserG1GC 最初看起来没啥问题,可是当服务器运行几天后 ...
- linux性能调优概述
- 什么是性能调优?(what) - 为什么需要性能调优?(why) - 什么时候需要性能调优?(when) - 什么地方需要性能调优?(where) - 什么人来进行性能调优?(who) - 怎么样 ...
- Linux下的内核测试工具——perf使用简介
Perf是Linux kernel自带的系统性能优化工具.Perf的优势在于与Linux Kernel的紧密结合,它可以最先应用到加入Kernel的new feature.pef可以用于查看热点函数, ...
- linux kernel的cmdline參数解析原理分析
利用工作之便,今天研究了kernel下cmdline參数解析过程.记录在此.与大家共享.转载请注明出处.谢谢. Kernel 版本:3.4.55 Kernel启动时会解析cmdline,然后依据这些參 ...
- eclipse集成tomcat改动字符集參数
问题: 在eclipse 4.4(Luna)中集成tomcat时,直接改动原tomcat文件夹中的配置文件,不起作用. 有时.我们会修改字符集參数为utf-8,以解决中文乱码问题,修改之后依旧乱码-- ...
- Linux下查看内核、CPU、内存及各组件版本的命令和方法
Linux下查看内核.CPU.内存及各组件版本的命令和方法 Linux查看内核版本: uname -a more /etc/*release ...
- Linux 下 简单客户端服务器通讯模型(TCP)
原文:Linux 下 简单客户端服务器通讯模型(TCP) 服务器端:server.c #include<stdio.h> #include<stdlib.h> #include ...
- [转]linux tcp/ip调优
LINUX tcp/ip性能调优 On 2011年03月15日, in linux, tips, by netoearth 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接 ...
随机推荐
- [Python]网络爬虫(十):一个爬虫的诞生全过程(以山东大学绩点运算为例)
先来说一下我们学校的网站: http://jwxt.sdu.edu.cn:7777/zhxt_bks/zhxt_bks.html 查询成绩需要登录,然后显示各学科成绩,但是只显示成绩而没有绩点,也就是 ...
- QT4和QT3的区别
著名的QT库前一阵子升级到4.xx版本了,我目前在开发的一个基于QT3的软件,由于受到QThread的各种困扰,因此打算尝试将代码升级到QT4, 但是当我实际开始升级工作后,才发现QT3和QT4的变化 ...
- hdu1532(最大流)
传送门:Drainage Ditches 题意:给出n个河流,m个点,以及每个河流的流量,求从1到m点的最大流量. 分析:网络流入门题,第一次写按照白书上毫无优化的Ford_fulkerson算法,先 ...
- php 多进程中的信号问题
1.以下代码sleep时间远小于20 <?php // 当子进程退出时,会触发该函数 function sig_handler($sig) { switch($sig) { case SIGCH ...
- APPCAN学习笔记001---app高速开发AppCan.cn平台概述
1.APPCAN学习笔记---app高速开发AppCan.cn平台概述 1. 平台概述 技术qq交流群:JavaDream:251572072 AppCan.cn开发平台是基于HTML5技术的跨平台移 ...
- 服务器编程入门(2)IP协议详解
问题聚焦: IP协议是TCP/IP协议族的核心协议,也是socket网络编程的基础之一.这里从两个方面较为深入地探讨IP协议: 1,IP头部信息(指定IP通信的源端IP地址,目的端IP ...
- JSP网站开发基础总结《九》(转)
本篇属于附加篇,在之前的总结中给大家提到过一个关于登录状态验证的效果,当时是通过Session对象完成的,今天我查了一下,JSP为我们封装了一个用于过滤用的过滤器类Filter,通过它我们就可以非常轻 ...
- 谈Web应用系统的可维护性
每一个软件开发人员都十分清楚, 当软件构建得越来越复杂时, 可维护性就成了一个很突出的问题. 如何在构造软件系统的过程中始终保持可控制的可维护性呢? 一. 整体组织 ...
- BNUOJ34973Liserious战队
Liserious战队 Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld Java class ...
- gdb学习(一个)[再版]
概要 gdb是GNU debugger的缩写,是编程调试工具. 功能 1.启动程序,能够依照用户自己定义的要求随心所欲的执行程序. 2.可让被调试的程序在用户所指定的断点处停住 (断点能够是条件表达式 ...