jvm gc日志拿取与分析思路

前言

    参考文章:Java中9种常见的CMS GC问题分析与解决 - 美团技术团队

排查过程

进入容器里

 生产应用是跑在docker上的,所以需要先进入到应用里面去,步骤如下

1. docker ps 找到对应的应用id,比如  zxc

2. 进入容器内部

docker exec -it 7690ea7660bf sh

docker exec -it 7690ea7660bf /bin/bash  有些是这个

3. 查具体的应用   jps  如 1      注:jps -v 可以查看到配置的参数信息

4. 查看gc 情况   jstat -gc 1 1000 10000   # 每1秒打印一次,连续打印10000次

配置gc参数-1

配置如下, 参数是固定的

- JAVA_OPTS 中添加的信息

-XX:+PrintGCDetails -XX:+PrintGCDateStamps  代表gc打印的详情格式

-Xloggc:/opt/admin-gc.log  gc日志的位置,不配置默认会放到控制台

  blade-test:image: "${REGISTER}/test:${TAG}"environment:- TZ=Asia/Shanghai- JAVA_OPTS=-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/opt/admin-gc.logprivileged: truerestart: alwaysnetworks:- test_net

如果上面的配置无效可以试试下面的

配置gc参数-2

查看你的项目是不是有Dockerfile文件,内容大概如下

FROM openjdk:8-alpine
MAINTAINER jiangshaonneg
ADD ./lib/local_policy.jar  /usr/lib/jvm/java-1.8-openjdk/jre/lib/security/local_policy.jar
VOLUME /logs
EXPOSE 8803/tcp
RUN echo "java -jar web.jar -Dfile.encoding=UTF-8" > start.sh \&& chmod 777 start.sh
CMD ./start.sh

如果有的话则直接把参数放到里面去即可,也就是直接放进去即可

java -jar -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/opt/game-app-gc.log web.jar

docker部分操作

docker cp /file mycontainer:/zxc     把文件放入docker内 mycontainer为容器id

docker cp mycontainer:/zxc  /file    拿docker文件数据到主机,反过来即可

如果是采用docker方式的就需要停止后重启容器才生效

docker-compose down   停止相应的数据

docker-compose up -d   启动,并且在后台

arthas工具

首页  https://arthas.aliyun.com/doc/

基本命令,具体看文档

dashboard  面板

jvm 内存    --- 可以看到配置的参数生效没, 放在最上面了,在INPUT-ARGUMENTS中

thread 线程

## jvm 参数查看是否生效

剩下的就是拿日志了,怎么拿就是自己指定的,这里就不细说了

分析日志

分析网址

我采用的是gceasy    https://gceasy.io/   可以大概知道哪些存在哪些问题,基本都是图形化的,下面说下几个相对重要的查看指标

关键性能指标

吞吐量是越高越好,这里基本接近了100,所以不会有太多问题了

延迟是越短越好,这里稍微偏高,可能需要了解下啥原因

GC 数据

可以结合业务分析是否不合理

GC原因(重要)

这里可以很明显的看到大部分gc都是分配失败,很有可能就是因为内存分配不合理导致的,至于每种错误是什么,可以参考源码的返回,如下

const char* GCCause::to_string(GCCause::Cause cause) {switch (cause) {case _java_lang_system_gc:return "System.gc()";case _full_gc_alot:return "FullGCAlot";case _scavenge_alot:return "ScavengeAlot";case _allocation_profiler:return "Allocation Profiler";case _jvmti_force_gc:return "JvmtiEnv ForceGarbageCollection";case _gc_locker:return "GCLocker Initiated GC";case _heap_inspection:return "Heap Inspection Initiated GC";case _heap_dump:return "Heap Dump Initiated GC";case _wb_young_gc:return "WhiteBox Initiated Young GC";case _wb_conc_mark:return "WhiteBox Initiated Concurrent Mark";case _wb_full_gc:return "WhiteBox Initiated Full GC";case _no_gc:return "No GC";case _allocation_failure:return "Allocation Failure";case _tenured_generation_full:return "Tenured Generation Full";case _metadata_GC_threshold:return "Metadata GC Threshold";case _metadata_GC_clear_soft_refs:return "Metadata GC Clear Soft References";case _cms_generation_full:return "CMS Generation Full";case _cms_initial_mark:return "CMS Initial Mark";case _cms_final_remark:return "CMS Final Remark";case _cms_concurrent_mark:return "CMS Concurrent Mark";case _old_generation_expanded_on_last_scavenge:return "Old Generation Expanded On Last Scavenge";case _old_generation_too_full_to_scavenge:return "Old Generation Too Full To Scavenge";case _adaptive_size_policy:return "Ergonomics";case _g1_inc_collection_pause:return "G1 Evacuation Pause";case _g1_humongous_allocation:return "G1 Humongous Allocation";case _dcmd_gc_run:return "Diagnostic Command";case _last_gc_cause:return "ILLEGAL VALUE - last gc cause - ILLEGAL VALUE";default:return "unknown GCCause";}ShouldNotReachHere();
}

最后一个就是网站的好处了,他会建议你一些优化点,在最上面建议里

建议(重要,修改建议)

可以看到几个明显的问题

没有开启指针压缩

没有初始化元空间大小分配

结语

        到此gc日志的基本分析就结束了, 可以参考上面美团的文章进行了更全面的分析建议,这里只是初步的一些分析流程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/690951.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Elasticsearch:什么是搜索引擎?

搜索引擎定义 搜索引擎是一种软件程序或系统,旨在帮助用户查找存储在互联网或特定数据库中的信息。 搜索引擎的工作原理是对各种来源的内容进行索引和编目,然后根据用户的搜索查询向用户提供相关结果列表。 搜索引擎对于希望快速有效地查找特定信息的用…

怎么清理mac系统缓存系统垃圾文件 ?怎么清理mac系统DNS缓存

很多使用苹果电脑的用户都喜欢在同时运行多个软件,不过这样会导致在运行一些大型软件的时候出现不必要的卡顿现象,这时候我们就可以去清理下内存,不过很多人可能并不知道正确的清内存方式,下面就和小编一起来看看吧。 mac系统是一…

读十堂极简人工智能课笔记07_模拟与情感

1. 数码式考察 1.1. 制作计算机动画或游戏 1.1.1. 想怎么制作都可以 1.2. 计算机模拟 1.2.1. 目标是建造一个虚拟的实验室,其行为与现实完全一致,只是某些变量由我们来控制 1.3. 对现实世界进行建模并不容易,需要非常谨慎地收集和使用数…

Vscode vim 插件使用Ctrl+C和V进行复制粘贴到剪切板

Vscode vim 插件使用CtrlC和V进行复制粘贴到剪切板 使用这一个插件的时候复制粘贴和其他软件互动的时候体验不好, 并且不可以用Ctrl c, Ctrl v很不爽 "vim.commandLineModeKeyBindings": [{"before" : ["Ctrl", "c"],"after&q…

httpd apache

虚拟主机 配置环境 [rootlocalhost ~]#cd /var/www/html/ [rootlocalhost html]#mkdir 123 [rootlocalhost html]#mkdir abc [rootlocalhost html]#ls 123 abc [rootlocalhost html]#cd 123/ [rootlocalhost 123]#echo 123 > index.html [rootlocalhost 123]#cd ../abc/ […

泰山派摄像头使用-opencv流程

1. 泰山派添加camera 连接摄像头连接到usb接口,查看dev设备: # 在终端中输入如下命令,可以查看到camera设备资源: ls /dev/video* 检查板卡上的camera设备资源示例 也可以使用v4l2命令查看 v4l2-ctl --list-devices v4l2-ctl --list-devices是一个命令…

CentOS上如何配置手动和定时任务自动进行时间同步

场景 Linux(Centos)上使用crontab实现定时任务(定时执行脚本): Linux(Centos)上使用crontab实现定时任务(定时执行脚本)_centos 定时任务-CSDN博客 Winserver上如何配置和开启NTP客户端进行时间同步: Winserver上如何配置和开启NTP客户端进行时间同步…

ADS-B Receiver Module TT-SC1 for UAV and Drones

目录 Introduction Applications Main features Technical parameters Basic technical information Electrical specification Recommended operation conditions General electrical parameters Introduction TT-SC1 is a high quality and low price OEM ADS-B…

使用【Python+Appium】实现自动化测试

一、环境准备 1.脚本语言:Python3.x IDE:安装Pycharm 2.安装Java JDK 、Android SDK 3.adb环境,path添加E:\Software\Android_SDK\platform-tools 4.安装Appium for windows,官网地址 Redirecting 点击下载按钮会到GitHub的…

java面试题之redis篇

1.redis 中的数据类型有哪些 随着 Redis 版本的更新,后面又支持了四种数据类型: BitMap(2.2 版新增)、HyperLogLog(2.8 版新增)、GEO(3.2 版新增)、Stream(5.0 版新增&am…

Java+SpringBoot:农业疾病防治新选择

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

基于FPGA的I2C接口控制器(包含单字节和多字节读写)

1、概括 前文对IIC的时序做了详细的讲解,还有不懂的可以获取TI的IIC数据手册查看原理。通过手册需要知道的是IIC读、写数据都是以字节为单位,每次操作后接收方都需要进行应答。主机向从机写入数据后,从机接收数据,需要把总线拉低来…

Linux常用操作指令

Linux常用操作指令 ls 指令 语法:ls [选项][目录或文件] 功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。 常用选项: -a 列出目录下的所有文件,包括以 . 开头…

【LeetCode每日一题】单调栈 581. 最短无序连续子数组

581. 最短无序连续子数组 给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。 请你找出符合题意的 最短 子数组,并输出它的长度。 示例 1: 输入&am…

【lesson59】线程池问题解答和读者写者问题

文章目录 线程池问题解答什么是单例模式什么是设计模式单例模式的特点饿汉和懒汉模式的理解STL中的容器是否是线程安全的?智能指针是否是线程安全的?其他常见的各种锁 读者写者问题 线程池问题解答 什么是单例模式 单例模式是一种 “经典的, 常用的, 常考的” 设…

【软考】软件质量模型

目录 一、说明二、ISO/IEC 9126软件质量模型2.1 说明2.2 功能性2.3 可靠性2.4 易使用性2.5 效率2.6 可维护性2.7 可移植性 三、Mc Call软件质量模型 一、说明 1.软件质量是指反映软件系统或软件产品满足规定或隐含需求的能力的特征和特性全体。软件质量管理是指对软件开发过程进…

【Vuforia+Unity】01实现单张多张图片识别产生对应数字内容

1.官网注册 Home | Engine Developer Portal 2.下载插件SDK,导入Unity 3.官网创建数据库上传图片,官网处理成数据 下载好导入Unity! 下载好导入Unity! 下载好导入Unity! 下载好导入Unity! 4.在Unity设…

数据结构排序:插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序

文章目录 插入排序希尔排序选择排序冒泡排序堆排序快速排序 插入排序 基本思想: 直接插入排序是一种简单的插入排序法,其基本思想是: 把待排序的值按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完…

MongoDB文档插入

文章目录 MongoDB文档插入对比增删改查文档插入 MongoDB写安全机制非确认式写入 MongoDB文档查询参数说明查询操作符比较查询操作符逻辑查询操作符元素查询操作符数组查询操作符 模糊查询区别:$regex操作符中的option选项 MongoDB游标介绍游标函数手动迭代游标示例游标介绍 Mon…

有事休假店铺无人看守怎么办?智能远程视频监控系统保卫店铺安全

在春节期间,很多自营店主也得到了久违的假期,虽然很多店主都是长期在店铺中看守,但遇到春节这样的日子,多数人还是选择回乡休假。面对店主休假或有事不能管理店铺时,传统的监控虽然可以做到单一的监控,却仍…