我是穷叼毛,求大佬 50 解决。 在本地用的 haproxy 做负载均衡 x86 openwrt 几天测试下来一直这样,在网上看了很多方法,各种改 ulimit 值,关闭日志,端口复用,也都试过,运行不到半个钟就死了,重启 haproxy 服务之后又可以用个几十分钟,然后又死,一直重复这种问题。一看网络连接,一堆的 TIME_WAIT 短时间内网络根本不会产生这么多,这究竟是什么问题。 有靓仔遇到过这种问题吗,我好绝望
1
blless 2020-08-06 21:57:31 +08:00 via Android
我印象中好像处理过一次问题,
haproxy 在处理配置文件的 maxconn 还是啥反正就是那个最大限制数的时候,实际会打开 2 倍的文件数?(就是 unlimit 修改的那个值) 所以如果 unlimit 的文件数没有 maxconn 的两倍的话,默认只会使用 1000,而且不会报错 所以 maxconn 并不是越大越好,只要够用就好 不一定是你说的问题,但是你可以排查一下 |
2
rrfeng 2020-08-06 22:07:28 +08:00 via Android
就是 ulimit 的问题,nofile 设大点。
cat /proc/pid/limits 查看进程当时的限制值 ls /proc/pid/fd 算下有多少 open file |
3
CN10010 OP @blless 试了一下,还是不行,搞不懂什么原因,刚重启服务都是好好的,过了几分钟 time_wait 一下暴增,又死了。不过还是谢谢靓仔😁
|
4
CN10010 OP @rrfeng 这两个文件都没有,直接提示 no such file or directory,你用的也是 openwrt 吗
|
5
blless 2020-08-06 22:44:57 +08:00 via Android
首先修改确定 ulimit 有生效 然后 maxconn 不要配置太高 但是 ulimit 一定要比 maxconn 两倍高
还有就是 内网 http 转发其实可以开 keepalive,加 http reuse |
6
fovecifer 2020-08-07 08:29:52 +08:00
一般都是没有 keepalive 导致的 time_wait 一般在先断开链接的那一侧很多
|
7
zwy100e72 2020-08-08 10:25:27 +08:00 via iPhone
pid 不是字面上的 pid 而是进程 id
正常的命令应该是 cat /proc/123/limits 这样 |