Kubernetes中Next.js应用OOM引发Pod频繁重启问题求助
Kubernetes部署Next.js应用遭遇OOM内存泄漏问题排查求助
问题现象
- 在Kubernetes环境部署Next.js应用时触发OOM,Pod内存持续线性增长,无法回落至初始水平,达到资源限制后被Kubernetes强制重启
- 即使部署仅渲染随机文本、依赖极简的纯Next.js应用,仍出现相同内存泄漏现象
环境与配置信息
Dockerfile配置
ARG NODE=node:16.15.0-alpine FROM ${NODE} as deps RUN yarn set version 1.22.19 WORKDIR /app COPY apps/plain-nextjs/ ./ RUN yarn install FROM ${NODE} as builder ENV NODE_ENV production WORKDIR /app COPY --from=deps /app/ ./ RUN yarn build FROM ${NODE} as production WORKDIR /app ENV NODE_ENV production RUN addgroup --system --gid 1001 nodejs RUN adduser --system --uid 1001 nextjs COPY --from=builder /app/next.config.js ./ COPY --from=builder /app/package.json ./package.json # Next.js输出文件追踪 COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static USER nextjs EXPOSE 3005 ENV PORT 3005 CMD node --max-old-space-size=360 server.js
Kubernetes与Node.js配置
- Kubernetes Helm Chart中Pod内存限制设为512MB,按照线上建议将Node.js/Next.js启动参数
--max-old-space-size设为360MB - 使用Istio基于路径的路由,通过域名的
/plain-nextjs路径访问该应用
next.config.js配置
/** @type {import('next').NextConfig} */ const nextConfig = { webpack: (config, options) => { config.module.rules.push({ test: /\.svg$/, use: ["@svgr/webpack", "url-loader"], }); return config; }, reactStrictMode: false, output: "standalone", swcMinify: true, compress: true, basePath: "/plain-nextjs", }; module.exports = nextConfig;
package.json配置
{ "name": "plain-nextjs", "version": "0.1.0", "private": true, "scripts": { "dev": "next dev -p 3005", "build": "next build", "start": "next start -p 3005", "test": "jest --forceExit --detectOpenHandles", "lint": "next lint" }, "dependencies": { "@next/font": "13.1.5", "next": "13.1.5", "prop-types": "^15.8.1", "react": "18.2.0", "react-dom": "18.2.0" }, "devDependencies": { "@svgr/webpack": "^6.5.1", "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", "babel-plugin-inline-react-svg": "^2.0.1", "eslint": "8.32.0", "eslint-config-next": "13.1.5", "http-status-codes": "^2.2.0", "jest": "^28.1.3", "jest-environment-jsdom": "^29.4.0", "styled-components": "^5.3.6", "url-loader": "^4.1.1" } }
监控与排查现状
- Staging环境Grafana监控显示,即使负载不高,内存仍持续增长无回落(内存监控截图:
) - 曾怀疑循环引用或垃圾回收异常,但无法定位根因,恳请提供排查思路
内容的提问来源于stack exchange,提问作者erimeri
相关产品推荐
相关产品推荐

