HAProxy停止转发流量但未崩溃且无日志记录问题排查求助
HAProxy停止转发但进程存活问题排查解答
1. 是否有人遇到过类似情况?
HAProxy 1.6.x(尤其是1.6.3这类早期版本)确实存在不少已知问题会导致流量停止转发但进程保持活跃:
- 长连接场景下的文件描述符(FD)泄漏,耗尽后无法新建套接字,但进程不会崩溃
- SSL会话复用模块的特定bug,导致无法处理新的SSL连接请求
- 内核参数与HAProxy配置不匹配,引发连接跟踪表耗尽或套接字队列阻塞
这类问题在旧版本中并不少见,很多用户通过升级版本或调整资源限制解决了问题。
2. 未排查的日志位置与配置优化建议
待排查的信息/日志
- HAProxy统计套接字数据:如果已配置
stats socket,故障时执行以下命令抓取实时状态:
重点查看echo "show info" | socat /var/run/haproxy.sock stdio echo "show stat" | socat /var/run/haproxy.sock stdioMaxconn、CurrConns、FileDescriptors等指标,判断是否资源耗尽。 - 进程资源限制:查看HAProxy进程的文件句柄上限:
若cat /proc/$(pidof haproxy)/limitsMax open files数值较低(比如默认的1024),无法支撑100+服务的并发连接需求。 - 内核网络日志:检查
/var/log/kern.log,查看是否有nf_conntrack: table full这类连接跟踪表耗尽的报错;若使用UFW防火墙,同步检查/var/log/ufw.log是否有拦截规则导致流量中断。 - 系统调用跟踪:故障时用
strace跟踪HAProxy进程,定位阻塞点:
若进程卡在strace -p $(pidof haproxy)accept()、poll()等调用上,可直接定位到资源或内核层面的问题。
配置修改增强日志与稳定性
- 开启调试级日志:修改
haproxy.cfg中的日志配置,将日志级别提升至debug:
注意调试日志会产生大量数据,建议临时开启并配置日志轮转(通过log /dev/log local0 debuglogrotate)。 - 提升文件句柄限制:在
/etc/security/limits.conf中添加:
重启HAProxy后生效,确保进程能打开足够的套接字。haproxy soft nofile 65535 haproxy hard nofile 65535 - 启用统计套接字:在
haproxy.cfg中添加:
方便随时抓取实时状态,无需依赖日志。stats socket /var/run/haproxy.sock mode 660 level admin - 升级HAProxy版本:1.6.3是2015年的老旧版本,建议升级至1.6.x分支的最新稳定版(如1.6.15),或直接迁移至2.x系列(需注意配置兼容性),新版本修复了大量旧版本的连接管理bug。
- 优化超时与连接限制:配置合理的超时参数与连接上限,避免无效连接占用资源:
timeout client 30s timeout server 30s timeout connect 5s maxconn 10000
内容的提问来源于stack exchange,提问作者LucasY
相关产品推荐
相关产品推荐

