You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Liferay Tomcat HTTPS运行4-5天后失效,重启恢复且Recv-Q已满求助

Troubleshooting Liferay HTTPS Failure After 4-5 Days (Recv-Q Full Issue)

你这情况我碰到过不少,典型的TCP接收队列耗尽导致的HTTPS服务罢工问题——虽然已经调了内核内存参数,但大概率还有应用层或者其他内核参数的配置没跟上,给你梳理几个实操方向,一步步排查解决:

1. 先搞清楚Recv-Q堵在哪

别着急盲目调参数,先定位根因:

  • 用netstat -tulpn | grep <你的HTTPS端口>或者更高效的ss -tulpn | grep <你的HTTPS端口>,看看哪些连接的Recv-Q数值居高不下,重点关注连接状态:
    • 如果是一堆CLOSE_WAIT状态的连接,那说明Liferay(底层Tomcat)没正确关闭TCP连接,十有八九是应用层连接池漏了,或者SSL会话复用没配置好
    • 如果是ESTABLISHED状态的连接占满Recv-Q,那可能是请求处理速度跟不上,线程池或者业务逻辑拖了后腿
  • 可以抓包分析:tcpdump -i <你的网卡名> port <HTTPS端口> -w https_capture.pcap,之后用Wireshark打开,看看TCP握手、挥手流程有没有异常,比如客户端发了请求但服务端一直没响应

2. 盯紧Liferay/Tomcat的连接配置

Liferay默认用Tomcat做容器,HTTPS的Connector配置是核心:

  • 打开tomcat/conf/server.xml里的HTTPS Connector节点,检查这几个关键参数:
    • maxConnections:最大并发连接数,默认值可能偏小,根据服务器CPU/内存配置往上调(比如10000起步)
    • maxThreads:处理请求的线程数,要和maxConnections匹配,线程不够的话,请求直接堆在Recv-Q里没人处理
    • connectionTimeout:连接超时时间,别设太长,建议60000(60秒),闲置连接占着坑不释放会浪费资源
    • SSLSessionTimeout:SSL会话超时,默认300秒,适当缩短到180秒,减少闲置SSL会话的资源占用
  • 再检查Liferay的连接池:不管是数据库连接池还是HTTP客户端连接池,如果出现连接泄漏,线程被占死,新请求就只能堵在Recv-Q里

3. 内核参数不能只调内存,补全TCP优化项

你已经调了内存相关的rmem/wmem参数,但还有几个TCP关键参数得加上,才能从根本上减少连接堆积:

  • 把这些加到/etc/sysctl.conf里:
    # 让TIME_WAIT状态的连接快速复用,减少资源占用
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_tw_recycle = 1
    # 缩短SYN包的重试次数,避免半连接队列堆积
    net.ipv4.tcp_synack_retries = 2
    net.ipv4.tcp_syn_retries = 2
    # 开启TCP滑动窗口自动调优,提升传输效率
    net.ipv4.tcp_window_scaling = 1
    # 调大监听队列长度,避免新连接被拒绝
    net.core.somaxconn = 65535
    net.ipv4.tcp_max_syn_backlog = 65535
    
  • 执行sysctl -p让参数立即生效,这些参数能帮服务器更高效地处理TCP连接,减少Recv-Q堵塞的概率

4. 加个监控,提前预警别等崩了才发现

总不能每次等4-5天崩了再重启,得提前监控:

  • 用monit或者Prometheus+Grafana搭个监控,重点盯这几个指标:Recv-Q长度、各TCP状态连接数、Liferay线程池使用率
  • 设置告警阈值,比如Recv-Q达到somaxconn的80%时就发告警,提前排查问题,不用等服务挂了才处理

5. 排查SSL层面的潜在问题

毕竟是HTTPS服务,也得排除SSL本身的问题:

  • 先确认SSL证书有效期,虽然4-5天就过期不太可能,但万一自动续期出问题了呢?
  • 检查JVM内存泄漏:用jmap或者JConsole看看Liferay的内存使用情况,如果内存持续上涨,可能是SSL引擎或者相关组件有内存泄漏
  • 试试升级Tomcat版本:有些旧版本Tomcat的SSL实现有性能缺陷或者小bug,升级到稳定版(比如9.x最新版)说不定能解决

最后提个醒:调大内核参数只是“治标”,找到应用层的连接泄漏、线程池配置不合理这些“病根”才是治本的关键,建议先从Liferay/Tomcat的连接配置入手排查,比盲目调参数有用得多。

内容的提问来源于stack exchange,提问作者prakash_vidja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:01:06