关于jvm分析的指令以及jprofiler的初体验
2016-12-03 10:57
211 查看
介绍:
初步学习了一下linux相关获取jvm运行情况以及内存的对象状况的和获取dump文件的命令,以及利用jprofiler打开dump文件,利用jprofiler启动项目实时监控内存。但是只是模拟了一下,实际运用场景还是有待说明,感觉主要靠经验。
第一点,top命令
top命令先查出 占用cpu最高或者内存最高的java进程
这里可以看出pid为2142的java进程的cpu占用率以及 只用内存比较大
第二点,jmap -heap 2142
针对这个进程id显示他的内存信息 和配置信息
这里看出对内存的配置信息 以及下面的对内存的使用情况 包括eden区 拷贝的from 以及to区 以及
ps old 年老代 这些的使用情况 结合fullgc的周期性 和大小 younggc 可以分析项目的健康状况
可以适当优化jvm参数 不过一般不需要 都是代码的问题
第三点, jmap -histo 2142
显示对象的实例的个数 以及所占字节的图表
这里看出哪些对象的实例特别多 方便查询问题
第四点, jmap -dump:live,format=b,file=2.log 2142
生成dump文件
生成dump文件的过程
第五点,利用jprofiler打开dump文件
预览效果dump文件打开的效果
第六点,利用jprofiler实时监控项目运行情况 并模拟内存溢出的状况
利用jprofiler idea安装jprofiler的插件 启动之后 实时监控 内存 ,gc的频率, 对象的生成
线程的比例 有记录到线程的具体的 是否阻塞 多少阻塞 等 以及cpu使用率 的一系列图表 另外观察内存 还可以具体切换观察到eden psold 和整个heap区域的实际情况
模拟代码
这里循环创建 线程池 但是资源未释放 导致内存溢出。
访问之后 可以看出大量创建线程
并且大量threadpoolExecutor的资源没有被释放
另外jprofiler 的下载地址:http://www.ej-technologies.com/products/jprofiler/overview.html
以及注册方式:http://blog.csdn.net/attilax/article/details/17077857
这里主要是刚接触的 学习的过程 但是有很多问题还没搞清 后续实际用到这些知识解决问题 会更新博客
初步学习了一下linux相关获取jvm运行情况以及内存的对象状况的和获取dump文件的命令,以及利用jprofiler打开dump文件,利用jprofiler启动项目实时监控内存。但是只是模拟了一下,实际运用场景还是有待说明,感觉主要靠经验。
第一点,top命令
top命令先查出 占用cpu最高或者内存最高的java进程
这里可以看出pid为2142的java进程的cpu占用率以及 只用内存比较大
第二点,jmap -heap 2142
针对这个进程id显示他的内存信息 和配置信息
这里看出对内存的配置信息 以及下面的对内存的使用情况 包括eden区 拷贝的from 以及to区 以及
ps old 年老代 这些的使用情况 结合fullgc的周期性 和大小 younggc 可以分析项目的健康状况
可以适当优化jvm参数 不过一般不需要 都是代码的问题
第三点, jmap -histo 2142
显示对象的实例的个数 以及所占字节的图表
这里看出哪些对象的实例特别多 方便查询问题
第四点, jmap -dump:live,format=b,file=2.log 2142
生成dump文件
生成dump文件的过程
第五点,利用jprofiler打开dump文件
预览效果dump文件打开的效果
第六点,利用jprofiler实时监控项目运行情况 并模拟内存溢出的状况
利用jprofiler idea安装jprofiler的插件 启动之后 实时监控 内存 ,gc的频率, 对象的生成
线程的比例 有记录到线程的具体的 是否阻塞 多少阻塞 等 以及cpu使用率 的一系列图表 另外观察内存 还可以具体切换观察到eden psold 和整个heap区域的实际情况
模拟代码
@RequestMapping(value = "/test.rest") @ResponseBody public void test() { int a=5000000; //模拟内存溢出的场景 for(int i=0;i<a;i++){ ThreadPoolExecutor thread= new ThreadPoolExecutor(20, Integer.MAX_VALUE, 30l, TimeUnit.SECONDS, new SynchronousQueue<Runnable>()); final int s = i; thread.execute(new Runnable() { @Override public void run() { System.out.println(s); } }); } }
这里循环创建 线程池 但是资源未释放 导致内存溢出。
访问之后 可以看出大量创建线程
并且大量threadpoolExecutor的资源没有被释放
另外jprofiler 的下载地址:http://www.ej-technologies.com/products/jprofiler/overview.html
以及注册方式:http://blog.csdn.net/attilax/article/details/17077857
这里主要是刚接触的 学习的过程 但是有很多问题还没搞清 后续实际用到这些知识解决问题 会更新博客
相关文章推荐
- 关于jvm分析的指令以及jprofiler的初体验
- 关于JVM中方法调用的相关指令,以及解析(Resolution)和分派(Dispatch)的解释——重载的实现原理与重写的实现原理
- blog流量分析以及关于如何提高CSDN blog访问数量的初步方法
- 关于WAMP出现无法启动的一些分析以及解决思路
- ARM中指令的学习和分析(用法、格式以及英文全称)
- 关于几个iOS 7 API的功能分析:文本转语音、免费托管IAP以及3D地图等
- jQuery 遍历- 关于closest() 的方法介绍以及与parents()的方法区别分析
- 关于java中ReentrantLock类的源码分析以及总结与例子
- Lua源码分析 -- 虚拟机以及指令解释
- 关于页面动态创建多个highcharts图表所产生的问题汇总以及分析
- 关于网站表现层和后台的一点思考--以及转载的三大WEB服务器(Apache ,Lighttpd,Nginx)对比分析
- 看到的强大的分析贴关于String对象的创建以及管理(学习了)
- 关于产业升级空间智能平台(有感于中国产业分析平台以及赛迪发布产业地图白皮书的锋芒)
- 关于堆排序建堆时间以及堆排序的分析之暑假学习记录
- 关于360安全浏览器的分析以及奇虎360走向。。【个人原创】
- 推荐几本书,关于智能、生命、网络以及数据分析
- 关于动态存储分配函数的调用,在已经过排序的数组中查找及删除内容的操作,余数的分析,删除字符数组中的空格,对链表的逆置,在源字符串中查找子字符串的个数,函数指针以及函数的调用,循环赋值带来的问题以及插入
- 关于jsp的静态include和动态include以及forword标签和param指令
- 用jvm指令分析String 常量池