jvm性能监控&&问题排查

jar反编译软件

jd-gui反编译软件:

https://jd-gui.apponic.com/mac/download/
在这里插入图片描述

jvm参数推荐

jvm参数推荐:
JAVA_OPTS=-Xms1g -Xmx1g -XX:NewRatio=1 -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -XX:+AlwaysPreTouch -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+ExplicitGCInvokesConcurrent -XX:+ParallelRefProcEnabled -XX:+CMSParallelInitialMarkEnabled -XX:MaxTenuringThreshold=3 -XX:+UnlockDiagnosticVMOptions -Xloggc:/data/logs/egb/gc- A P P N A M E . l o g − X X : + P r i n t G C D e t a i l s − X X : + P r i n t G C D a t e S t a m p s − X X : + P r i n t P r o m o t i o n F a i l u r e − X X : + P r i n t G C A p p l i c a t i o n S t o p p e d T i m e − X X : − U s e B i a s e d L o c k i n g − X X : A u t o B o x C a c h e M a x = 20000 − D j a v a . s e c u r i t y . e g d = f i l e : / d e v / . / u r a n d o m − X X : + P r i n t C o m m a n d L i n e F l a g s − X X : − O m i t S t a c k T r a c e I n F a s t T h r o w − X X : E r r o r F i l e = / d a t a / l o g s / e g b / {APP_NAME}.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintPromotionFailure -XX:+PrintGCApplicationStoppedTime -XX:-UseBiasedLocking -XX:AutoBoxCacheMax=20000 -Djava.security.egd=file:/dev/./urandom -XX:+PrintCommandLineFlags -XX:-OmitStackTraceInFastThrow -XX:ErrorFile=/data/logs/egb/ APPNAME.logXX:+PrintGCDetailsXX:+PrintGCDateStampsXX:+PrintPromotionFailureXX:+PrintGCApplicationStoppedTimeXX:UseBiasedLockingXX:AutoBoxCacheMax=20000Djava.security.egd=file:/dev/./urandomXX:+PrintCommandLineFlagsXX:OmitStackTraceInFastThrowXX:ErrorFile=/data/logs/egb/{APP_NAME}hs_err%p.log -Djava.rmi.server.hostname=127.0.0.1 -Dcom.sun.management.jmxremote.port=5001 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.net.preferIPv4Stack=true -Dfile.encoding=UTF-8

jvisualvm

jvisualvm
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
minioClient/cosClient调用putObject上传接口时该方法里面都有自动关闭http连接的处理
看一下反编译的这段上传文件的代码

    protected ObjectWriteResponse completeMultipartUpload(String bucketName..) throws InvalidBucketNameException... {
        Multimap<String, String> queryParams = HashMultimap.create();
        //...重点关注
        Response response = this.execute(Method.POST, bucketName, objectName, ...);
        Throwable var10 = null;

        try {
            String bodyContent = new String(response.body().bytes(), StandardCharsets.UTF_8);
            bodyContent = bodyContent.trim();
         ....
        } catch (Throwable var27) {
            var10 = var27;
            throw var27;
        } finally {
            if (response != null) {
                if (var10 != null) {
                    try {
                    //...重点关注
                        response.close();
                    } catch (Throwable var24) {
                        var10.addSuppressed(var24);
                    }
                } else {
                //...重点关注
                    response.close();
                }

个人实践

当我们的java应用运行时,突然出现内存占用暴增,说明系统中存在长期占用的对象无法回收,或者出现巨大的对象如何快速定位产生的大对象是什么?
在这里插入图片描述

1

在这里插入图片描述
在这里插入图片描述
内存,线程,cpu监控面板
dashboard
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第一个*是类,第二个是方法名,-x是查看深度

trace org.springframework.web.servlet.DispatcherServlet *				【追踪调用链】
jad org.springframework.web.servlet.DispatcherServlet doDispatch		【反编译方法】
watch org.springframework.web.servlet.DispatcherServlet getHandler 'returnObj'	【监听方法】
watch org.lmj.redis.controller.* * '{params,returnObj}' -x 3			【查看出参入参】

OOM和Full GC必问(学jvm最终就是为了解决这两个问题以及排查死锁/影响性能的代码)

在这里插入图片描述
2–配了哪些参数
3-哪个tab看到哪个大对象造成了OOM
实践图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

大型项目线上不让用dump,那么你需要考虑oom错误难以排查,所消耗的大量找错的人力,时间,所付出的代价

detail不用搞,但是dump还是需要设置的

OOM实际案例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值