今天压测一天的Mim
go[MIN] [2024-11-26 19:42:28] [ws/proc.go:53 -> handleOfflineMessages] [ERROR] get offline message failed
[MIN] [2024-11-26 19:42:28] [ws/handler.go:73 -> handlePrivateMessage] [ERROR] add offline
msg failed: dial tcp 117.164.186.124:6379: bind: An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full.
2024/11/26 19:42:42 get: dial tcp 117.164.186.124:6379: bind: An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full.
[MIN] [2024-11-26 19:42:28] [ws/handler.go:73 -> handlePrivateMessage] [ERROR] add offline
msg failed: dial tcp 117.164.186.124:6379: bind: An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full.
[MIN] [2024-11-26 19:42:28] [ws/proc.go:53 -> handleOfflineMessages] [ERROR] get offline message failed
压测到差不多一万个在线,且20分钟内用户间是相互发消息对话的
Tcp缓冲区和队列不够用了,就是短时间内大量连接建立,需要配置参数,这个时候需要配置,套接字上线和syn队列,tcp/ip相关参数
md
# 编辑 /etc/sysctl.conf 文件
net.core.somaxconn = 65535 # 限制了监听套接字的最大队列长度,增加此值可以处理更多的并发连接请求。
net.core.netdev_max_backlog = 65535 # 网络接口接收数据包的队列长度,增加此值可以处理更多的网络数据包。
net.ipv4.tcp_max_syn_backlog = 65535 # TCP连接的SYN队列长度,增加此值可以处理更多的半连接状态的TCP连接。
net.ipv4.tcp_max_tw_buckets = 2000000 # TIME_WAIT状态的套接字最大数量,增加此值可以处理更多的TIME_WAIT状态的连接。
net.ipv4.tcp_tw_reuse = 1 # 允许重用TIME_WAIT状态的套接字,减少TIME_WAIT状态的连接数量,提高连接复用率。
net.ipv4.tcp_tw_recycle = 1 # 允许快速回收TIME_WAIT状态的套接字,减少TIME_WAIT状态的连接数量,提高连接复用率。
net.ipv4.tcp_fin_timeout = 30 # 处于FIN_WAIT_2状态的连接的超时时间,减少此值可以更快地回收连接。
net.ipv4.tcp_keepalive_time = 600 # TCP连接的保活时间,减少此值可以更快地检测到死连接。
net.ipv4.tcp_keepalive_probes = 5 # 保活探测次数,增加此值可以更可靠地检测到死连接。
net.ipv4.tcp_keepalive_intvl = 15 # 保活探测间隔,减少此值可以更快地检测到死连接。
net.ipv4.ip_local_port_range = 1024 65535 # 本地端口范围,增加此范围可以提供更多的可用端口。
net.ipv4.tcp_mem = 786432 1048576 1572864 # TCP内存使用限制,增加此值可以处理更多的TCP连接。
net.ipv4.tcp_rmem = 4096 87380 16777216 # TCP接收缓冲区大小,增加此值可以处理更大的数据包。
net.ipv4.tcp_wmem = 4096 65536 16777216 # TCP发送缓冲区大小,增加此值可以处理更大的数据包。
net.core.rmem_max = 16777216 # 最大接收缓冲区大小,增加此值可以处理更大的数据包。
net.core.wmem_max = 16777216 # 最大发送缓冲区大小,增加此值可以处理更大的数据包。
net.core.rmem_default = 8388608 # 默认接收缓冲区大小,增加此值可以处理更大的数据包。
net.core.wmem_default = 8388608 # 默认发送缓冲区大小,增加此值可以处理更大的数据包。
net.core.optmem_max = 40960 # 最大选项缓冲区大小,增加此值可以处理更多的TCP选项。
# 编辑 /etc/security/limits.conf 文件
* soft nofile 1048576 # 软限制,允许每个用户打开的最大文件描述符数量。
* hard nofile 1048576 # 硬限制,允许每个用户打开的最大文件描述符数量。
# 编辑 /etc/security/limits.d/90-nproc.conf 文件
* soft nproc 1048576 # 软限制,允许每个用户创建的最大进程数。
* hard nproc 1048576 # 硬限制,允许每个用户创建的最大进程数。
配置上面的参数就可以了,中途还遇到很多其他问题,因为整个架构按我自己的来,没有怎么借鉴别人的代码,只能慢慢优化咯
本文作者:yowayimono
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!