node.js - 对 Google Cloud NodeJs API 的首次请求比后续请求花费更多时间
问题描述
我有一个基于 nodejs 的应用程序作为 Google App Engine 应用程序运行。它使用 node-postgres 模块访问数据库。我注意到以下几点:
- 我从我的机器(使用邮递员)发出的第一个请求需要更长的时间(大约 800 毫秒 - 1.5 秒)。但是,我提出的后续请求所花费的时间要少得多(大约 200 毫秒 - 350 毫秒)。我无法确定发生这种情况的确切原因。这可能是由于以下原因:
- 我第一次向服务器发出请求时会启动一个新连接。
- 使用 node-postgres 获取数据库存在一些问题(但由于该问题仅在第一个实例中发生,因此不太可能)。
我担心这个问题,因为日志显示我几乎 20% 的请求需要大约 2 秒。当我查看一些请求请求的日志时,它们似乎正在实例化一个导致更长等待时间的新进程。
我可以做些什么来进一步调查并解决这个问题?
解决方案
您的第一个请求比其他请求花费更多时间,因为 App Engine 标准有一个新实例的启动时间。这个时间真的很短,但是有。您需要添加时间来建立与数据库的连接。这就是您对第一个请求的响应时间更长的原因。
要更好地了解应用引擎启动时间,您可以阅读App Engine 启动时间文档的最佳做法(有点旧,但我认为非常清楚)。要为您的应用引擎应用程序执行分析,您可以阅读此Medium 公共博客。
在此之后,您可以设置 Stackriver 仪表板来了解您 20% 的慢速请求是否是由于新应用引擎实例的启动造成的。
推荐阅读
- javascript - 如何使用套接字将 mongoDB Change Stream 数据发送到客户端?
- java - 如何编写Junit测试来测试方法是否正确抛出异常?
- node.js - Kafka消费者手动偏移提交
- python - 用户登录后如何更新 KivyMD Nav Drawer?
- ios - Xcode Continue Build After Errors 即使在禁用时也会返回多个错误
- c++ - Unsigned char * 产生奇怪的字符,使其总是无法比较
- kubernetes - 将流量从 GCP 虚拟机路由到 VPC Native Cloud DNS GKE 集群
- r - 在shinywidget的下拉()下的multiInput()中选择后下拉消失
- typescript - 找不到模块“firebase”或其相应的类型声明。React + TypeScript + Firebase
- angular10 - mmenu-light 在 Angular 10 中引发错误。我该如何解决?