如何基于java应用内存扩展aws ec2集群

Posted

技术标签:

【中文标题】如何基于java应用内存扩展aws ec2集群【英文标题】:How to scale aws ec2 cluster based on java application memory 【发布时间】:2017-12-11 20:28:47 【问题描述】:

我有一个部署在 aws ec2 集群上的 java 应用程序。我根据 cpu 使用情况配置了自动缩放,但问题是应用程序不是 CPU 密集型而是 IO 密集型,CPU 使用率平均为 20%,因此当流量增加时,它无法实时发送所有消息导致缓冲.这会导致下游系统中的消息延迟到达。

如何根据已部署应用程序的传入流量和堆使用情况自动扩展集群?

【问题讨论】:

【参考方案1】:

您应该为此目的使用custom metrics CloudWatch 默认不收集内存消耗。要启用此功能,您应该使用自定义指标脚本,然后您可以更改与内存消耗费用或您需要监控和响应的任何其他事件相对应的自动缩放组行为

【讨论】:

其实这就是答案。 CloudWatch 默认不收集内存消耗。要启用此功能,您应该使用自定义指标脚本,然后您可以更改与内存消耗费用或您需要监控和反应的任何其他事件相对应的自动缩放组行为【参考方案2】:

您可以创建一个使用 cron 运行的 bash 脚本,该脚本收集 Java 堆内存使用情况和传入连接,然后将其发送到 cloudwatch 自定义指标。

How to collect to memory and disk stats from AWS ec2 instances

Examples in Perl

And then Alert and Auto scale based on those custom metrics

【讨论】:

我已经尝试过了,但是这些是额外的网络调用,目标系统无法处理它导致限制。我们正在考虑其他事情,尚未最终确定。 增加ec2实例类型并使用ebs优化的?

以上是关于如何基于java应用内存扩展aws ec2集群的主要内容,如果未能解决你的问题,请参考以下文章

AWS EC2 自动扩展理念

AWS IAM 策略拒绝对自动扩展组或 ECS 集群内的任何 EC2 实例的权限

如何通过 AWS BeanStalk 将非 Web Java 应用程序部署到 EC2?

AWS OpsWorks 基于负载的实例(如 EC2 自动扩展)

将 AWS Glue 作业迁移到 EC2

如何在 AWS EC2 上为 Rancher 和 Kubernetes 集群做 Auto Scaling?