【问题标题】:What is epoll_pwait in node.js application and what can I do about it?node.js 应用程序中的 epoll_pwait 是什么,我该怎么办?
【发布时间】:2020-03-29 17:20:51
【问题描述】:

我的应用是棋盘游戏Settlers of Catan的网页版。

我使用node --prof app.js 来分析应用程序,并使用node --prof-process ISOLATE_LOG_FILE > processed.txt 将它们转换为已处理的文件。

我确实收到了很多 Code move event for unknown code 事件:https://prnt.sc/q69ugk

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

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

  1. 在 node.js 的上下文中这个 epoll_pwait 是什么?
  2. 为什么它使用了我的应用程序的 60%?
  3. 我该怎么办?

【问题讨论】:

  • 你做这个了吗?我面临同样的问题......我也有一个非常高的epoll_pwait(没有你的百分比那么高,但仍然很高)并且无法弄清楚它是否值得关注(主要是如果它代表一个“等待”是否阻塞)。
  • 不 :( 我修复了一些其他有用的东西
  • epoll_wait 根据您的应用程序处理任何类型的 IO。操作成本高,但上面没有说明。通常这是例如HTTP 或 FS 操作,通常也是应用程序的不当行为。 SocketServer.js 文件很可能没有实现它自己的超时。这是应用程序代码中的典型问题。因此,我会接受下面的答案。也许您的应用程序代码存在一个非常特殊的问题。在那种情况下,我会把它贴在这里。
  • 另请注意:各自的实现来自 libuv。对应的 C 代码只有一个相关位置,提示超时。

标签: node.js profiling epoll


【解决方案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 代码具有很少或零超时,如果是这样,请发布您传递给间隔的回调函数。

【讨论】:

  • if so, please post this callback function you're passing to the interval 你这是什么意思?
  • 我的意思是,如果您的应用程序代码的 setInterval 超时为零或很小,请发布此回调 => setInterval(callback, timeout),我怀疑回调有某种循环和回调本身在无限循环中运行(通过 setInterval)。我是根据经验说话的,因为这种情况确实发生在我身上,我发现设置的时间间隔和微小的超时和内部带有循环的回调导致 cpu 逐渐增加到 100%。
  • 我的最低是 50 毫秒。这算little吗?
  • 哦 ^ 那是在前端。我在后端的最小时间是 1 分钟
猜你喜欢
  • 2011-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-11
  • 1970-01-01
  • 2021-10-01
  • 1970-01-01
  • 2022-07-25
相关资源
最近更新 更多