# 一.介绍

# 1.官网地址

GCeasy 官网地址 (opens new window)

# 2.简单介绍

GCeasy 是一个基于 Web 的垃圾回收日志分析工具,可以用于分析 JVM 的垃圾回收日志,提供可视化的分析结果和建议。GCeasy 可以分析所有主流的垃圾回收器,包括 CMS、G1、Parallel 和 Serial 等,支持多种垃圾回收日志格式,包括 GC log、Jstat log 和 JMX 等。

使用 GCeasy 可以帮助开发人员和运维人员快速定位 JVM 垃圾回收问题,包括内存泄漏、频繁 Full GC、停顿时间过长等常见问题。GCeasy 提供的分析结果包括垃圾回收统计信息、内存使用情况、各代空间使用情况、各代垃圾回收次数和停顿时间、垃圾回收器配置信息等。此外,GCeasy 还提供了一些优化建议,帮助用户优化 JVM 的垃圾回收性能。

GCeasy 的使用非常简单,只需要将垃圾回收日志文件上传到网站上即可,无需安装任何软件。GCeasy 还提供了免费和付费两个版本,免费版本可以分析大部分常见的垃圾回收日志,付费版本则支持更多的功能和更大规模的日志分析。

# 3.功能特性

image-20230725161016596

# 4.生成 gc 日志

image-20230725175923986

在 idea 中加入启动参数

-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/Users/csh/hong.log
1

# 5.服务器 gc 日志

Dockerfile 配置文件

FROM deploy.deepexi.com/dce/d2sf-skywalking-base:jdk8-alpine-8.5.0

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone

WORKDIR /home
USER root

ENV PROFILE="dev"
ENV LC_ALL en_US.UTF-8
ENV LANG en_US.UTF-8
ENV JAVA_OPTS="\
-Xms4g \
-Xmx4g \
-Xmn2g \
-Xss1m \
-XX:SurvivorRatio=8 \
-XX:MaxTenuringThreshold=10 \
-XX:+UseConcMarkSweepGC \
-XX:CMSInitiatingOccupancyFraction=70 \
-XX:+UseCMSInitiatingOccupancyOnly \
-XX:+AlwaysPreTouch \
-XX:+HeapDumpOnOutOfMemoryError \
-XX:HeapDumpPath=:./logs/gc \
-verbose:gc \
-XX:+PrintGCDetails \
-XX:+PrintGCDateStamps \
-XX:+PrintGCTimeStamps \
-Xloggc:./logs/gc/gc.log \
"

ENV PARAMS=""

COPY ./deepexi-dsc-belle-insight-provider/target/*.jar /home/app.jar

EXPOSE 80

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
RUN echo -e 'mkdir -p ./logs/gc && java $JAVA_OPTS -jar ./app.jar --spring.profiles.active=$PROFILE $PARAMS' > entrypoint.sh

ENTRYPOINT ["sh", "entrypoint.sh"]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

# 二.使用

# 1.设置语言

image-20230725160949021

# 2.选择文件

image-20230725161130276

# 3.内存大小

image-20230725160842044

# 4.关键指标

image-20230725160856663

# 5.交互图标

image-20230725160908524

# 6.GC 统计

image-20230725160920930

# 7.GC 原因

image-20230725160938958

# 三.具体问题分析

# 1.Allocation Failure

"Allocation Failure" 是一种 Java Virtual Machine (JVM) 在进行垃圾回收(Garbage Collection,GC)时可能遇到的一种错误。它通常表示 JVM 在尝试为新的对象分配内存时,没有足够的可用内存空间。这个错误通常是由堆内存不足引起的,堆内存是用来存储对象实例的地方。

要解决 "Allocation Failure" 错误,你可以考虑以下几种方法:

  1. 增加堆内存大小:

    • 你可以通过调整 JVM 的堆内存参数来增加堆内存的大小,例如 -Xmx-Xms 参数。增加堆内存可以提供更多的可用内存空间,从而减少 "Allocation Failure" 的发生概率。但要注意不要过度增加堆内存,因为这可能导致长时间的垃圾回收暂停。
  2. 优化代码和对象的生命周期:

    • 通过检查应用程序的代码,确保没有不必要的对象创建和持有,以及避免内存泄漏。确保及时释放不再需要的对象引用。
  3. 使用更高效的垃圾回收器:

    • 根据应用程序的需求,选择适合的垃圾回收器。不同的垃圾回收器有不同的性能特性,可以通过参数配置来切换。
  4. 分析内存使用情况:

    • 使用工具如 VisualVM、JConsole 或类似的性能分析工具来监视应用程序的内存使用情况,以便确定哪些对象占用了大量内存,从而优化它们的管理。
  5. 使用内存分析工具:

    • 使用工具如 Eclipse Memory Analyzer 或 YourKit Profiler 来分析内存泄漏和不必要的对象创建。这些工具可以帮助你找出哪些对象占用了内存,并提供分析报告。
  6. 考虑使用压缩指针:

    • 压缩指针是一种技术,它可以减少对象引用的内存占用,从而提供更多的可用内存。你可以通过启用压缩指针相关的 JVM 选项来使用这个功能。

解决 "Allocation Failure" 错误通常需要深入分析应用程序的内存使用情况,并根据具体情况采取相应的措施。要选择哪种方法或采取哪种措施,需要根据应用程序的需求和性能特征来决定。

上次更新: 10/29/2024, 10:27:50 AM