什么是在Node.js应用程序中的epoll_pwait,我该怎么办?

14

我的应用程序是桌游《卡坦岛》的Web版本。

我使用node --prof app.js对应用程序进行分析,然后使用node --prof-process ISOLATE_LOG_FILE > processed.txt将它们转换为处理过的文件。

我确实遇到了很多未知代码的代码移动事件https://prnt.sc/q69ugk

最后,我得到了一个文件,如下所示:

Statistical profiling result from isolate-0x3df60c0-v8.log, (13113 ticks, 192 unaccounted, 0 excluded).

enter image description here

  1. 在node.js中,epoll_pwait是什么意思?
  2. 为什么它使用了60%的我的应用程序?
  3. 我可以怎么解决这个问题?

你解决了这个问题吗?我也遇到了同样的问题...我的epoll_pwait也非常高(虽然不像你那么高的百分比,但仍然很高),我无法确定它是否值得关注(主要是它是否表示阻塞的“等待”)。 - drmrbrewer
1
没有 :( 我修复了一些其他的东西,这也有所帮助。 - Esqarrouth
epoll_wait处理任何类型的IO取决于您的应用程序。这个操作是昂贵的,但上面没有说明。通常这是例如HTTP或FS操作,通常也是应用程序行为不良。很可能SocketServer.js文件没有实现自己的超时。这是应用程序代码中的典型问题。因此,我会接受下面的答案。也许你的应用程序代码有一个非常特殊的问题。在那种情况下,我会在这里发布它。 - eljefedelrodeodeljefe
请注意:相应的实现来自于libuv。相应的C代码只有一个相关位置,这暗示了一个超时问题。 - eljefedelrodeodeljefe
1个回答

1

epoll_pwait本质上意味着你的应用程序(事件循环)正在等待某些事情,即I/O操作。

引用上面的链接:

epoll_pwait()的调用将阻塞,直到以下情况之一发生:

   • a file descriptor delivers an event;

   • the call is interrupted by a signal handler; or

   • the timeout expires.

为了进一步调试,我想到的是,如果你有任何使用很小或零超时时间的setInterval代码,请发帖并附上你传递给该定时器的回调函数。


1
如果是这样,请发布您传递给间隔的回调函数,您在这里是什么意思? - Esqarrouth
如果您的应用程序代码中有一个超时为零或微小的setInterval,请发布这个回调=> setInterval(callback,timeout),我怀疑的是回调函数具有某种循环并且回调本身在无限循环中运行(通过setInterval)。我是从经验上说的,因为这种情况确实发生在我身上,我发现设置微小间隔和回调循环导致CPU逐渐增加到100%。 - Mu-Majid
我最低只有50毫秒。在你看来,这算是“有点”吗? - Esqarrouth
哦,^那是在前端。我在后端最小的是1分钟。 - Esqarrouth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接