设为首页收藏本站

ZMX - IT技术交流论坛 - 无限Perfect,追求梦想 - itzmx.com

 找回密码
 注册论坛

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

用百度帐号登录

只需两步,快速登录

搜索
查看: 375|回复: 0

Linux服务器并发连接数高时dmesg 内核报错TCP: too many orphaned sockets socket端口号过多导致系统内存资源用尽 引起高丢包ping超时 tcp_mem计算方式

[复制链接]

签到天数: 3989 天

[LV.Master]伴坛终老

发表于 2022/6/6 05:13 | 显示全部楼层 |阅读模式 |Google Chrome 102.0.5005.63|Windows 10
天涯海角搜一下: 百度 谷歌 360 搜狗 有道 雅虎 必应 即刻
Linux服务器并发连接数高时dmesg 内核报错TCP: too many orphaned sockets socket端口号过多导致系统内存资源用尽 引起高丢包ping超时 tcp_mem计算方式

通过dmesg 指令观察到持续性发生内核报错日志
  1. tail -f /var/log/messages
复制代码


检查当前socket端口号数量使用情况
[root@centos7 ~]# cat /proc/net/sockstat
sockets: used 16663
TCP: inuse 20693 orphan 4116 tw 4096 alloc 20699 mem 5118
UDP: inuse 4 mem 2
UDPLITE: inuse 0
RAW: inuse 0
FRAG: inuse 0 memory 0
[root@centos7 ~]# cat /proc/sys/net/ipv4/tcp_mem
22131        29510        44262
[root@centos7 ~]# cat /proc/sys/net/ipv4/tcp_rmem
4096        87380        6291456
[root@centos7 ~]# cat /proc/sys/net/ipv4/tcp_wmem
4096        16384        4194304
[root@centos7 ~]# cat /proc/sys/net/ipv4/tcp_max_orphans
4096
[root@centos7 ~]#

4G内存服务器解决办法,关键就是tcp_max_orphans触发了限制,其他内核参数其实可以不用动
  1. echo "net.ipv4.tcp_mem = 1572864 2097152 3145728" >> /etc/sysctl.conf
  2. echo "net.ipv4.tcp_rmem = 4096 131072 16777216" >> /etc/sysctl.conf
  3. echo "net.ipv4.tcp_wmem = 4096 131072 16777216" >> /etc/sysctl.conf
  4. echo "net.ipv4.tcp_max_orphans = 400000" >> /etc/sysctl.conf
复制代码

然后执行 /sbin/sysctl -p 让参数生效

注意,设置net.ipv4.tcp_max_orphans 值后会导致系统使用内存大量的上涨,,,小内存别给这么大值,会疯狂Out of memory: Kill process 杀进程,例如1G给100000就好,刚好能把系统内存用满正好超出一丢丢用上swap。。。最大建议给1048576,在多就分布式吧,,别挤在一台服务器上处理数据
如果单独修改了net.ipv4.tcp_max_orphans 引起疯狂跳出TCP: out of memory -- consider tuning tcp_mem ,那么代表要同时设置net.ipv4.tcp_mem的值。但是我vps只有1G内存太小了,就不去管它了,而且这些值会根据系统内存大小自动设置的,一般也无需人工去分配。
在看看现在的数据,看数据来说,mem字段刚好是除以100K=系统实际内存使用MB。计算方式非常明显,由于没触发tcp_mem,所以tcp_rmem(87380)+tcp_wmem(16384)然后/1024=101K
[root@centos7 ~]# cat /proc/net/sockstat
sockets: used 16507
TCP: inuse 116422 orphan 100000 tw 4096 alloc 116428 mem 91475
UDP: inuse 4 mem 0
UDPLITE: inuse 0
RAW: inuse 0
FRAG: inuse 0 memory 0
[root@centos7 ~]#
一个tcp连接最小占用内存为4096+4096 = 8k,那么对于一个8G内存的机器,在不考虑其他限制下,最多支持的并发量为:8*1024*1024/8 约等于100万连接数并发。https://bbs.itzmx.com/thread-99643-1-1.html
报错虽然得到解决,但是服务器丢包依旧存在,等于说只是让Linux内核自身不去刷日志,,不知道是因为用的vps虚拟化的毛病吗?可能和(TCP: time wait bucket table overflow)一样直接无视就行。果然kvm虚拟化渣渣,依旧无法承受住。

参考资料:https://www.na3.jp/entry/20200120/p1

才发现,,centos7默认4096并发,而centos是26W并发,,,我就说3.x的内核跑不过2.6破案了,改了在观察一段时间
经过一个月观察,2.6并发是我用过最好的,2.6可以一台vps跑上百万TCP并发,3.10的,,一台5000并发就嗝屁了
新内核都越来越差经,系统限制解了,没用,messages里没有输出被限制的信息,可以证明和默认设置无关,内核层的问题


同时大概率还遇到另一种系统内核限制
Linux服务器高并发效率应用中出现ping icmp tcp等丢包故障的解决思路和方法。nf_conntrack连接跟踪表溢出优化,openvz商家注意啦!table full, dropping packet
https://bbs.itzmx.com/forum.php?mod=viewthread&tid=88435&fromuid=1

欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册论坛 新浪微博账号登陆用百度帐号登录

本版积分规则

手机版|Archiver|Mail me|网站地图|IT技术交流论坛 ( 闽ICP备13013206号-7 )

GMT+8, 2022/12/5 13:51 , Processed in 0.303304 second(s), 21 queries , MemCache On.

Powered by itzmx! X3.4

© 2011- sakura

快速回复 返回顶部 返回列表