gpt4 book ai didi

javascript - 在 AWS 上运行的 Node.JS 应用程序性能问题

转载 作者:太空宇宙 更新时间:2023-11-04 03:14:50 26 4
gpt4 key购买 nike

一段时间以来,我一直在使用 NodeJS 和 MYSQL 应用程序时遇到模糊的性能问题,简而言之,某些请求需要很长时间才能向浏览器返回响应。在某些情况下最多 20 秒

使用 Chrome 开发工具来监控计时,下面“时间”列中的数据显示同一端点的响应时间之间存在显着差异。

enter image description here

为了进一步调查该问题,我将以下代码设置为端点处理程序之一,以监视控制台中的延迟。在此示例中,我在本地 PC 上运行该应用程序,并将其连接到服务器上的远程生产数据库。

async function getSomething(param) {
const start = new Date().getTime();
const something = await Model.where({ field: param }).fetch();
const end = new Date().getTime();
console.log('delay: ', end - start, 'ms');
return something;
}

我向一个端点执行了十个请求,下面的数据显示了记录到控制台的延迟与将数据传回浏览器所需的时间。

数字以毫秒为单位 enter image description here

一些响应返回到浏览器时几乎没有延迟或延迟非常小,如第二行和最后一行所示,而其他一些请求在从数据库获取数据所需的时间和将数据发送到浏览器的时间方面显示出主要差异。大多数情况下都会发生这种情况。在其他一些情况下,仅从数据库中获取数据需要很长时间,如第 3 行所示。

差异对我来说是任意的,这使得很难找到问题的模式。

<小时/>

这是我的亚马逊控制台中的应用实例指标的屏幕截图,它可能会帮助某人发现有帮助的东西。

enter image description here

<小时/>

此外,我正在使用 PM2 流程管理器来管理服务器上的应用程序,这是应用程序指标分析的另一个屏幕截图。

enter image description here

如果有人能指出我还可以在哪里找到并解决问题,我将非常感激。

提前致谢。

最佳答案

我怀疑nodejs应用程序正在运行一些长时间的同步操作,从而导致事件循环停止。这可以从 PM2 截图中相对较大的事件循环延迟中看出。

发生这种情况的原因是:

  • 代码使用以下方式运行耗时的计算操作
  • 一些用于访问外部资源的同步函数,例如 fs.readFileSync

这可能是在处理与您正在调试的请求无关的其他并行请求或计时器时发生的。

nodejs 应用程序在单个线程中运行,这取决于所有代码路径快速返回到事件循环,以便它可以处理下一个事件。

我建议分析应用程序 ( https://nodejs.org/en/docs/guides/simple-profiling/ ) 并寻找运行时间最长的函数,并专注于耗时较长的函数。

关于javascript - 在 AWS 上运行的 Node.JS 应用程序性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58146306/

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