cpu profile中的program指标指的是什么?
发布于 6 年前 作者 buctyoyo 4474 次浏览 来自 问答

程序出了点问题,cpu一直占满,但是业务代码基本没执行, profile如图,问下99.9%的program指标是什么?是死循环吗? image.png

5 回复
  1. Node.js 是一个JavaScript 运行时环境(JavaScript Runtime Environment)
  2. Node.js 是基于事件循环(Event Loop)机制

Program 简单讲就是 node 进程,所以你用 node index.js 执行就相当于开启了一个 node 进程。然后 node 是基于事件循环机制,因此 node 进程简单点做的事情就是:

main() {
  while(event_queue.length > 0) {
    event = event_queue.pop();
    event.run();
  }
}

上面的代码是 native code,event.run 执行的是 js code,但是这里的 (program) 只计算了 native code 的时间,不包含 js code 的时间,所以 99% 说明一直在循环没怎么执行 event 或 event 的执行时间很短。如果你的代码是一个 web server,那在没有请求的时候 node 进程就是在不停地循环,这时 (program)就会占用大部分时间(因为没事情做)。如果你不停地请求网站,这时 (program) 就会降低了,相当于很多时间用来执行 js code 了。另外可以看出 program 也是函数调用树的最顶层。

赞1楼,学习了。

楼主可以这样理解:idle也是native在执行(program)的一种

另外,1楼提到的循环机制,请楼主不要误解成while(true){}。node并没有忙等待(一直在Running状态占OS资源)。没事干的时候,主线程是Blocked状态,他在等待重新就绪运行的事件或信号。

所以Profiler的统计时间,是你点Start到Stop的时间间隔。与cpu占用时间不完全一致。

@soda-wy 谢谢解答

(program) 通常就是指的是采样时间里,没有在 JavaScript 的堆栈上。也就是说您的 99.9%的时间里,都没有执行 JavaScript。

回到顶部