ZBLOG

tcp10w连接花费1G内存,希望耗费内存少点

如果你的TCP连接数量达到10万,并且内存消耗已经达到1G,以下是一些优化建议,可以帮助你减少内存使用:

1. 调整TCP缓冲区大小

如前所述,通过减小TCP的接收和发送缓冲区来降低内存占用。可以尝试更小的值,例如:

# 将接收和发送缓冲区减小到64K
sysctl -w net.core.rmem_default=65536
sysctl -w net.core.rmem_max=65536
sysctl -w net.core.wmem_default=65536
sysctl -w net.core.wmem_max=65536

2. 使用tcp_mem参数

调整 tcp_mem 参数以控制TCP协议栈可使用的内存。

# 示例设置,根据实际需要进行调整:
sysctl -w net.ipv4.tcp_mem='9450000 10485760 20971520'  

3. 调整socket选项

你还可以在程序中通过 setsockopt() 函数设置 TCP_NODELAY 和 SO_REUSEADDR 等选项,这些都能影响资源占用。

int opt = 1;
setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, (char *)&opt, sizeof(opt));
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (char *)&opt, sizeof(opt));

4. 设置较低的tcp_rmemtcp_wmem

对于高并发场景,可以进一步减小每个socket允许的最大内存,例如将其限制在32K左右。

sysctl -w net.ipv4.tcp_rmem='4096 16384 32768'
sysctl -w net.ipv4.tcp_wmem='4096 16384 32768'

5. 减少TIME_WAIT状态持续时间

如之前提到,降低 tcp_fin_timeout 来加速释放连接:

sysctl -w net.ipv4.tcp_fin_timeout=15 

同时,可以启用快速重用(如上文提到)以便在连接处于 TIME_WAIT 状态时能复用 socket。

持久化这些更改

与之前一样,将这些设置写入 /etc/sysctl.conf 文件中,以确保系统重启后仍然有效。

注意事项:

  • 确保监测应用性能和稳定性,尤其是在高并发情况下。
  • 在进行这些调整之前最好在测试环境中验证,确保不会对服务造成负面影响。
  • 理解应用层面的需求,有时候某些参数可能会影响吞吐量或延迟,因此需要根据实际情况微调。


    内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=7658

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?