热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

从节点v6.7.0升级到v8.11.1时性能很差

如何解决《从节点v6.7.0升级到v8.11.1时性能很差》经验,为你挑选了1个好方法。

在将节点从v6.x升级到v8.x时,过去几天我一直在调查web​​socket graphql api应用程序的性能不佳.

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

看看这个火焰图:

火焰图

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

node v8.x profile log(慢):https://pastebin.com/2W65BZC8

node v6.x profile log:https://pastebin.com/BL4kM7B7

谢谢!



1> boehm_s..:

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

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

请注意,用户空间API正在选择通过省略每个debugid的验证来优化快速路径,非错误性能.这意味着在返回正确的错误代码之前,可能已在用户空间中捕获的错误情况将进行系统调用.这种性能折衷是有意的.

它解释了为什么___kdebug_trace_string在火焰图上占据了这么多位置.


这只是一个猜测,如果你不使用Apple电脑,这一切都是错误的,但是,如果它错了,我真的想知道是什么导致了这个混乱.



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

 'node_use_dtrace': 'true',

因此节点v8.11.1使用dtrace.
然后,在寻找这一行中osx/src/dtrace/libdtrace/dt_open.c,我们可以假设,DTrace的用途kdebug_trace_string

因此,要解决此问题,可能需要阻止节点使用dtrace.根据这个答案,"当Node启动时,.gypi就像任何其他设置文件一样加载." 所以也许你应该node_use_dtrace坚持下去false

我不明白为什么你没有遇到与节点v6.7.0相同的问题:

节点v6.7.0 -达尔文-64,node_use_dtrace被设置为true

节点v6.7约.发布日期:2016-09-28

OS X 10.11约发布日期:2015-09-06

你能告诉我node_use_dtrace两个版本节点的价值吗?

希望它有所帮助,并希望我是对的,
最好的问候


推荐阅读
author-avatar
jia19891213
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有