使用NodeJS定期查询多个传感器

问题描述 投票:0回答:1

我需要每15秒左右获取大约200个传感器的值。要获取值,我只需要使用基本身份验证进行HTTP调用并解析响应。问题是这些传感器可能连接速度慢,所以我需要等待一个传感器至少5秒钟(但通常它们响应速度更快,但总有一些传感器速度慢且超时)。所以现在我有以下设置:

有一个NodeJS进程连接到我的数据库,并且知道传感器的所有信息。它会定期检查是否有新的或者有一些被删除。它为每个传感器生成一个子进程,如果子进程死掉,它会重新启动它。如果传感器被删除,它也会杀死它。子进程使用5秒超时值对其传感器进行HTTP调用,如果它接收到该值,则将其保存到Redis。它也是一个无限循环,有15秒的setTimeout。还有第三个进程将所有值从Redis复制到主MySQL DB。所以这是一个半年的工作解决方案,但经过一次重大的系统升级(从Ubuntu 14.04到18.04,因此每个软件包都升级了)它似乎泄漏了一些内存,我似乎无法弄清楚在哪里。在开始之后,总结的过程需要大约1.5GB的内存。但是在一天左右之后,这会达到3GB,依此类推,在内存不足之前,我需要终止所有节点进程并重启整个过程。

所以现在我试图找出更有效的方法来实现相同的结果(每15秒查询2-300个URL并将结果存储在MySQL中)。目前我正在考虑放弃Redis,子进程将与其主进程通信,主进程将直接写入MySQL。这样我就不需要将Redis库加载到每个子进程中,这可能会节省一些时间。所以我需要关于如何减少该应用程序的内存使用量的想法(我仅限于PHP和NodeJS,主要是因为我的知识,因此编写本机守护程序可能是不可能的)

谢谢!

node.js ubuntu memory child-process
1个回答
0
投票

解决方案比我想象的要容易。我不得不将子进程重写为本机bash脚本,并将内存使用率降低到几乎为零。

© www.soinside.com 2019 - 2024. All rights reserved.