Linux系统网络传输慢,万兆光纤

文章描述了一台主机在万兆网环境下TCP传输速度仅为5MB/s的问题,通过修改内核参数net.ipv4.tcp_mem并调整其值,暂时解决了问题。然而,次日速度再次下降,分析发现是由于大量CLOSE_WAIT状态的TCP连接未释放,进一步调查发现与Java进程相关。停止该进程后,内存占用降低,传输速度恢复到200MB/s。下一步将对Java程序进行检查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

万兆网但是系统网络传输慢
背景:
三台主机,相同配置、相同系统、相同驱动 (主机A、B、C),万兆网
情况:
主机A和主机B,业务使用发现tcp传输慢,进行测试发现只有5MB/s,dmesg日志报错TCP :out of memory – consider tuning tcp_mem,而主机C则能达到200MB/s,无报错。

在这里插入图片描述
在这里插入图片描述

操作:

尝试修改内核参数:
vi /etc/sysctl.conf

原值:
	net.ipv4.tcp_mem = 18201        24268   36402

改为:
	net.ipv4.tcp_mem = 524288	 699050	 1398100

# 生效
sysctl -p

tcp_mem 值是以页面大小(通常为 4KB)为单位的三个整数值,分别表示:
1. min:最小值,表示在内存压力最小的情况下,TCP 栈可以使用的最小内存量。
2. pressure:压力值,表示在内存压力增加时,TCP 栈可以使用的内存量。
3. max:最大值,表示在内存压力最大的情况下,TCP 栈可以使用的最大内存量。
这三个值的单位是页面大小,因此需要将其转换为字节数才能换算成 MB。页面大小通常为 4KB,因此可以将每个值乘以 4KB,然后将结果除以 1024*1024,即可得到对应的 MB 值。
例如,如果 TCP Mem 值为 “4096 16384 33554432”,则可以按照以下步骤进行换算:
1. 将每个参数乘以页面大小(4KB),得到 “16384 65536 134217728”,单位是 KB。
2. 将得到的内存大小除以 1024,得到 “16 64 131072”,单位是 MB。

修改完之后进行测试发现速度可达200MB/s
在这里插入图片描述

完。。。

第二天,发现速度又降回到了5MB/s ,而且A和C机器正常,B机器异常;
查看socket

cat /proc/net/sockstat

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

在这里插入图片描述

发现tcp的mem 已经接近昨日设置的net.ipv4.tcp_mem的max值;并且有大量的CLOSE_WAIT没有释放
查看进程,发现大量的43640端口被CLOSE_WAIT无法释放,查看进程情况,是java进程。

在这里插入图片描述
在这里插入图片描述

将进程停掉。查看情况,发现mem已经降下来,传输测试速度可达200MB/s。

剩下的就去查java程序了。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值