gpt4 book ai didi

node.js - 从 Node v6.7.0 升级到 v8.11.1 时性能糟糕

转载 作者:IT老高 更新时间:2023-10-28 23:11:22 26 4
gpt4 key购买 nike

过去几天我一直在调查 websocket graphql api 应用程序在将 Node 从 v6.x 升级到 v8.x 时性能不佳。

我已经拍摄了很多火焰图,但我无法弄清楚瓶颈在哪里。有谁知道 ___kdebug_trace_string (在 C++ 中)是什么?升级后,我的应用程序似乎花费了更多时间。

看看这个火焰图:

Flame graph

还可以查看这些配置文件日志:

Node v8.x 配置文件日志(慢): https://pastebin.com/2W65BZC8

Node v6.x 配置文件日志: https://pastebin.com/BL4kM7B7

先谢谢了!

最佳答案

kdebug_trace_string 是 2015 年 10 月为 iOS 9 和 OS X 10.11 添加到 XNU 的系统调用。

它是 kdebug 的一部分,主要的 XNU 内置调试​​工具。阅读时kdebug_trace.c ,我在评论中发现了以下注释:

Note that the userspace API is chosing to optimize fastpath, non-errorperformance by eliding validation of each debugid. This means thaterror cases which could have been caught in userspace will make asyscall before returning with the correct error code. This tradeoffin performance is intentional.

它解释了为什么 ___kdebug_trace_string 在你的火焰图上占据如此多的位置。


这只是一个猜测,如果您使用的不是 Apple 计算机,那么所有这些都是错误的,但是,如果它是错误的,我真的很想知道是什么导致了这个困惑。



假设我是对的,如果 kdebug_trace_string 被调用,那么这意味着 Node 运行某种调试实用程序。我下载了 node-v8.11.1-darwin-x64,在 node/config.gypi 中找到了以下行:

 'node_use_dtrace': 'true',

所以 Node v8.11.1 使用 dtrace。
然后,查看 this lineosx/src/dtrace/libdtrace/dt_open.c 中,我们可以假设 dtrace 使用 kdebug_trace_string

因此,要解决此问题,需要阻止 Node 使用 dtrace。根据this answer , "当 Node 启动时,.gypi 像任何其他设置文件一样被加载。".所以也许你应该将 node_use_dtrace 设置为 false

但是

我不明白为什么您在 node v6.7.0 上没有遇到同样的问题:

  • node-v6.7.0-darwin-x64 中,node_use_dtrace 也设置为 true
  • Node v6.7 大约。发布日期:2016-09-28
  • OS X 10.11 大约发布日期:2015-09-06

你能告诉我你的两个版本 Node 的 node_use_dtrace 的值吗?

希望对你有帮助,希望我是对的,
最好的问候

关于node.js - 从 Node v6.7.0 升级到 v8.11.1 时性能糟糕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49726695/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com