node.js - Node.js 活动句柄突然上升
问题描述
我有一个托管在 DigitalOcean 上的移动应用程序(每天大约 100 个同时用户)Parse Server
的Node.js
+包装器。express
应用服务器与托管在另一个 DigitalOcean 液滴上的 MongoDB 通信。我pm2
用作流程管理器及其基于 Web 的监控工具。在同一个过程中,我们运行LiveQuery
Parse 社区制作的 WebSocket 服务器。
问题是,我在服务器上遇到了一些性能问题。一切顺利,直到主动手柄不受控制地升起!(见下图)这就像服务器说“我完成了!现在我休息了!”
通常活动句柄保持在 30 到 70 之间。当我重新启动进程时,pm2 restart
一切都恢复正常!
我已经有这个问题很长一段时间了,我一直无法弄清楚是什么原因造成的!任何帮助将不胜感激!
编辑:我做了一个压力测试,我为 1 个用户创建了 200 个 LiveQuery 套接字,而不是用户通常拥有的 2 个,并且在 5 秒内出现了 300 个活动句柄的峰值!套接字全部创建的那一刻,一切恢复正常!
解决方案
我通常根据内存使用情况使用重启
pm2 start filename.js --max-memory-restart 160 --exp-backoff-restart-delay=100
pm2 还具有内置的 cron 作业或自动启动脚本设置,以防服务器重新启动,请参阅https://pm2.keymetrics.io/docs/usage/restart-strategies/
如果 pm2 将提供基于活动连接或堆内存的重启选项,那将是可能的
推荐阅读
- python - Python 正则表达式字符串替换问题
- ios - 为什么每次我选择图像时 UIImagePickerViewController 都会增加“文档和数据”的使用?
- java - 如何在 Java 中搜索数组并检查条件
- javascript - amCharts 4:加载外部数据时,值的总和不起作用
- java - 如何使用 Java(Android)从 Yahoo Finance 现金流量表中提取值?
- php - 如何根据 HTML 表单输入从 php 数组中问候用户名?
- angular - 无法在组件中使用多个服务
- networking - 使用 iperf 检查网络带宽
- python - 如何在同一张表中计算最近 12 个月的平均值和最近 4 个季度的平均值
- html - 在尝试了 HTML 和正文的各种可能选项后,HTML 和正文高度未覆盖整个页面