zoukankan      html  css  js  c++  java
  • jprofiler监控分析

    jprofiler
    jprofiler不向下兼容,也不向上兼容,7连不上6,6也连不上7,客户端和服务器端的版本号必须一致,分两个维度,cpu热点分析和内存泄漏,打开jprofiler的默认页面时堆内存(Memory Views),用压测工具webbench压http://192.168.2.199:8080/test1/init1.jsp,直到页面里出现导致内存泄漏的方法为止,如下图:

    是这个方法cn.test.TestBean导致内存泄漏的,定位到问题了,要看是否是这个方法导致内存泄漏,是否是点击按钮后对象被回收掉,强制执行full gc后感觉没什么变化,看的不明显,点击Mark Current按钮,会多出一列,多出列如下:

    再压http://192.168.2.199:8080/test1/init1.jsp页面,出现如下:

    看到有红色的,说明实例个数有增加,在Difference里也可以看到增加53%,然后再压,发现实例数一直在增加,从来没有释放过

    参照上面的实例数或百分比都可以看出来一直在增加,实例数是950000,上面的是690000,Difference也是111%,大于上面的53%,强制进行full gc,即点击按钮,也没有变化,有的方法在减少,如下图:

    那么这个方法cn.test.TestBeanclass很有可能造成内存溢出,方法名找到后去看源代码,告诉开发哪里写的不合理,如果不懂代码也可以了,最起码找到哪个方法有问题了,如果怀疑哪个方法有问题,就把这个方法放到Class Tracker里进行单独观察,发现full gc也没有变化,单独把这个方法放到了内存快照里看,把鼠标放在cn.test.TestBean上面,右键弹出Show Selection In Heap Walker,弹出

    这个过程会比较慢,这个原因是哪个情况造成的都显示的很清楚,在Graph里可以看到如下图:

    右键,弹出如下图:

    都可以在红框里面看

    尽可能不用jprofiler,因为工具是基于RMI的东西,在连接中会产生大量的对象(要监控,要插桩,要取样),会影响jvm的性能,太耗性能,打点多,拦截多,尽可能不用,要是想用,可以考虑使用jvisualvm,工具都比较耗性能,dump堆内存之后,可以看到如下图:

    右键cn.test.TestBean,选择第一个Use Selected Instances,选中Allocations,点击OK,弹出如下图:

    切换到References,点击Show In Graph按钮,展示如下图:

    通过打开的图表可以得到图形调用关系,如下图:

    刚才只是定位到了方法,定位到了页面,没有定位到sql语句,好的情况下可以看出是定位到哪个sql语句的调用造成cpu热点消耗很高,定位到最底层的sql语句

  • 相关阅读:
    优秀IT技术文章集(最新)(高质量)
    大型网站系统架构演化之路
    一起学Maven
    Drupal8 新建第一个模块
    理解依赖注入(Dependency Injection)
    Yii2 模块module笔记
    Drupal views 学习之筛选器
    Drupal views 学习之初识
    Drupal views 中合并显示字段
    解读python手册的例子a, b = b, a+b
  • 原文地址:https://www.cnblogs.com/laosun0204/p/8759896.html
Copyright © 2011-2022 走看看