最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Node dump分析

    正文概述 掘金(2021爱上层楼)   2020-12-17   839

    Dump类型

    • Core dump: 进程快照
    • Heap dump: 堆内存快照
    • Thread dump: 线程快照,node暂时没有

    Dump作用

    • Core dump: 分析CPU问题,比如CPU爆栈使用率达到或接近100%、程序异常退出等
    • Heap dump: 分析内存问题,比如内存泄漏、大对象等

    Dump准备

    • 安装llnode
    npm install -g llnode
    
    • 安装chrome

    Dump分析示例

    Heap dump分析

    • 模拟内存泄漏,分析heapdump找出该对象
    • 示例a.node.js
    // 模拟内存泄漏,分析heapdump,并找出该对象
    require('heapdump');
    const leaks = [];
    function LeakingClass(){
        this.name = Math.random().toString(36);
        this.age = Math.floor(Math.random() * 100);
        this.arr = new Array(10000);
    }
    
    setInterval(()=>{
        for (let i = 0; i < 100; i++) {
            leaks.push(new LeakingClass)
        }
        console.warn('Leaks: %d', leaks.length);
    },1000);
    
    // # --测试heapdump--
    // node a.node.js         # 控制台运行该程序
    // ps aux|grep a.node.js  # 查询进程ID
    // kill -31 [PID]         # 生成heapdump
    

    在浏览器中运行上述程序,可以通过Chrome Dev Tools > Performance monitor工具更直观查看内存泄漏情况 Node dump分析

    使用Chrome Dev Tools > Memory工具对生成的heapdump进行分析,找出导致内存泄漏的大对象 Node dump分析

    Core dump分析一

    • 模拟CPU使用过高,分析core dump找出执行耗时程序片段
    • 示例b.node.js
    // 模拟CPU使用过高,分析core dump找出执行耗时程序片段
    // 一般情况下,对于Web程序而言,死循环最容易让CPU满载
    
    const http = require('http')
    
    const hostname = '127.0.0.1'
    
    const port = 3000
    
    const server = http.createServer((req, res) => {
        while(true){
            // 死循环,请求进入后,CPU满载
        }
        res.statusCode = 200
        res.setHeader('Content-Type', 'text/plain')
        res.end('你好世界\n')
    })
    
    server.listen(port, () => {
        console.log(`服务器运行在 http://${hostname}:${port}/`)
    })
    
    // # --测试coredump--
    // node b.node.js        # 运行该程序
    // ulimit -c unlimited   # 开启coredump
    // ps aux|grep b.node.js # 查询进程ID
    // sudo gcore [PID]      # 生成coredump
    
    // # Mac OSX coredump文件生成后的保存路径为 /cores
    // llnode node -c path/to/core-dump-file # 分析coredump
    

    启动程序后,访问URL,可以看到CPU满载了。 Node dump分析 通过coredump分析我们可以定位到出问题的js文件和方法——死循环的位置。 Node dump分析

    Core dump分析二

    • 模拟程序异常退出,分析core dump找出程序异常点
    • 示例c.node.js
    // 模拟程序异常退出,分析core dump找出程序异常点——程序退出的位置
    setTimeout(function delayedFailure(){
        throw new Error('Fail not really fast');
    }, 500);
    
    // # --测试coredump--
    // ulimit -c unlimited                            # 开启coredump生成
    // node --abort-on-uncaught-exception c.node.js   # 控制台运行node程序
    // llnode node -c path/to/core-dump-file          # 分析coredump
    
    /// Mac下进入 /cores 目录,找到coredump文件,文件名称形式为 core.[PID]
    /// node启动时增加参数 --abort-on-uncaught-exception ,在程序奔溃时自动core dump
    

    启动程序后,通过分析coredump可以找到程序的退出位置 Node dump分析

    提示

    如果你是Mac电脑,已经自带Xcode,可以不用安装llvm,国内的网络环境加上编译过程没有三个小时是完不成的,直接使用llnode进行coredump分析即可

    Node dump分析

    总结

    本文演示了Node dump分析的过程,重在动手实践,为生产服务排障打下一定的基础,相关原理性知识可以参见官方说明。

    参考

    • Node 案发现场揭秘 —— Coredump 还原线上异常
    • Node.js调试之llnode篇
    • git-llnode
    • Chrome-Memory分析帮助文档
    • 关于Heap dump
    • Linux下core dump
    • 性能分析之– JAVA Thread Dump 分析
    • Node使用火焰图优化CPU爆涨

    起源地下载网 » Node dump分析

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元