eggjs / egg

🥚 Born to build better enterprise frameworks and apps with Node.js & Koa
https://eggjs.org
MIT License
18.9k stars 1.82k forks source link

用egg 在容器中启动后,在几乎没人使用的情况下,内存在一天内逐步上升到1.6g。建议能有配置项能够优化内存分配 #3777

Closed kaihekaihe closed 5 years ago

kaihekaihe commented 5 years ago

Background

A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

Proposal

Describe the solution you'd like, better to provide some pseudo code.

Additional context

Add any other context or screenshots about the feature request here.

我克隆了egg vue的模板,没有加任何其他大的开发功能进去。在容器中启动。在几乎没人使用的情况下,内存在一天内逐步上升到1.6g。建议能有配置进行内存分配优化 。

我的启动命令在package.json中是egg-scripts start。像这些配置--max_old_space_size=600 --max_semi_space_size=8这些,应该怎么加?

还有在容器中设置jemalloc,不会会使内存越来越大,那么这样的jemalloc,能否通过一个插件来实现?

qingdengyue commented 5 years ago

挂一下Alinode 看一下 https://www.aliyun.com/product/nodejs

atian25 commented 5 years ago

哪里的 vue 模板?大概率你是玩了 SSR 导致的内存泄露了,业务代码的 bug,用 alinode 排查吧。

内存泄露改配置没啥意义,正视问题。

kaihekaihe commented 5 years ago

https://github.com/easy-team/egg-vue-webpack-boilerplate

kaihekaihe commented 5 years ago

这应该不是内存泄漏,有其他人遇到了和我一样的问题。看这个帖子: https://v2ex.com/t/523721

kaihekaihe commented 5 years ago

资料说v8默认的max-old-space-size是1.7g。今天第三天,内存已接近1.7g

qingdengyue commented 5 years ago

资料说v8默认的max-old-space-size是1.7g。今天第三天,内存已接近1.7g

所以你挂一下AliNode啊 有那么多参数一看就知道了嘛

kaihekaihe commented 5 years ago

资料说v8默认的max-old-space-size是1.7g。今天第三天,内存已接近1.7g

所以你挂一下AliNode啊 有那么多参数一看就知道了嘛

我的代码只能在公司内部部署,不能部署到阿里云上,也能挂alinode?

qingdengyue commented 5 years ago

挂AliNode 是为了解决问题,跟你的部署环境没关系。如果AliNode上内存也涨了,那就才能知道是哪里的问题。

kaihekaihe commented 5 years ago

挂AliNode 是为了解决问题,跟你的部署环境没关系。如果AliNode上内存也涨了,那就才能知道是哪里的问题。

https://help.aliyun.com/document_detail/60907.html?spm=a2c4g.11186623.6.555.58cd88e7ldbvn3

公司内网络不能外传数据,和 agentserver.node.aliyun.com:8080网络不通。

这样我在哪看监控数据,有么有集成方案的链接

whxaxes commented 5 years ago

@kaihekaihe 如果要设置 max-old-space-size ,加个环境变量 NODE_OPTIONS=--max-old-space-size=4096 ,但是不建议这么绕过,你内存占用都这么接近 oom 了,node 肯定会进行 gc 的,如果 gc 后都降不下来,大概率就是出现内存泄露了。除非你的应用真的是一直处于比较高的 qps 下,不然内存占用不会这么高,就算你设置了 max-old-space-size 也一样容易爆,找到根源解决才是王道。

atian25 commented 5 years ago

那个模板不是官方的,你可以找开发者反馈看看。

alinode 不需要部署阿里云,只有一些内存之类的数据会上传,上传脚本都是开源的,可以自己看。

那只能自己研究那几个 node 的工具,自行分析了

kaihekaihe commented 5 years ago

@qingdengyue 我在阿里云上创建了一个应用,但是怎么把https://github.com/easy-team/egg-vue-webpack-boilerplate部署上去,这个部署要收费?

@atian25 那意思是我可以部署到本地,通过上传脚本上传数据?有没有方案链接

qingdengyue commented 5 years ago

@kaihekaihe 有Egg的部署方案。 https://help.aliyun.com/document_detail/60907.html?spm=a2c4g.11186623.6.555.54b176bf2X1SrQ

atian25 commented 5 years ago

https://eggjs.org/zh-cn/core/deployment.html#nodejs-%E6%80%A7%E8%83%BD%E5%B9%B3%E5%8F%B0alinode

kaihekaihe commented 5 years ago

@kaihekaihe 有Egg的部署方案。 https://help.aliyun.com/document_detail/60907.html?spm=a2c4g.11186623.6.555.54b176bf2X1SrQ

我没找到在阿里云上怎样拉取代码,安装依赖,构建启动这块。是通过容器来启动?

atian25 commented 5 years ago

alinode 你可以在本地跑的(除了 windows),只要网络能联调 agentserver.node.aliyun.com 即可。

hubcarl commented 5 years ago

@kaihekaihe 部署的话,除了先进行项目构建外,部署就和普通的 node 应用一样部署就可以. 针对这个问题,先确认两点:

image

hubcarl commented 5 years ago

在没人使用的情况下, 内存一直涨, 那就感觉不是 SSR 渲染导致的内存问题。如果alinode 用不了,自己用这种方式排查一下: https://www.yuque.com/hubcarl/blog/dxrrhq

atian25 commented 5 years ago

这么没法猜,没人访问,也有可能是定时任务来请求。总而言之,用工具直接看内存里面是啥,就一目了然了。

hubcarl commented 5 years ago

这种情况是要排查一下, 刚我又在本地压侧了一下,内存回收正常

ab -c 50 -n 1000 http://127.0.0.1:7001/ ab -c 50 -n 1000 http://127.0.0.1:7001/admin/article/list/

egg-bot commented 5 years ago

Hello @kaihekaihe. Please provide a reproducible example following the instruction.

Issues labeled by Need Reproduce will be closed if no activities in 7 days.


@kaihekaihe,请根据这个说明提供最小可复现代码。

如果在 7 天内没有进展会被自动关闭。

hyj1991 commented 5 years ago

@hubcarl 用 v8-profiler-node8 导出堆在 1g 左右时的堆快照,然后进入 Node.js 性能平台 开通后进入控制台创建任意的一个应用,点击创建好的应用的 文件 进入文件列表页:

image

最后点击 上传文件

image

可以将你生成的堆快照手动上传进行分析查看结果的

hyj1991 commented 5 years ago

这个问题和 egg 本身应该是没有关系的

hyj1991 commented 5 years ago

如果借助于 Node.js 性能平台排查有问题的可以加钉钉群 11794270 咨询,这个 issue 先关闭了