0

0

优化 AWS ECS 的 Java 堆设置

DDD

DDD

发布时间:2024-09-18 08:09:08

|

953人浏览过

|

来源于dev.to

转载

优化 aws ecs 的 java 堆设置

我们在 AWS Elastic Container Service(ECS) Fargate 上运行多个 Java 服务 (Corretto JDK21)。每个服务都有自己的容器,我们希望使用为每个进程支付的所有可能的资源。但这些步骤可以应用于 EC2 和其他云。

服务正在运行批处理作业,延迟并不重要,我们使用并行GC(-XX:+UseParallelGC)。即使完成我们的任务,也许 G1 会更好,但这是一个需要单独研究和发布的主题。
为了使用所有可用内存,我们的 MaxHeapSize 略低于容器内存大小。但一段时间后,我们注意到两个问题,有时我们的容器因为使用太多内存而被杀死,有时我们收到 OutOfMemoryError 异常。 为了解决第一个问题,我们增加了容器内存大小和 MaxHeapSize 之间的差距,对于第二个问题,增加了容器内存作为快速解决方案,并开始查看堆转储。

堆转储显示了有趣的细节,实际堆大小低于 MaxHeapSize,并且与老一代相比,年轻代堆很小。

在互联网上搜索并没有找到关于如何针对我们的案例调整 JVM 参数的良好指南,我只找到了一些有关堆和参数描述的高级详细信息。我决定写这篇文章来描述我所做的步骤。

第一步是:

NiceWords智能建站系统2.0.0118 for3790
NiceWords智能建站系统2.0.0118 for3790

·智能全自动建站系统:你要做的仅仅是设置几个关键词·全自动更新:NiceWords自动寻找信息,随时自动更新·在线的WEB系统:无须安装软件,买个空间就能用·超强搜索引擎优化:迅速带来大量访问量·非作弊:我们不要关键词堆砌,不要作弊,我们是正规站!·会上网就会使用:无

下载

立即学习Java免费学习笔记(深入)”;

  • 打印有关参数和默认值的信息:(-XX:+PrintFlagsFinal),
  • 将InitialHeapSize设置为与MaxHeapSize相同的值(-XX:InitialRAMPercentage=100或仅将-XX:InitialHeapSize设置为与MaxHeapSize相同的值)。无论如何,我们都在为所有容器内存付费,所以为什么不从一开始就分配它呢?
  • 记录 GC 和堆信息 (-Xlog:gc*)。

Young:Old Generation默认比例为1:2,同时只使用部分Young Generation进行GC。启动后,JVM 按预期分配了所有内存,但一段时间后,它开始将年轻代堆大小减少到几乎几兆字节。所以一段时间后我们只使用了 2/3 的可用内存。
经过一番挖掘,我发现了一个禁用自适应策略的参数(-XX:-UseAdaptiveSizePolicy),它有所帮助,堆停止减少,垃圾收集之间的间隔增加了一个数量级甚至更多。 GC 消耗的时间也有所增长,但增幅不大。

下一步是找到容器内存大小之间的最佳差距。默认情况下,即使InitialRAMPercentage=100,JDK也只是分配内存而不使用它,因此它不会被映射。 Linux 允许分配比物理内存更多的虚拟内存。当内存实际映射(JDK 写入它)时,容器稍后会失败。 -XX:+AlwaysPreTouch 更改此行为。不幸的是,有些内存仍然没有映射,但 OOM 终止发生得更快。经过几次尝试后,我得出了下一个公式“容器内存大小 - 1024MB”(对于具有 8GB 或更多内存的容器)。例如,对于 8192 容器内存大小,我们使用 -XX:MaxHeapSize=7168m。

为了进一步优化,我们正在考虑更改 -XX:NewRatio 以减少年轻代大小并减少 GC 时间。但这取决于对象在应用程序中的生命周期。
正如我之前提到的,我还没有找到任何好的指南来详细解释参数(我发现最好的是 vm-options-explorer)和调整步骤。如果您能分享您的知识和成果,那就太好了。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

397

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

575

2023.08.10

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1415

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

706

2023.06.29

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

295

2023.06.30

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

782

2023.07.05

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

575

2023.07.06

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

550

2023.07.20

C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

14

2026.01.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 8.1万人学习

Git 教程
Git 教程

共21课时 | 3.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号