我们遇到的问题是,我们的节点应用程序每隔一段时间就会在100%CPU上运行.服务器不是非常活跃,通常在0%-2%CPU上运行.我想知道可能导致此问题的常见问题是什么,以及找出导致此问题的原因的最佳方法是什么.
服务器规格:
node version 0.8.14
ubuntu 11.10
Intel(R)Xeon(R)CPU E5645 @ 2.40GHz
使用的节点包:
"express" : 2.5.x,
"log" : "1.2.x",
"redis" : "0.8.x",
"socket.io" : "0.9.x",
"mongodb": ">= 0.9.6-7",
"passport" : "0.x.x",
"passport-local" : "0.x.x",
Run Code Online (Sandbox Code Playgroud)
Vad*_*hev 33
您可以使用node-tick对您的应用进行分析.
node-tick方式sudo npm -g install ticknode --prof ./app.jsnode-tick-processor并解释结果Ze *_*eus 14
2019 年更新!!
您最好使用内置--prof-process来处理 v8 分析数据,生成的文件不再是 v8.log 并且node-tick-processor对您没有太大帮助,因此要分析您的应用程序并读取 v8 分析数据,您可以按以下步骤操作:
node --prof your_script.js
Run Code Online (Sandbox Code Playgroud)
Node 会isolate-0x103800000-v8.log在你当前的目录中生成一个名字像这样的文件,现在你使用这个文件来生成一个分析报告
node --prof-process isolate-0x103800000-v8.log > processed.txt
Run Code Online (Sandbox Code Playgroud)
持续以 100% CPU 运行是无限循环的典型特征。这是单线程 Nodejs 中的一个真正问题,但不幸的是缺乏相关信息。
\n最终我找到了唯一有用的文章:\nHow to track the deadloop in nodejs:
\n通过 SSH 连接到您的服务器。识别nodejs进程ID(例如,让它为4702)。\n现在,让\xe2\x80\x99s告诉进程监听调试请求。\n是的,我们\xe2\x80\x99正在使用一个名为kill的命令。不,我们\xe2\x80\x99不会终止该进程。我们\xe2\x80\x99正在向它发送不同的信号。
\nkill -SIGUSR1 4702\nRun Code Online (Sandbox Code Playgroud)\n执行此操作后,该进程将打开调试器连接。事实上,它会在其控制台日志中打印一个特殊的 URL,您可以在 Chrome 中打开该 URL 来调试该过程!但是,也许您不想\xe2\x80\x99 只想在防火墙和容器配置中钻一个洞来建立连接。是的,我也一样。\n所以让\xe2\x80\x99s 在命令行进行调试:
\nnode inspect -p 4702\nRun Code Online (Sandbox Code Playgroud)\n您\xe2\x80\x99将看到以下提示:
\ndebug>\nRun Code Online (Sandbox Code Playgroud)\n然后输入:
\npause\nRun Code Online (Sandbox Code Playgroud)\n然后你回来:
\nbreak in file:///somewhere/something.js:555\n>555 for (prop in inputObject) {\n510 if (hasOwnProp(inputObject, prop)) {\n511 normalizedProp = normalizeUnits(prop);\nRun Code Online (Sandbox Code Playgroud)\n是的!我们有了第一个提示。该应用程序正在执行文件 Something.js 中的第 555 行。\n这可能足以立即看到该错误。但通常我们需要更多的信息。您可以输入 backtrace 来获取完整的堆栈跟踪:
\n#0 someFunctionName file:///somewhere/somefile.js:444:22\n#1 someFunctionName file:///somewhere/somefile.js:555:33\n#2 someFunctionName file:///somewhere/somefile.js:666:44\nRun Code Online (Sandbox Code Playgroud)\n\xe2\x80\xa6 等等。
\n| 归档时间: |
|
| 查看次数: |
25543 次 |
| 最近记录: |