Alo*_*lon 5 javascript memory amazon-ec2 amazon-web-services node.js
我在Amazon EC2上的Ubuntu 14上运行了一个Node.js应用程序.
我希望在内存使用量达到特定大小的情况下发送电子邮件.
我知道PM2公开了一个API,允许在达到一定量的内存使用量时重新启动应用程序.现在我不想重新启动应用程序,只是为了获得有关它的通知,并且无论我想要什么(在我的情况下,发送电子邮件).
如何使用PM2或任何其他免费工具进行此操作?
答案是使用AWS CloudWatch警报.他们是免费的资格,并有一个很好的仪表板.本文档指南中描述了详细设置,但我建议您按照我的步骤确保它适合您.
您需要做的第一件事是启动一个可以写入CloudWatch的新Ubuntu EC2实例.这涉及具有权限的新IAM角色.(您无法将新角色附加到现有实例 - 请参阅第二个注意: 此处.). 您不再需要启动EC2实例来更改IAM角色. 见公告.
您采取的下一个操作是:安装AWS创作的perl脚本,以便您可以写入CloudWatch.每五分钟添加一个新的cron写入CloudWatch.
最后在CloudWatch控制台中创建一个新警报,以便在内存使用率超过某个阈值时通过电子邮件发送给您.
以下是上面列出的每个阶段的步骤:
$ sudo apt-get update
$ sudo apt-get install unzip
$ sudo apt-get install libwww-perl libdatetime-perl
curl http://aws-cloudwatch.s3.amazonaws.com/downloads/CloudWatchMonitoringScripts-1.2.1.zip -O
unzip CloudWatchMonitoringScripts-1.2.1.zip
rm CloudWatchMonitoringScripts-1.2.1.zip
cd aws-scripts-mon
./mon-put-instance-data.pl --mem-util --verify --verbose
crontab -e
*/5 * * * * ~/aws-scripts-mon/mon-put-instance-data.pl --mem-util --from-cron

stress找到的命令并且它有效.Type 和ubuntu将向您展示如何安装压力.请参阅下面我为此编写生成的内存使用情况CloudWatch图表的屏幕截图.每次内存使用率超过40%时,我收到了一封电子邮件. stress希望这可以帮助.
小智 3
正如数学家提到的那样有一个具体的实现。
您可以通过定期检查内存使用情况在节点内轻松完成这一切: https: //nodejs.org/api/process.html#process_process_memoryusage。如果这是一个长时间运行的服务器,请每小时左右检查一次。然后,如果内存达到某个阈值,只需使用像 nodemailer 这样的包发送一封电子邮件即可。
我喜欢 PM2,但我想知道是否可以不用它。
如此处所述, RSS(Resident Set Size)是进程的全部内存使用量,这包括共享内存的所有内存使用量。因此,RSS 被认为是单个进程的内存使用量是不准确的,因为共享内存也被其他进程使用。因此 PSS 存在,它将共享内存划分给所有其他使用的进程。
我想如果我们想显示节点进程最准确的内存使用情况,我们需要知道 PSS 值。然而,有人确实提到 PSS 对于大量的 fork 进程更为重要,例如 Apache 服务器(因此需要大量共享内存)。
var hour = 3600*1000;
var checkMemory = function() {
// Retrieves the memory usage
var memory = process.memoryUsage();
var rss_memory_in_bytes = m.rss;
var rss_memory_in_megabytes = m.rss / (1024**2);
if (rss_memory_in_megabytes > 50) {
// More than 50 megabytes RSS usage, do something
doSomething();
}
}
var doSomething = function() {
// For instance sending an email
}
// Check the memory usage every hour
setInterval(checkMemory, hour);
Run Code Online (Sandbox Code Playgroud)
- 更新 -
如果需要更多的堆存储,Node 进程将尝试分配该内存。此分配是自动完成的。当成功时,堆存储和 rss 也会增加。因此,在我们的例子中可以忽略 heapUsage 和 heapTotal。
有多种方法可以设置内存限制,但我们感兴趣的是检查限制。我认为检查剩余的可用系统内存量是合理的。然而,这与 Node 进程本身的实际内存使用情况无关,并且需要对如何使用 Node 脚本检查可用系统内存进行不同的威胁。
| 归档时间: |
|
| 查看次数: |
1286 次 |
| 最近记录: |