V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
veezzz
V2EX  ›  Node.js

请教关于 nodejs 内存相关的问题

  •  
  •   veezzz · 2017-02-20 11:51:25 +08:00 · 2019 次点击
    这是一个创建于 2619 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我写了一个网络服务,在本地做测试,每秒钟请求 20 次 ,连续请求了 11 个小时 。内存从最初一两个小时内维持在 177M 左右 ,到 11 小时后维持在在 191M 左右 ,这种情况是不是也可能是存在内存泄漏引起的 ?理论上不管运行多长时间都应该维持在 177m 左右? 测试时候的请求过程很平稳,没有极端情况。
    4 条回复    2017-02-24 19:11:36 +08:00
    phrack
        1
    phrack  
       2017-02-20 12:03:36 +08:00 via Android
    不写 js 。

    你的测试时间还不够,跑几天再看。不过 177m 到 191m 波动应该是正常的。
    AlphaTr
        2
    AlphaTr  
       2017-02-20 20:21:08 +08:00
    因为垃圾回收任务会阶段性执行,所以理论上会在一个范围内浮动
    libook
        3
    libook  
       2017-02-24 18:37:06 +08:00
    我在 0.12 时代用 node 的时候遇到过内存泄漏问题,真是有内存泄露的话内存占用会持续攀升,直到把 V8 的额定内存空间( 64 位是 1.7G 左右)甚至系统内存空间用满。

    你提供的数据差距太小,十几 M 的内存差距不好说明什么,最好做一下压测。

    不知道你的压测是怎么测试的,一般压测的话都会是多线程高并发请求,比如 5 台机器每台异步发送请求,但台机器的请求频率从每秒 20 个递增到 2000 个,然后监控服务器和 node 进程的各项参数,如果有内存泄漏的话不需要那么长时间,只需要量就可以堆上来。

    通常极少会看到 node 程序将内存用满,通常是 CPU 用满或者连接数用满,如果你的 node 程序不是很特殊的程序的话,你只需要在压测递增压力的时候观察一下是不是内存先于 CPU 吃满,如果是的话就说明可能有内存泄漏问题,没有的话基本上就不需要担心。

    实际上在 node4.0 之后已经很少遇见内存泄漏问题了。

    还有一个办法就是去 nodejs 官方的 github 上看对应版本目前 open 的 issue ,是否有和内存泄漏相关的问题。
    veezzz
        4
    veezzz  
    OP
       2017-02-24 19:11:36 +08:00
    @libook 多谢解答,我增加了请求频率,然后打印了内存使用日志,通过日志画了图像,内存确实缓慢增长的,现在已经解决这个问题了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3069 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 14:59 · PVG 22:59 · LAX 07:59 · JFK 10:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.