TCP内核参数的简单验证
前言
春节假期时学习了下内核参数与nginx的调优
最近因为同事遇到问题一直没有解,自己利用晚上时间再次进行验证.
这里将几个参数的理解和验证结果简单总结一下.
希望能够在学习的过程中将问题解决掉.
其实很后悔没有好好学习代码.现在很多问题都已经到了瓶颈期
无法深入的研究下去.
参数一
- net.ipv4.tcp_max_tw_buckets
先说一下基本的结论:
CentOS默认的值: 262144
阿里云虚拟机的默认值: 5000
华为云虚拟机的默认值: 5000
腾讯云虚拟机的默认值: 131072
在简单描述一下这个参数的作用:
在 TIME_WAIT 数量等于 tcp_max_tw_buckets 时,
不会有新的 TIME_WAIT 产生。
类似 Nginx 之类的中间代理一定要关注这个值,因为它对你的系统起到一个保护的作用,
一旦端口全部被占用,服务就异常了。
tcp_max_tw_buckets 能帮你降低这种情况的发生概率,争取补救时间。
学习来源: https://www.jianshu.com/p/b7e991be0909
我这边理解就类似于 JVM里面GC over limited的处理机制相仿.
能够快速重用部分端口, 避免无端口可用无法建立新连接.
参数二
- net.ipv4.ip_local_port_range
这个参数 云计算和CentOS的默认值出奇的一致:
32768 60999
第一个参数代表随机端口的下限
第二个参数代表建立TCP连接时端口的上限
C10K甚至是C100K的很多优化里面都是需要改这个参数的
TCP是有四元素 local_ip local_port remote_ip remote_port
来唯一确认一个TCP连接的.
理论上一个TCP的LISTEN的监听端口可以建立很多个TCP连接的.
参数三
- net.ipv4.tcp_tw_reuse
个人感觉这个参数其实是存在一定风险的
可能会导致错误的TCP连接.
但是理论上 linux内核有TCP状态的检验还有TCP的序列号进行串行化处理
几乎零可能性的出现严重的数据问题.
一个简单的进行验证的脚本
echo "443:" `netstat -anop |grep tcp |grep -v LISTEN |grep -v 637 |grep -v 884 |grep -v 1521 |grep -v tcp6 |grep -v :22 |grep :443 |awk '{++state[$6]} END {for(key in state) print key,state[key]}'`
echo "5000:" `netstat -anop |grep tcp |grep -v LISTEN |grep -v 637 |grep -v 884 |grep -v 1521 |grep -v tcp6 |grep -v :22 |grep :5000 |awk '{++state[$6]} END {for(key in state) print key,state[key]}'`
echo "5200:" `netstat -anop |grep tcp |grep -v LISTEN |grep -v 637 |grep -v 884 |grep -v 1521 |grep -v tcp6 |grep -v :22 |grep :520 |awk '{++state[$6]} END {for(key in state) print key,state[key]}'`
可以定量分析不同端口的连接信息.
内核参数的验证-1
修改内核参数
sysctl -w "net.ipv4.tcp_max_tw_buckets=50000"
登录系统进行分析查看time wait的TCP数量.
[root@openeuler2203 ~]# netstat -anop |grep tcp |grep -v LISTEN |grep -v :637 |grep -v :884 |grep -v :1521 |grep -v tcp6 |grep -v :22 |grep :5200
tcp 0 0 10.110.139.230:5200 10.110.136.50:57506 TIME_WAIT - timewait (0.71/0/0)
tcp 0 0 10.110.139.230:5200 10.110.136.50:37506 TIME_WAIT - timewait (57.65/0/0)
tcp 0 0 10.110.139.230:5200 10.110.136.50:37604 TIME_WAIT - timewait (57.94/0/0)
tcp 0 0 10.110.139.230:5200 10.110.136.50:57490 TIME_WAIT - timewait (0.70/0/0)
tcp 0 0 10.110.139.230:5200 10.110.136.50:37708 TIME_WAIT - timewait (58.02/0/0)
tcp 0 0 10.110.139.230:5200 10.110.136.50:37696 TIME_WAIT - timewait (58.02/0/0)
tcp 0 0 10.110.139.230:5200 10.110.136.50:37630 TIME_WAIT - timewait (57.96/0/0)
tcp 0 0 10.110.139.230:5200 10.110.136.50:57538 TIME_WAIT - timewait (0.75/0/0)
发现会有40条 time wait的 tcp连接.
最后一列是等待终结的time wait的tcp连接 等到所有的连接都停止后再次修改内核参数
sysctl -w "net.ipv4.tcp_max_tw_buckets=10"
# 注意我这种修改仅是验证问题, 没有生产适用性.
# 注意每次测试至少要等待60秒等待之前的tcp连接终结.
再次执行登录简单测试,效果为:
[root@openeuler2203 ~]# netstat -anop |grep tcp |grep -v LISTEN |grep -v :637 |grep -v :884 |grep -v :1521 |grep -v tcp6 |grep -v :22 |grep :5200
tcp 0 0 10.110.139.230:5200 10.110.136.50:59150 ESTABLISHED 716321/nginx: worke off (0.00/0/0)
发现没有再次生成 time wait的连接
# 注意这个参数是整个操作系统所有的time_wait的连接数 不单纯是一个端口的. 所以10个肯定是不够用的.
内核参数验证-2
直接修改参数:
sysctl -w "net.ipv4.ip_local_port_range=3000 4000"
# 注意结果可以与内核参数验证-1 里面的结果进行对照.
# 注意需要修改回 bucket的数据避免测试失效.
[root@KylinV10SP3ARM64 nginx]# netstat -anop |grep tcp |grep -v LISTEN |grep -v 637 |grep -v 8848 |grep -v 1521 |grep -v tcp6 |grep -v :22 |grep 10.110.139.230
tcp 0 0 10.110.136.50:3508 10.110.139.230:5200 ESTABLISHED 3872246/nginx: work off (0.00/0/0)
tcp 0 0 10.110.136.50:31062 10.110.139.230:5200 TIME_WAIT - timewait (51.06/0/0)
注意可以再次修改一下 端口信息再次进行验证
sysctl -w "net.ipv4.ip_local_port_range=5000 5100"
测试结果为:
[root@KylinV10SP3ARM64 nginx]# netstat -anop |grep tcp |grep -v LISTEN |grep -v 637 |grep -v 8848 |grep -v 1521 |grep -v tcp6 |grep -v :22 |grep 10.110.139.230
tcp 0 0 10.110.136.50:5096 10.110.139.230:5200 ESTABLISHED 3872246/nginx: work off (0.00/0/0)
tcp 0 0 10.110.136.50:3508 10.110.139.230:5200 TIME_WAIT - timewait (55.94/0/0)
仅仅是执行了一下刷新动作.
就会看到上面一个3508 local 的本地端口开始进入time_wait状态
新建立的连接的local_port 就是 5096
sysctl -w "net.ipv4.ip_local_port_range=5000 5050"
效果也是完全一致符合猜测.
[root@KylinV10SP3ARM64 nginx]# netstat -anop |grep tcp |grep -v LISTEN |grep -v 637 |grep -v 8848 |grep -v 1521 |grep -v tcp6 |grep -v :22 |grep 10.110.139.230
tcp 0 0 10.110.136.50:5096 10.110.139.230:5200 TIME_WAIT - timewait (56.10/0/0)
tcp 0 0 10.110.136.50:5008 10.110.139.230:5200 ESTABLISHED 3872246/nginx: work off (0.00/0/0)
# 需要注意 修改改端口仅影响 第四列的本地连接信息, 不会影响第五列的外部连接信息
# 外部的需要是一个 监听端口为主.
TCP内核参数的简单验证的更多相关文章
- TCP三次握手与Linux的TCP内核参数优化
感谢各位技术大佬的资料分享,这里我把我理解的内容做一个整理 一:TCP的三次握手 1.TCP简述 TCP是一个面向连接的协议,在连接双方发送数据之前,首先需要建立一条连接.TCP建立连接可以简单称为: ...
- 修改tcp内核参数:somaxconn
修改somaxconn 该内核参数默认值一般是128(定义了系统中每一个端口最大的监听队列的长度),对于负载很大的服务程序来说大大的不够.一般会将它修改为2048或者更大. echo 2048 > ...
- TCP内核参数
tcp_syn_retries :INTEGER默认值是5对于一个新建连接,内核要发送多少个 SYN 连接请求才决定放弃.不应该大于255,默认值是5,对应于180秒左右时间.(对于大负载而物理通信良 ...
- linux内核参数sysctl.conf,TCP握手ack,洪水攻击syn,超时关闭wait
题记:优化Linux内核sysctl.conf参数来提高服务器并发处理能力 PS:在服务器硬件资源额定有限的情况下,最大的压榨服务器的性能,提高服务器的并发处理能力,是很多运维技术人员思考的问题.要提 ...
- linux内核参数sysctl.conf,TCP握手ack,洪水攻击syn,超时关闭wait(转)
http://www.xshell.net/linux/Linux_sysctl_conf.html 优化Linux内核sysctl.conf参数来提高服务器并发处理能力 Posted by 破冰 o ...
- Linux上TCP的几个内核参数调优
Linux作为一个强大的操作系统,提供了一系列内核参数供我们进行调优.光TCP的调优参数就有50多个.在和线上问题斗智斗勇的过程中,笔者积累了一些在内网环境应该进行调优的参数.在此分享出来,希望对大家 ...
- tcp ip参数详解
http://www.cnblogs.com/digdeep/p/4869010.html 1. TCP/IP模型 我们一般知道OSI的网络参考模型是分为7层:“应表会传网数物”——应用层,表示层,会 ...
- nginx的linux服务器内核参数调整【转】
概述 由于默认的linux内核参数考虑的是最通用场景,这明显不符合用于支持高并发访问的Web服务器的定义,所以需要修改Linux内核参数,让Nginx可以拥有更高的性能: 在优化内核时,可以做的事情很 ...
- 转载:Linux内核参数的优化(1.3.4)《深入理解Nginx》(陶辉)
原文:https://book.2cto.com/201304/19615.html 由于默认的Linux内核参数考虑的是最通用的场景,这明显不符合用于支持高并发访问的Web服务器的定义,所以需要修改 ...
- Linux(Centos )的网络内核参数优化来提高服务器并发处理能力【转】
简介 提高服务器性能有很多方法,比如划分图片服务器,主从数据库服务器,和网站服务器在服务器.但是硬件资源额定有限的情况下,最大的压榨服务器的性能,提高服务器的并发处理能力,是很多运维技术人员思考的问题 ...
随机推荐
- 最后一天,CDMP数据治理认证高分训练营(9-10月)开放报名!
大家好,我是独孤风,一位曾经的港口煤炭工人,目前在某国企任大数据负责人,公众号大数据流动主理人. 首先告诉大家一个好消息,在大家共同的努力下,我们的CDMP国际数据治理认证训练营(7-8月)基本收官, ...
- 实用教程|手把手带你离线部署Walrus
Walrus 0.4 已于近日发布,新版本中采用的应用模型可以让运维团队仅需配置1次,即可在多模态的基础设施及环境中运行包括应用服务及周边依赖资源在内的全套应用系统.这极大减少了运维人员的工作量,同时 ...
- 性能持续突破!火山引擎ByteHouse上线向量检索能力
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 随着LLM技术应用及落地,数据库需要提高向量分析以及AI支持能力,向量数据库及向量检索等能力"异军突 ...
- PPT 做出动态路线动画
https://www.iconfont.cn/ 插入,起点.终点,两图标 编辑顶点,调整路线 添加淡出动画,持续时间1秒 再添加直线 从上一项开始 效果选项中,选择自动翻转 计时 -> 期间 ...
- Mac 播放 swf Flash文件
Flash已不再支持,swf 文件彻底打不开了(一些教程),通过PD虚拟,安装 windows 操作系统在里在装了 flash 播放器使用了一段时间,始终不方便.于是找到了如下方法 首先安装:Adob ...
- 在 HTML 页面中使用 React
该方案使用场景:在html页面中使用react,主js文件index.js和其它非react功能使用js模块化的方式开发,适合轻量级中小型应用 index.html代码: 引入react.react- ...
- Linux 网络收包流程
哈喽大家好,我是咸鱼 我们在跟别人网上聊天的时候,有没有想过你发送的信息是怎么传到对方的电脑上的 又或者我们在上网冲浪的时候,有没有想过 HTML 页面是怎么显示在我们的电脑屏幕上的 无论是我们跟别人 ...
- Tomcat8 安装及配置步骤
Tomcat8安装及配置步骤 1.下载tomcat8 https://tomcat.apache.org/download-80.cgi#8.5.85 根据自己电脑的系统 ,下载对应的版本zip ,我 ...
- POJ 3159 :Candies 【线性差分约束 链式前向星 栈优化SPFA】
Candies POJ - 3159 题意: 给N个小朋友分糖, 给出M组约束a, b, c表示b的糖果不能比a多c个以上, 求1号和N号的最大糖果差异数 题解: 非常显然的线性查分约束问题 对于a, ...
- POJ - 1611 : The Suspects (普通并查集)
思路: 模板题,一步一步加入集合,最后判断有多少人跟0在同一个集合就行了. #include<iostream> #include<cstdio> using namespac ...