Ужасная производительность при обновлении с узла v6.7.0 до v8.11.1

Я провел последние несколько дней, исследуя низкую производительность приложения websocket graphql api при обновлении узла с v6.x до v8.x.

Я сделал много графиков пламени, но не могу понять, где находится узкое место. Кто-нибудь знает, что такое ___kdebug_trace_string (на C++)? Похоже, что после обновления в моем приложении это займет значительно больше времени.

Посмотрите этот график пламени:

Ужасная производительность при обновлении с узла v6.7.0 до v8.11.1

Также проверьте эти журналы профиля:

журнал профиля узла v8.x (медленно): https://pastebin.com/2W65BZC8

журнал профиля узла v6.x: https://pastebin.com/BL4kM7B7

Впереди спасибо!

Как насчет того, чтобы попробовать node v9? Также возможно, что узел скомпилирован с некоторыми включенными флагами отладки случайно?

Tarun Lalwani 11.04.2018 10:12
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
12
1
437
1

Ответы 1

kdebug_trace_string - это системный вызов, который был добавлен в XNU в октябре 2015 года для iOS 9 и OS X 10.11.

Это часть kdebug, основного встроенного средства отладки XNU. Читая kdebug_trace.c, я обнаружил в комментариях следующую заметку:

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

Это объясняет, почему ___kdebug_trace_string занимает так много места на вашем графике пламени.


Это всего лишь предположение, и все это неверно, если вы не используете компьютер Apple, но тогда, если это не так, я действительно хочу знать, что вызывает этот беспорядок.



Если я прав, если вызывается kdebug_trace_string, значит, узел запускает какую-то утилиту отладки. Я скачал узел-v8.11.1-Дарвин-x64 и нашел в node/config.gypi следующую строку:

 'node_use_dtrace': 'true',

Итак, узел v8.11.1 использует dtrace.
Затем, глядя на эта линия в osx/src/dtrace/libdtrace/dt_open.c, мы можем предположить, что dtrace использует kdebug_trace_string.

Чтобы исправить это, нужно запретить node использовать dtrace. Согласно этот ответ, «Когда Node запускается, .gypi загружается, как и любой другой файл настроек». Так что, возможно, вам следует установить node_use_dtrace на false

НО

Я не понимаю, почему вы не столкнулись с такой же проблемой с узлом v6.7.0:

  • В узел-v6.7.0-Дарвин-x64node_use_dtrace тоже установлен на true
  • Node v6.7 прибл. выпуск: 28.09.2016
  • OS X 10.11 приблизительная дата выпуска: 06.09.2015

Не могли бы вы сказать мне значение node_use_dtrace для ваших двух версий узла?

Надеюсь, это поможет, и надеюсь, что я прав,
С наилучшими пожеланиями

Я считаю, что kdebug_trace_string также появляется на флеймографах ubuntu, но я дважды проверю и отправлю его сегодня вечером.

tjmehta 16.04.2018 20:00

У меня проблемы с созданием флеймографов в Ubuntu, поэтому я не могу подтвердить эту часть. Что касается node_use_dtrace, это должно быть верно для обеих версий, поскольку узел профилирования в macOS использует dtrace.

tjmehta 17.04.2018 10:36

Да, но что, если вы отключите профилирование в файле конфигурации? Влияет ли это на выступления?

boehm_s 17.04.2018 11:59

Другие вопросы по теме