# 一.介绍
# 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.功能特性
# 4.生成 gc 日志
在 idea 中加入启动参数
-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/Users/csh/hong.log
# 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"]
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.设置语言
# 2.选择文件
# 3.内存大小
# 4.关键指标
# 5.交互图标
# 6.GC 统计
# 7.GC 原因
# 三.具体问题分析
# 1.Allocation Failure
"Allocation Failure" 是一种 Java Virtual Machine (JVM) 在进行垃圾回收(Garbage Collection,GC)时可能遇到的一种错误。它通常表示 JVM 在尝试为新的对象分配内存时,没有足够的可用内存空间。这个错误通常是由堆内存不足引起的,堆内存是用来存储对象实例的地方。
要解决 "Allocation Failure" 错误,你可以考虑以下几种方法:
增加堆内存大小:
- 你可以通过调整 JVM 的堆内存参数来增加堆内存的大小,例如
-Xmx
和-Xms
参数。增加堆内存可以提供更多的可用内存空间,从而减少 "Allocation Failure" 的发生概率。但要注意不要过度增加堆内存,因为这可能导致长时间的垃圾回收暂停。
- 你可以通过调整 JVM 的堆内存参数来增加堆内存的大小,例如
优化代码和对象的生命周期:
- 通过检查应用程序的代码,确保没有不必要的对象创建和持有,以及避免内存泄漏。确保及时释放不再需要的对象引用。
使用更高效的垃圾回收器:
- 根据应用程序的需求,选择适合的垃圾回收器。不同的垃圾回收器有不同的性能特性,可以通过参数配置来切换。
分析内存使用情况:
- 使用工具如 VisualVM、JConsole 或类似的性能分析工具来监视应用程序的内存使用情况,以便确定哪些对象占用了大量内存,从而优化它们的管理。
使用内存分析工具:
- 使用工具如 Eclipse Memory Analyzer 或 YourKit Profiler 来分析内存泄漏和不必要的对象创建。这些工具可以帮助你找出哪些对象占用了内存,并提供分析报告。
考虑使用压缩指针:
- 压缩指针是一种技术,它可以减少对象引用的内存占用,从而提供更多的可用内存。你可以通过启用压缩指针相关的 JVM 选项来使用这个功能。
解决 "Allocation Failure" 错误通常需要深入分析应用程序的内存使用情况,并根据具体情况采取相应的措施。要选择哪种方法或采取哪种措施,需要根据应用程序的需求和性能特征来决定。
← 02-并发编程进阶 04-Class文件 →