EDAS 配置 CoreDump 和 GC

简介: EDAS 创建应用时 ,支持客户自己自定义生成 coredump 和 GC 的策略,由于 EDAS 使用 JVM 本身就是开源的 Java 容器,所以支持的参数和配置方法也都是一致,只布偶封装在 EDAS 控制台下发而已。

作者:张医博

浅谈:

EDAS 创建应用时 ,支持客户自己自定义生成 coredump 和 GC 的策略,由于 EDAS 使用 JVM 本身就是开源的 Java 容器,所以支持的参数和配置方法也都是一致,只布偶封装在 EDAS 控制台下发而已。

coredump 配置

  • ecs 是否产生 coredump 文件要看系统本身是否开启了 coredump 开关。 ulimit -c 命令可以设置是否开启。
  • 可以通过 ulimit -c ulimited 命令设置 coredump 无限大。

JVM crash

JVM. crash 掉会生产 2 个文件,第一个是 JVM 的 coredump 文件,第二个是 hfs_error 的应用错误日志,如图:

image.png

应用 OOM

EDAS 支持自定义 OOM 日志的路径。

image.png

image.png

配置 GC

tomcat 中的 GC 配置和开源的配置是一样的,没有差别,先来了解一下 GC. 的概念。

垃圾收集器

在java虚拟机中,垃圾回收器不仅仅只有一种,什么情况下该使用哪种,对性能又有什么影响,这些都是我们需要了解的。

串行垃圾收集器

串行回收器是指使用单线程进行垃圾回收的回收器。每次回收时,串行回收器只有一个工作线程,对于并行能力较弱的计算机来说,串行回收器的专注性和独占性往往有更好的性能表现。串行回收器可以在新生代和老年代使用。根据作用于不同的对空间分为新生代串行回收器和老年代串行回收器。
-XX:+UseSerialGC参数可以设置使用新生代串行回收器和老年代串行回收器。

并行垃圾收集器

并行的垃圾回收器在串行回收器的基础上做了改进,他可以使用多个线程同时进行垃圾回收,对于计算能力强的计算机而言,可以有效的缩短垃圾回收所需的实际时间。

ParNew回收器

是一个工作在新生代的垃圾回收器,他只是简单的将串行回收器多线程化,它的回收策略和算法和串行回收器一样。
使用-XX:+UseParNewGC 新生代使用ParNew回收器,老年代则使用串行回收器。
ParNew回收器工作时的线程数量可以使用-XX:ParallelGCThreads参数指定,一般最好和计算机的CPU相当,避免过多的线程影响性能。

新生代ParallelGC回收器,使用了复制算法的回收器,也是多线程独占形式的回收器,但ParallelGC回收器有一个很重要的特点,就是它非常关注吞吐量。
提供了两个参数控制系统的吞吐量
-XX: MaxGCPauseMillis:设置最大垃圾收集停顿时间,可用于把虚拟机在GC停顿的时间控制在MaxGCPauseMillis范围内,如果希望减少GC停顿时间可以将MaxGCPauseMillis设置的很小,但是会导致GC频繁,从而增加GC的总时间,降低了吞吐量。所以要根据实际情况设置该值。
-XX: GCTimeRatio:设置吞吐量的大小,它是一个0到100之间的整数,默认情况下它的取值是99,那么系统将花费不超过1/(1+n)的时间用于垃圾回收,也就是1/(1+99)=1%的时间。
另外还可以指定-XX:+UseAdaptiveSizePolicy打开自适应模式,在这种模式下,新生代的大小、eden、from/to的比例,以及晋升老年代的对象的年龄参数将被自动调整,以达到在堆大小、吞吐量和停顿时间之间的平衡点。

老年代ParallelOldGC回收器

也是一种多线程的回收器,和新生代的ParallelGC回收器一样,也是一种关注吞吐量的回收器,它使用标记压缩算法实现。
-XX:+UseParallelOldGC进行设置
-XX:+ParallelGCThreads也可以设置垃圾收集时的线程数量。

CMS回收器

CMS全称为:Current Mark Sweep意为并发标记清除,他使用的是标记清除法,主要关注系统的停顿时间。
使用-XX:+UseConcMarkSweepGC进行设置
使用-XX:+ConcGCThreads设置并发线程数量

CMS并不是独占的回收器,也就是说CMS回收的过程中,应用程序仍在不断的运行,又会有新的垃圾不断的产生,所以在使用CMS的过程中应该确保应用程序的内存足够用。CMS不会等到应用程序饱和的时候才去回收垃圾,而是在某一阈值的时候开始回收,回收阈值可以用指定的参数进行配置,-XX:CMSInitiatingOccupancyFraction来指定,默认值为68,也就是说当老年代的空间使用率达到68%的时候,会执行CMS回收。如果内存使用率增长很快,在CMS执行的过程中,已经出现内存不足的情况,此时CMS回收就会失败,虚拟机将启动老年代串行回收器进行垃圾回收,这会使应用程序中断,直到垃圾回收完成后才会正常工作。这个过程GC停顿的时间可能比较长,所以-XX:CMSInitiatingOccupancyFraction的设置要根据实际情况。

G1回收器

G1回收器(Garbage-First)是在jdk1.7中提出的垃圾回收器,从长期目标来看是为了取代CMS回收器,G1回收器拥有独特的垃圾回收策略,G1属于分代垃圾回收器,区分新生代和老年代,依然有eden和from/to区,并不要求整个eden区或新生代、老年代空间都连续,它使用的是分区算法。
并行性: G1回收期间可多线程同时工作。
并发性: G1拥有与应用程序交替执行的能力,部分工作可与应用程序同时执行,在整个GC期间不会完全阻塞应用程序。
分代GC: G1依然是一个分代收集器,但是它是兼顾新生代和老年代一起工作的,之前的垃圾收集器或者在新生代工作或者在老年代工作,因此这是一个很大的不同。
空间整理: G1在回收过程中,不会像CMS那样在若干次GC后进行碎片整理,G1采用有效复制对象的方式减少空间碎片。
可预见性:由于分区的原因,G1可以只选取部分区域进行回收,缩小了回收的范围,提高了性能。
使用-XX:+UseG1GC应用G1收集器
使用-XX:MaxGCPauseMillis指定最大的停顿时间
使用-XX:ParallelGCThreads设置并行回收的线程数量

EDAS GC 配置

EDAS 支持四种 GC 模式,每一种配置的辅助参数可开源的 GC 机制一样。

image.png

相关实践学习
使用DAS实现数据库自动SQL优化
本场景介绍如何使用DAS实现数据库自动SQL优化。
SpringMVC框架入门
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts2等。 相关的阿里云产品企业级分布式应用服务 EDAS:企业级分布式应用服务 EDAS(Enterprise Distributed Application Service)是一个应用托管和微服务管理的 PaaS 平台,提供应用开发、部署、监控、运维等全栈式解决方案,同时支持 Spring Cloud、Apache Dubbo(以下简称 Dubbo )等微服务运行环境,助力您的各类应用轻松上云。产品详情: https://www.aliyun.com/product/edas 
相关文章
|
网络协议 IDE Java
阿里云ACP企业级互联网架构ACP实验之本地配置EDAS开发环境(下)
阿里云ACP企业级互联网架构ACP实验之本地配置EDAS开发环境(下)
337 0
阿里云ACP企业级互联网架构ACP实验之本地配置EDAS开发环境(下)
|
弹性计算 Java 中间件
阿里云ACP企业级互联网架构ACP实验之本地配置EDAS开发环境(上)
阿里云ACP企业级互联网架构ACP实验之本地配置EDAS开发环境
558 0
阿里云ACP企业级互联网架构ACP实验之本地配置EDAS开发环境(上)
|
应用服务中间件
EDAS 配置推送问题
配置推送简称 acm,目前集成到 EDAS 的平台入口,让客户无须重新发布即可达到配置修改的目的,本文简谈EDAS 配置推送问题
EDAS 配置推送问题
|
Java 应用服务中间件
EDAS应用JVM参数配置生产实践
整理了近期在项目上做的一些技术研究,希望与大家共同探讨交流。 虽然可以默认不优化参数,但是,企业生产实践中,仍建议配置优化,已达到最佳的服务状态。 下面是在长时间的生产环境运行中得出的参数配置建议。
2445 0
|
弹性计算 Java 应用服务中间件
如何使用EDAS轻量配置中心进行本地开发
轻量配置中心可以在开发者进行开发、调试、测试的过程中提供服务发现、注册和查询功能。
6389 0
|
算法 Java 应用服务中间件
|
网络协议 应用服务中间件 Perl
EDAS 轻量配置中心,应用注册上却无法调用服务提供者
问题背景: 某服务突然无法调用注册在轻量配置中心的服务提供者,但登录轻量配置中心控制台是可以搜索到对应的服务,且服务提供者的 IP、端口均正确。 查看轻量配置中心日志 查看config-center.
4831 0
|
4月前
|
监控 应用服务中间件
如下请问EDAS的这个问题怎么解决? 应用id:2b0e6935-47fb-40ec-a11d-7dac320aecc1 集群中的节点内存是足够的,部署跑不起来 可以帮忙看看吗,以前集群下应用发布都是正常的,最近集群下应用部署基本都报错跑不起来,提示节点不可用
如下请问EDAS的这个问题怎么解决? 应用id:2b0e6935-47fb-40ec-a11d-7dac320aecc1 集群中的节点内存是足够的,部署跑不起来 可以帮忙看看吗,以前集群下应用发布都是正常的,最近集群下应用部署基本都报错跑不起来,提示节点不可用
59 2
|
7月前
|
Kubernetes 负载均衡 Serverless
通过EDAS部署并访问应用
本实验旨在通过使用分布式应用服务EDAS纳管容器服务ASK,掌握微服务应用的部署和访问。
240 1
|
7月前
|
Kubernetes Serverless 应用服务中间件
通过EDAS实现K8s微服务应用的金丝雀发布
本实验旨在通过使用分布式应用服务EDAS纳管容器服务ASK,体验微服务应用的部署、访问和高级发布能力。
248 0

热门文章

最新文章