文章目录
概述
在 Java 虚拟机中,(GC) Garbage collection log 垃圾收集日志、 Thread Dump 线程转储、( 储:代表存储到文件)和Heap Dump 堆转储用于分析
应用程序的性能问题
和内存使用情况
,通过分析这些文件我们能够找到程序性能瓶颈或给应用程序设定合适的内存。
本文关键词:
- OOM的定位
- 分析APP GC特性
- APP内存使用分布
- 某个线程状态ing
一. 各日志概述
1. Garbage Collection Log - 找到GC规律
什么是 GC Log?
GC 日志包含垃圾收集事件的相关信息。它将指示运行了多少 GC 事件、它们是什么类型的 GC 事件(即 Young GC 或 Full GC)、每个 GC 事件暂停应用程序的时间、每个 GC 事件回收了多少对象。
分析GC 日志能查看出什么问题 ?
GC的作用是回收不再使用的内存,以便程序有足够的内存继续运行。垃圾收集日志用于研究应用程序的 GC 和内存性能。它用于优化 GC 暂停时间,用于确定
应用程序的最佳内存大小
。
- GC 活动频率:观察 GC 日志可以了解到各类型 GC 活动(例如 Minor GC、Major GC、Full GC)的发生频率和持续时间。
频繁的 GC 活动可能会导致应用程序的性能下降
,可以通过如下思路调优:
合理配置堆内存大小
减少对象的引用链
优化大对象的处理(例如手动管理内存或者使用专门的内存管理库)
- GC 效率:GC 日志中会记录每次 GC 活动的耗时和效率,包括停顿时间(Pause Time)、吞吐量(Throughput)等指标。通过分析这些指标,可以评估 GC 的性能,并针对性地调整 GC 策略和参数。
- GC 异常:GC 日志中还会记录一些异常情况,如 OutOfMemoryError、Metaspace OOM 等。这些异常可能会导致应用程序的崩溃或者异常终止,需要及时排查和处理。
2. 线程转储(Thread dump) - 分析(快照)线程状态
什么是 Thread dump?
线程转储是应用程序中在某个时间点上运行的
所有线程
的快照。它包含应用程序中每个线程的所有信息
,例如: 线程状态、线程 Id、本机 Id、线程名称、堆栈跟踪、优先级。
线程转储