Мы создали API-интерфейс graphql с нашими сервисами, написанными на node.js и использующими сервер apollo. Мы испытываем высокую загрузку ЦП всякий раз, когда количество запросов в секунду достигает 20. Мы выполняли профилирование с помощью флеймграфов и встроенного в профилировщик узла. Присоединение результата встроенного профилировщика: -
[Summary]:
ticks total nonlib name
87809 32.1% 95.8% JavaScript
0 0.0% 0.0% C++
32531 11.9% 35.5% GC
182061 66.5% Shared libraries
3878 1.4% Unaccounted
[Shared libraries]:
ticks total nonlib name
138326 50.5% /usr/bin/node
30023 11.0% /lib/x86_64-linux-gnu/libc-2.27.so
12466 4.6% /lib/x86_64-linux-gnu/libpthread-2.27.so
627 0.2% [vdso]
567 0.2% /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25
52 0.0% /lib/x86_64-linux-gnu/libm-2.27.so
Результаты пламенного графа также дополняют вышеприведенный результат, что мы не видели ни одной функции JavaScript, потребляющей высокую загрузку ЦП.
Почему / usr /бин / узел потребляет так много процессора? это как-то связано с тем, как был написан код, или это вообще тенденция?
Также, чтобы дать мало информации о том, что делает наш API-интерфейс graphQL: - при получении запроса, в зависимости от запроса, который он делаетОт 3 до 5 нисходящих вызовов API и не выполняет никакой ресурсоемкой работы самостоятельно.
Версии: - Версия узла: - 10.16.3 graphql-modules / core: - 0.7.7 apollo-datasource-rest: - 0.5.0 apollo-server-express: - 2.6.8
Помощь очень ценится здесь.