ubuntu

如何在Ubuntu上解决Nginx内存泄漏

小樊
37
2025-11-15 11:04:40
栏目: 智能运维

在 Ubuntu 上排查与修复 Nginx 内存泄漏的实用步骤

一、快速确认与止损

二、定位根因

三、常见根因与修复对照表

症状 可能原因 快速验证 修复建议
个别 worker RSS 持续攀升 第三方模块/扩展内存管理不当 gdb 导出内存、二分禁用模块 升级/修复模块;必要时改用稳定版本或移除
大请求头或大 Cookie 导致占用高 client_header_buffer_size/large_client_header_buffers 过大 抓包或日志统计请求头大小 client_header_buffer_size 设为 4k–16k;仅对大头部启用 large_client_header_buffers 4 16k;
反向代理/静态资源缓冲过大 proxy_buffersproxy_buffer_size 配置偏大 检查配置与连接并发 适度下调缓冲;启用 sendfile on; tcp_nopush on; 减少用户态拷贝
HTTPS 会话缓存过大 ssl_session_cache 过大或超时过长 检查 ssl_session_cachessl_session_timeout 改为 shared:SSL:20m; ssl_session_timeout 10m;
reload 后内存约翻倍且不回落 glibc 延迟归还内存 多次 reload 观察 RSS 是否稳定为 2x 使用 jemalloc 并在合适位置调用 mallctl("arena." STRINGIFY(MALLCTL_ARENAS_ALL) ".purge", ...);或谨慎在 master 中调用 malloc_trim(0)(需自编译)
缓存/连接数过多 proxy_cache_path max_size 过大、连接并发高 检查缓存命中率与连接数 设置合理 max_size/inactive,并限制并发连接

上述对照覆盖了最常见的配置与模块类问题,优先从“请求头/缓冲/缓存/SSL/第三方模块”五类入手,命中率最高。

四、修复与优化落地

五、验证与长期观测

0
看了该问题的人还看了