Linux内核怎么优化,linux 内核该怎么优化

Linux系统下,TCP连接断开后,会以TIME_WAIT状态保留一定的时间,然后才会释放端口。当并发请求过多的时候,就会产生大量的TIME_WAIT状态的连接,无法及时断开的话,会占用大量的端口资源和服务器资源。这个时候我们可以优化TCP的内核参数,来及时将TIME_WAIT状态的端口清理掉。

本文介绍的方法只对拥有大量TIME_WAIT状态的连接导致系统资源消耗有效,如果不是这种情况下,效果可能不明显。可以使用netstat命令去查TIME_WAIT状态的连接状态,输入下面的组合命令,查看当前TCP连接的状态和对应的连接数量:#netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’这个命令会输出类似下面的结果:LAST_ACK 16SYN_RECV 348ESTABLISHED 70FIN_WAIT1 229FIN_WAIT2 30CLOSING 33TIME_WAIT 18098我们只用关心TIME_WAIT的个数,在这里可以看到,有18000多个TIME_WAIT,这样就占用了18000多个端口。要知道端口的数量只有65535个,占用一个少一个,会严重的影响到后继的新连接。这种情况下,我们就有必要调整下Linux的TCP内核参数,让系统更快的释放TIME_WAIT连接。用vim打开配置文件:#vim /etc/sysctl.conf

在这个文件中,加入下面的几行内容:

组1:

###########################################################################################net.ipv4.tcp_syncookies = 1net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_recycle = 1net.ipv4.tcp_fin_timeout = 30

输入下面的命令,让内核参数生效:#sysctl -p

简单的说明上面的参数的含义:

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 = 1#表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭;net.ipv4.tcp_fin_timeout#修改系統默认的 TIMEOUT 时间。

在经过这样的调整之后,除了会进一步提升服务器的负载能力之外,还能够防御小流量程度的DoS、CC和SYN***。

############################################################################################

此外,如果你的连接数本身就很多,我们可以再优化一下TCP的可使用端口范围,进一步提升服务器的并发能力。依然是往上面的参数文件中,加入下面这些配置:

组2:

############################################################################################net.ipv4.tcp_keepalive_time = 1200net.ipv4.ip_local_port_range = 10000 65000net.ipv4.tcp_max_syn_backlog = 8192net.ipv4.tcp_max_tw_buckets = 5000#这几个参数,建议只在流量非常大的服务器上开启,会有显著的效果。一般的流量小的服务器上,没有必要去设置这几个参数。

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 = 6000#表示系统同时保持TIME_WAIT的最大数量,如果超过这个数字,TIME_WAIT将立刻被清除并打印警告信息。默 认为180000,改为6000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于Squid,效果却不大。此项参数可以控制TIME_WAIT的最大数量,避免Squid服务器被大量的TIME_WAIT拖死。

############################################################################################

内核其他TCP参数说明:net.ipv4.tcp_max_syn_backlog = 65536#记录的那些尚未收到客户端确认信息的连接请求的最大值。对于有128M内存的系统而言,缺省值是1024,小内存的系统则是128。net.core.netdev_max_backlog = 32768#每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。net.core.somaxconn = 32768#web应用中listen函数的backlog默认会给我们内核参数的net.core.somaxconn限制到128,而nginx定义的NGX_LISTEN_BACKLOG默认为511,所以有必要调整这个值。

net.core.wmem_default = 8388608net.core.rmem_default = 8388608net.core.rmem_max = 16777216           #最大socket读buffer,可参考的优化值:873200net.core.wmem_max = 16777216           #最大socket写buffer,可参考的优化值:873200net.ipv4.tcp_timestsmps = 0#时间戳可以避免序列号的卷绕。一个1Gbps的链路肯定会遇到以前用过的序列号。时间戳能够让内核接受这种“异常”的数据包。这里需要将其关掉。net.ipv4.tcp_synack_retries = 2#为了打开对端的连接,内核需要发送一个SYN并附带一个回应前面一个SYN的ACK。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK包的数量。net.ipv4.tcp_syn_retries = 2#在内核放弃建立连接之前发送SYN包的数量。#net.ipv4.tcp_tw_len = 1net.ipv4.tcp_tw_reuse = 1# 开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接。

net.ipv4.tcp_wmem = 8192 436600 873200# TCP写buffer,可参考的优化值: 8192 436600 873200net.ipv4.tcp_rmem  = 32768 436600 873200# TCP读buffer,可参考的优化值: 32768 436600 873200net.ipv4.tcp_mem = 94500000 91500000 92700000# 同样有3个值,意思是:net.ipv4.tcp_mem[0]:低于此值,TCP没有内存压力。net.ipv4.tcp_mem[1]:在此值下,进入内存压力阶段。net.ipv4.tcp_mem[2]:高于此值,TCP拒绝分配socket。上述内存单位是页,而不是字节。可参考的优化值是:786432 1048576 1572864

net.ipv4.tcp_max_orphans = 3276800#系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,连接将即刻被复位并打印出警告信息。这个限制仅仅是为了防止简单的DoS***,不能过分依靠它或者人为地减小这个值,更应该增加这个值(如果增加了内存之后)。net.ipv4.tcp_fin_timeout = 30#如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。对端可以出错并永远不关闭连接,甚至意外当机。缺省值是60秒。2.2 内核的通常值是180秒,你可以按这个设置,但要记住的是,即使你的机器是一个轻载的WEB服务器,也有因为大量的死套接字而内存溢出的风险,FIN- WAIT-2的危险性比FIN-WAIT-1要小,因为它最多只能吃掉1.5K内存,但是它们的生存期长些。

经过这样的优化配置之后,你的服务器的TCP并发处理能力会显著提高。以上配置仅供参考,用于生产环境请根据自己的实际情况。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/530497.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

编译linux内核适用的编译器,编译Linux内核时,CC,LD和CC [M]输出的代码是什么?...

所以一般情况下,你只需要 git grep cmd.* CODE找到CODE。获取scripts/Makefile.build定义的所有代码 make | grep -E ^ | sort -uk1,1CC和CC [M]名单: quiet_cmd_cc_o_c CC $(quiet_modtag) [email protected]cmd_cc_o_c $(CC) $(c_flags) -c -o [em…

红旗linux修改个人密码,LINUX红旗5.0的用户名和密码!

怎样卸载、安装红旗linux本二,安装红旗Linux桌面版 4。0将光驱设为第一启动盘,放入第一张安装光盘后重新启动电脑,如果你的光驱支持自启动, 如无意外将出现如下图1如果不进行操作,在10秒后自动进入下一画面,显示如下图2所示一启动就能使用鼠标了,比效方便;软件协议,只能选同意,…

linux多线程九宫格,项目实战:Qt九宫格图片资源浏览器(支持window、linux、兼容各国产系统,支持子文件夹,多选,全选,图片预览,行数与列数设置等)...

需求做嵌入式设备,需求九宫格图片资源浏览器:1.设置根目录;2.可拖动;3.可设置列数与行数;4.点击文件夹可以进入文件夹;5.点击图片可以浏览图片;6.支持触摸屏上下拽拖浏览;7.支持长安…

linux mdev -s没有运行,mdev详解

一、概述mdev是busybox提供的一个工具,用在嵌入式系统中,相当于简化版的udev,作用是在系统启动和热插拔或动态加载驱动程序时,自动创建设备节点。文件系统中的/dev目录下的设备节点都是由mdev创建的。在加载驱动过程中&#xff0c…

linux x86-64下,Linux x86_64下安装Flash Player 9

家里 Linux 安装已经有几天了,可是用 Firefox 浏览网页总是看不到 Flash。到了 Adobe 官方去下载了 Flash 插件,结果安装的时候说它不支持 x86_64,安装计划就一直搁浅。天天上网看见“缺失插件”的框框,非常不爽,所以就…

window连接树莓派linux桌面,远程连接Raspberry Pi(树莓派)图形用户界面(X Window)

背景:有的时候,我们希望能远程连接一台linux的图形界面用来管理机器,这里需要用到tightvncserver和xtightvncviewer两个工具我的树莓派的ip是10.141.247.134 另一台机器为作client去链接树莓派的ip为10.141.247.121. 先在树莓派的机器上安装tightvncs…

linux小红帽系统能用微信,小红帽腾讯QQ微信登录版-小红帽腾讯版v1.0.3 安卓版-腾牛安卓网...

小红帽腾讯版是一款专为广大喜爱玩童话类手游的玩家打造的欧美风游戏,这款游戏有着最为精致的游戏画面,黑色风格的童话故事,带领玩家领略不一样的童年世界,给您带来最佳的游戏体验!小红帽腾讯版简介《小红帽》是一款改…

在linux实现公平队列,多级反馈队列调度策略在Linux中的应用和实现.pdf

多级反馈队列调度策略在Linux中的应用和实现.pdf第30卷第20期 计算机工程 2004年10月I/01.30^矗2口 ComputerEngineering October2004文t标识码tA 中强分娄号I TP311.52软件技术与数据库 文章-号tlooo-3428(2004)20—.008l—_03多…

c语言第五章作业,《C语言程序设计》第五章作业.doc

《C语言程序设计》第五章作业窗体顶端《C语言程序设计》第5章作业布置日期:2012-3-15?????截止日期:2012-3-22一、单选题 (每小题6分,共102分)?1、以下说法中正确的是____。????A、C语…

i7 5500u linux,i7 5500u相当于什么cpu

大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答。i7 5500u相当酷睿i5CPU,I7 5500U是酷睿笔记本专用CPU,是双核四线程的一款处理器,严格来说不算第五代的I7,而是全新一代的I7型号。酷睿…

c语言字符串用for语句去重,C# 实现字符串去重

方法一 注:需要.net 3.5框架的支持string s "101,102,103,104,105,101,102,103,104,105,106,107,101,108";s string.Join(",", s.Split(,).Distinct().ToArray());方法二class Program{static void Main(string[] args){string result"&…

c语言利用遍历求树高的程序,用C语言实现二叉树的遍历极其应用

用C语言实现二叉树的遍历极其应用[1]〔摘要〕:《数据结构》是计算机系学生的一门专业技术基础课程,计算机科学各领域及有关的应用软件都要用到各种数据结构。C语言有较丰富的数据类型、运算符以及函数,能直接与内存打交道,使修改、…

c语言编程出彩色告白,C语言告白代码,一闪一闪亮晶晶~

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include #include #include #define I 20#define R 340int main(){int i,j,e;int a;for(i1,aI;ifor(j(int) ( I-sqrt(I*I-(a-i)*(a-i)) );j>0;j--)printf(" ");for(e1;e<2*sqrt(I*I-(a-i)*(a-i));e)printf("…

计算机二级c语言2021年重点内容,2021年5月计算机二级C语言试题(总)

一个考生的快乐&#xff0c;不是因为他备考的时间多&#xff0c;而是因为他的选择对。选择考无忧题库&#xff0c;做二级C语言试题&#xff0c;助你备考轻松&#xff01;二级C语言试题【1】1.若有以下数组说明&#xff0c;则i10;a[a[i]]元素数值是(C)。int a[12]{1,4,7,10,2,5,…

c语言case key pres,C#程序设计B-中国大学mooc-题库零氪

第2讲 C#语言基础2.1 数据类型、变量与常量 —— 语言中的单词随堂测验1、(加号)可以表示A、算术的加法B、正号C、字符串的连接D、事件的注册()2、int是引用类型3、string是引用类型4、double在内存中占8个字节5、int占2个字节6、Person p1 new Person(18); //Person是引用类型…

c语言递归求差分方程,如何使这个简单的递推关系(差分方程)尾递归?

bytebuster的解决方案很好&#xff0c;但他没有解释他是如何创建它的&#xff0c;所以它只会帮助解决这个特定的问题。顺便说一句&#xff0c;你的公式看起来有点像斐波纳契(但不完全)&#xff0c;它可以是calculated analytically without any looping(即使没有循环隐藏在Seq.…

android text 字体设置,Android TextView个别字体格式设置小结

android 在同一个TextView中如何展现出不同的字体和颜色总结一下1.主要是痛通过String.xml使用html标签静态配置然后动态引用Html.fromHtml(getResources().getString(R.string.myHeadStr));2.textView 动态设置//创建一个 SpannableString对象 msp new SpannableString("…

android 图片合成pdf文件,教你怎么把多张图片合成一个pdf文件

当你遇到需要把多张图片合并成一个pdf文件时&#xff0c;你需要怎么做?可能有些朋友会说下载一个pdf格式转换工具&#xff0c;其实不必这么麻烦&#xff0c;你只要把文件上传到在线迅捷pdf转换器&#xff0c;就可以一站式帮你搞定pdf文件的格式转换以及一些常用的功能操作(如p…

android中的xml布局文件如何引用另一个xml布局文件,引用另一个layout.xml文件而不复制它...

如果我理解正确提问者对XLARGE和SW-600dp的一个布局文件&#xff0c;另一个用于所有的休息。无论如何&#xff0c;当我偶然发现这个问题时&#xff0c;就是这样。可以通过创建文件夹layout-xlarge和layout-s600dp来解决这个问题&#xff0c;并在每个文件夹中放置一个布局文件&a…

华为系统鸿蒙优势,华为鸿蒙2.0可以替代安卓吗,华为鸿蒙2.0优势在哪

在华为开发者大会上&#xff0c;华为消费业务CEO 余承东&#xff0c;正式发布鸿蒙OS2.0&#xff0c;并宣布华为鸿蒙OS将全面启用全场景生态&#xff0c;并将于2020年12月发布手机版。余承东还表示&#xff0c;明年&#xff0c;华为的智能手机将全面升级&#xff0c;以支持鸿蒙操…