hyj1991 / easy-monitor

企业级 Node.js 应用性能监控与线上故障定位解决方案
http://www.devtoolx.com
BSD 2-Clause "Simplified" License
3.08k stars 240 forks source link

使用过程中导致服务端退出 #130

Closed shawvyu closed 4 years ago

shawvyu commented 4 years ago

1,使用最先版本的easy-monitor会导致打开dashboard时,服务器端的内存暴涨200M左右 2,我们这里服务器存在内存泄漏的情况,当服务器内存涨到一定程度,我想上dashboard查看dump时,服务器突然退出。 3,服务器本身使用express框架 4,配置easy-monitor只使用了默认配置加代理profix

shawvyu commented 4 years ago

当时我们的服务端应用占用600M左右,服务器剩余内存1G左右

hyj1991 commented 4 years ago

@shawvyu 这是没办法的,因为 600MB 的堆 dump 出来估计就要几百兆,这里还要序列化和解析,也是需要消耗物理内存的。

hyj1991 commented 4 years ago

easy-monitor v2.0 的版本目前完全使用 js 实现,所以在堆快照的解析上开销降不下来(毕竟要用 js 去 JSON.parse 一个几百兆的字符串,你想想就知道要消耗多少内存了),这个问题在 3.0 版本会解决,3.0 的插件完全由 c++ 实现,当然于此相对使用上会比 2.0 麻烦一些。

这是 3.0 的运行时插件:https://github.com/X-Profiler/xprofiler

整体的控制台和数据采集管理模块还在编写中,预计六月中下旬放出来。

hyj1991 commented 4 years ago

当然目前的一个办法是,你在堆 100 ~ 200M 左右的时候就去执行内存分析操作,看看能不能拿到有用的引力图,按照我的经验,内存泄露只要发生一般堆不大的时候就有特征堆快照了

hyj1991 commented 4 years ago

Reference: #117

shawvyu commented 4 years ago

我尝试过了,当内存在300M的时候,堆内存的快照还是比较正常的。你的dashboard也显示正常,看不出来哪里泄漏。所以我跑了一个晚上的,才去截取的。因为我这个是http服务器,只有在有流量访问的服务器上才比较测的出来。期待3.0的来临