做外贸选取哪个网站,wordpress直链视频,wordpress ckplay播放,北京公司网页1 缘起
充电、充电、充电。 增加一些必备的知识#xff0c;帮助后续使用。
2 配置JVM参数
为分析GC日志以及OOM相关信息#xff0c;配置JVM参数#xff0c;分为三个部分#xff1a; #xff08;1#xff09;堆内存#xff0c;包括年轻代、最大堆内存#xff1b; 帮助后续使用。
2 配置JVM参数
为分析GC日志以及OOM相关信息配置JVM参数分为三个部分 1堆内存包括年轻代、最大堆内存 2GC日志配置 3OOM转存dump配置。 完整参数 -Xmn10m -Xmx70m -XX:PrintGCDetails -XX:PrintGCDateStamps -Xloggc:./logs/gc.log -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPathD:\data\jvm
-Xmn10m -Xmx70m -XX:PrintGCDetails -XX:PrintGCDateStamps -Xloggc:./logs/gc.log -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPathD:\data\jvm2.1 堆参数
参数描述-Xmn10m年轻代分配10MB内存-Xmx70m最大堆分配70MB内存其中最大堆内存年轻代老年代
2.2 GC日志参数
参数描述-XX:PrintGCDetails开启GC日志打印-XX:PrintGCDateStampsGC日志日期戳格式 2024-10-05T20:26:21.1450800: 234.514-Xloggc:./logs/gc.log指定GC日志输出文件路径
2.3 OOM dump转储参数
参数描述-XX:HeapDumpOnOutOfMemoryError开启OOM转储Dump文件-XX:HeapDumpPathD:\data\jvm配置Dump文件路径
开启GC日志并写入到指定目录下添加启动参数
-XX:PrintGCDetails -XX:PrintGCDateStamps -Xloggc:./logs/gc.log启动服务后在日志文件gc.log中查看GC内容如下这里开启了时间戳PrintGCDateStamps。
3 GC分析
GC分析其实是分析GC日志内容了解当前JVM GC状态主要包括GC频率、回收内存大小通过这些信息可以了解JVM状态。 依据这些状态为我们优化JVM主要是堆内存提供理论数据支持这里主要是解析GC日志参数并没有依据这些状态指导JVM调优。 GC日志
3.1 YGC
YGC日志如下Allocation Failure说明分配内存失败需要内存回收。 PSYoungGen年轻代内存回收 以第一行数据为例 2024-10-05T20:25:28.1850800: 181.555: [GC (Allocation Failure) [PSYoungGen: 7424K-192K(8704K)] 65370K-58146K(70144K), 0.0024832 secs] [Times: user0.00 sys0.00, real0.00 secs]
2024-10-05T20:25:28.1850800: 181.555: [GC (Allocation Failure) [PSYoungGen: 7424K-192K(8704K)] 65370K-58146K(70144K), 0.0024832 secs] [Times: user0.00 sys0.00, real0.00 secs] 首先分析日志内容各信息分析如下
YGC回收频率以及内存回收大小可以通过JConsole或者Visual VM可视化可视化的原始数据来自于GC日志。 每分钟YGC3~4次每次回收内存如4256K-96K4160K4MB。 2.2 Full GC
FullGC发生的情况是年轻代已不足以为新对象分配内存老年代仍不足以为新对象分配内存触发Full GC同时清理年轻代和老年代内存Full GC直接影响系统的稳定性我们要最大限度地减少Full GC依据实际情况而定。 Full GC日志如下
2024-10-05T20:26:33.5460800: 246.916: [Full GC (Ergonomics) [PSYoungGen: 4096K-0K(7168K)] [ParOldGen: 60327K-48792K(61440K)] 64423K-48792K(68608K), [Metaspace: 73978K-73972K(1116160K)], 0.0804215 secs] [Times: user0.12 sys0.00, real0.08 secs]
Full GC各部分信息如下 在模拟的请求中主动触发Full GC日志如下 由日志可知Full GC有两种情况Ergonomics和Allocation Failure当发生Full GC时如果无法释放出足够内存给新对象使用会一直进行Full GC并抛出OOM异常OOM异常会在Error日志中。 OOM Error日志通过OOM日志我们仅可知道发生了OOM而无法确定发生OOM的位置需要通过Dump文件分析。 4 OOM分析
通过GC日志我们仅能了解到发生了Full GC并不能直接定位到引发Full GC的位置 最终导致无法定位引发OOM的原因 因此配置OOM发生后转储Dump文件通过分析OOM Dump文件寻找引发OOM的原因。 通过异常日志可以直接发现发生OOM。 配置OOM Dump转储 -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPathD:\data\jvm
-XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPathD:\data\jvm4.1 OOM日志
当发生OOM时日志中会给出异常日志java.lang.OutOfMemoryError 模拟OOM异常日志如下配置OOM转储Dump文件可以在指定的路径找到。 4.2 OOM Dump文件
通过Visual VM载入OOM Dump文件文件后缀hprof。 Visual VM载入hprof文件步骤以及OOM信息如下 通过OOM Error线程信息可以查看引发OOM的位置位置信息如下 这里的OOM信息是我在项目中模拟出来的 位置是接口方法testUserInfo因此我们可以分析这个接口的所有逻辑找出OOM的原因三类方案 1增加年轻代和老年代内存 2调整业务逻辑优化数据拼装减小内存占用 3接口限流。 5 小结
1GC通过日志可以呈现的有YGC和Full GC其中YGC中展示的信息中是新生代Eden区垃圾回收情况并且Eden区和Survivor的比例是会发生变化的Full GC展示的信息有新生代Eden区和老年代 2OOM异常信息仅能提供发生了OOM无法直接定位在哪里导致的OOM需要通过Dump文件分析 3配置GC日志和OOM转存参数
参数描述-XX:PrintGCDetails开启GC日志打印-XX:PrintGCDateStampsGC日志日期戳格式 2024-10-05T20:26:21.1450800: 234.514-Xloggc:./logs/gc.log指定GC日志输出文件路径-XX:HeapDumpOnOutOfMemoryError开启OOM转储Dump文件-XX:HeapDumpPathD:\data\jvm配置Dump文件路径