范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

JDK常用监控指令和监控工具及OutOfMemory异常分析

  推荐阅读:基于SSM+Shiro+Layui+Easyui权限管理系统 超详细的MySQL工作原理 体系结构 OAuth2.0分布式系统环境搭建 JVM参数
  所谓的JVM调优说白了就是去设置一个合理的,适合当前系统的JVM所提供的参数。从总体上来说JVM参数可以分为三大类:标准参数,-X参数,-XX参数。标准参数
  以"-"开头的参数称之为标准参数,标准参数是任何一个JDK版本都支持的参数,比较稳定,一般不会随着jdk版本的变化而变化。
  比如:-version -help -server -cp-X参数
  以-X开头的参数是在特定版本HotSpot支持的命令,jdk版本变化之后,参数可能会发生变化。这个参数用的比较少。如以下几种:-Xint   解释执行 -Xcomp  第一次使用就编译成本地代码 -Xmixed  混合模式,JVM自己来决定
  这种参数用的比较少,了解就可以了,在这里不做演示-XX参数
  -XX是一种不稳定的参数,下一个版本可能会取消。-XX是JVM调优时的主要参数。
  -XX参数分为Boolean型和非Boolean型。Boolean型
  Boolean类型的-XX参数使用格式为:-XX:[+-]      +或-表示启用或者禁用name属性
  如:-XX:+UseConcMarkSweepGC  表示启用CMS类型的垃圾回收器 -XX:+UseG1GC             表示启用G1类型的垃圾回收器 -XX:+PrintFlagsFinal     表示打印出所有的JVM参数信息打印所有JVM参数
  我们用-XX:+PrintFlagsFinal去打印一下所有的参数出来看一下:
  任意新建一个Java类:package com.zwx.jvm;  public class TestJVMParam {     public static void main(String[] args) {         System.out.println(11);     } }
  本人用的是IntelliJ IDEA工具,选择:Run–>Edit Configurations,然后点击左边的+号,选择Application,出现如下所示界面,加入JVM参数:
  然后运行main方法,就会打印出所有参数(有700多个):
  注意:上图中打印出来的参数中"="表示默认值,":="表示被用户或JVM修改后的值非Boolean型
  非Boolean类型的-XX参数的使用格式为:-XX=    name表示属性,value表示属性对应的值
  如:-XX:MaxMetaspaceSize=5M    设置最大永久代空间大小(jdk1.8)其他参数
  还有其他一些我们非常常用的参数,比如:-Xms,-Xmx,-Xss,但是实际上这几种参数也是属于-XX参数,这几种写法不过就是一种为了方便而设置的简写形式。所以在上面打印出来的参数中搜索-Xms,-Xmx,-Xss是搜索不到的。-Xms1000等价于-XX:InitialHeapSize=1000 -Xmx1000等价于-XX:MaxHeapSize=1000 -Xss100等价于-XX:ThreadStackSize=100常用JVM参数
  常用命令监控工具
  jdk中的bin目录下提供了许多功能强大的工具可以帮助我们监控虚拟机的使用情况,掌握了这些常用工具的使用可以帮助我们更快更直观的分析问题。
  工具和参数都是在不断使用的过程中掌握的,并不需要一下子就全部看完,可以大致浏览有个印象,建议大家可以收藏本篇文章,后续需要用到的时候方便查看
  以下的演示均是基于linux环境下jdk1.8版本进行演示,不能环境和版本可能会有较大差异。Java(TM) SE Runtime Environment (build 1.8.0_151-b12)jps
  jps:JVM Process Status Tool,一款用于查看java进程的工具。这款工具的功能非常简单,就是查看当前环境下运行的java服务的进程id和名称,一般其他命令使用前都会先使用jps命令获取java进程信息。
  如下图所示:
  jps参数主要有如下选项:
  jstat
  jstat:JVM Statistics Monitoring,一款用于监视虚拟机各种运行状态统计信息工具。主要可以显示如下信息:虚拟机进程的类装载、内存、垃圾收集、JIT编译等运行数据信息。查看类装载信息jstat -class PID 1000 10 //查看某个java进程的类装载信息,每1000毫秒输出一次,共输出10次
  查看垃圾收集信息jstat -gc PID 1000 10
  上图中就显示个各个区以及垃圾回收的情况,具体代表含义如下:
  注意:C表示Capacity(容量),U表示Used(已使用大小)1、S0C、S1C表示的是Survive区的S0和S1大小(Capacity)2、S1U、S2U表示已使用空间大小(Used)3、EC、EU分别表示Eden区总容量和已使用容量大小4、OC、OU分别表示老年代总空间大小和已使用大小5、MC、MU:表示方法区(jdk1.8中通过Metaspace实现)的总空间大小和已使用大小6、CCSC、CCSU:表示压缩类空间总大小和已使用大小7、YGC、YGT:新生代GC次数和GC总耗时8、FGC、FGCT:Full GC次数和Full GC总耗时9、GCT:GC总消耗时间
  jstack
  jstack:Stack Trace for Java,一款用于生成当前时刻的线程状态信息的快照工具。这个对于用来分析当前线程状态时非常有用的,比如说是否有哪个线程阻塞了,或者说是否发生死锁等信息。
  如:jstack PID
  可以清晰的看到当前线程的状态。另外线程的名字也会打印出来,所以在我们自己创建线程的时候建议是采用自定义的名称,这样如果有异常我们可以很容易的知道是哪个线程出了问题。jstack参数常用选项jinfo
  jinfo:Configuration Info For Java,一款用于实时查看和修改JVM参数的工具。
  注意,如果是修改的话,只能用我们上面使用命令打印出来参数中的manageable类型才可以被修改。jinfo -flag name PID 查看某个java进程的name属性的值 jinfo -flags PID 查看已经赋值的JVM参数
  针对Boolean类型的-XX参数修改命令为:jinfo -flag [+|-]name PID
  针对非Boolean类型的-XX参数修改命令为:jinfo -flag name=value PID
  如:
  jmap
  jmap:Memory Map for Java,一款用于生成堆转储快照即dump文件的命令。
  如:jmap -heap PID  //打印出堆内存相关信息
  jmap -dump:format=b,file=/usr/heap.hprof PID //生成dump文件
  但是其实上面的常用参数中也有一个参数可以设置,一旦发生OutOfMemoryError之后就会自动生成dump文件,这对我们分析生产环境发生OOM的原因是非常重要的。
  如下,我们再idea中进行设置自动生成dump文件:-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heap.hprof
  我们利用在JVM系列文章1中所提供的一个堆内存的例子来进行演示一下:
  运行之后发生OOM异常,然后可以找到对应目录下已经生成了dump文件。
  既然我们生成了dump文件,肯定是要对文件进行分析的,但是我们怎么分析这个文件呢?因为直接打开时乱码的,所以我们肯定需要一款工具来对dump文件进行分析jhat
  jhat:JVM Heap Analysis Tool,一款用来分析dump文件的工具。
  如:jhat heap.hpro
  然后访问地址:http://localhost:7000/。
  可以看到,这款工具所展示的信息比较简单,而且因为是命令形式的,所以很难直接分析出问题,一般情况如果有其他工具可以选择的话,并不建议使用这款工具来分析,接下来我们就来看一看可视化工具的使用可视化监控工具JConsole工具
  JConsole:Java Monitoring and Management Console,是一款JDK自带的可视化监控工具。其实就是把上面的比如jstat,jstack等命令工具统计的信息可视化了,主要可以查看java应用程序的运行概况、监控堆信息、永久区使用情况、类加载情况等信息。
  JConsole使用方式可以直接在命令行中输入命令:jconsole,或者直接找到jdk安装目录下找到jconsole.exe执行文件,双击打开即可。
  本地连接的话很简单,选中一个服务双击即可,如果是远程连接,需要远程的Java服务在启动的时候就配置JMX相关连接参数。
  进入之后看到如下界面:
  可以看到顶部有6个标签可以切换,在这里就不详细去介绍每个地方有什么用了,自己去尝试的话其实是一目了然的,可以看到内存各个区间的使用情况,线程信息(线程名字都会展示),以及类加载等信息。VisualVM工具
  VisualVM:All-in-one Java TroubleshootingTool,是JDK发布的一款功能最强大的运行监控故故障处理工具,正如名字所说的All-in-one,可以预见这是一款功能非常齐全的工具。
  VisualVM主要功能如下:显示虚拟机进程及进程的配置环境信息(jps、jinfo功能)。监视应用程序的CPU、GC、堆、方法区和线程信息(jstat、jstack功能)。dump文件生成及分析(jmap、jhat功能)。方法级的程序性能分析,可以找出被调用最多,运行时间最长的方法。离线程序快照:收集程序运行时配置、线程dump、内存dump等信息建立一个快照,并可以将快照发送开发者处进行Bug反馈插件化处理,可以有无限扩展的可能性
  打开VisualVM工具的方式可以直接在命令行中输入命令:jvisualvm,或者直接找到jdk安装目录下找到jvisualvm.exe执行文件,双击打开即可。
  打开之后在左边选择自己的本地或者远程应用(同样需要远程服务支持JMX服务)之后,可以看到右边界面,注意,默认只有前面5个页签,最后一个页签是插件加入进来的,不同的插件可以看到不同的功能,我这边选择的插件是com-sun-tools-visualvm-modules-visualgc.nbm插件,这是一个比较有意思的插件,我们在之前分析Java堆内存划分的一篇文章中提到了一个对象的在堆内的流转图,这个插件打开之后可以动态演示堆内各个区域内存变化,感兴趣的可以尝试下。插件使用和下载
  点击主界面工具栏内:工具–>插件–>已下载–>添加插件,然后安装即可,如下图:
  安装之后重新打开就可以看到多了一个页签,打开之后可以实时监控内存变化
  在插件页面点击设置可以看到最新的插件下载地址(需要vpn才能连接):
  分析dump文件
  假如生产环境发生OutOfMemoryError,我们拿到dump文件之后,就可以借助VisualVM来使用,点击工具栏中文件–>装入(注意要选择文件类型),然后找到对应的dump文件就可以打开了
  打开之后点击"类":
  可以看到是Integer对象撑爆了内存,因为上面的例子是是一个非常简单的demo,就是不断地往list中添加了Integer数据,所以结合工具可以非常清晰的看到是这个对象出了问题,从而定位到问题所在。
  这个工具也可以直接dump文件:
  这个工具也可以实时设置自动dump文件分析:
  总之这是款非常强大的工具,还有其他许多功能,而且插件化工作原理使得其提供了无限的功能扩展,有兴趣的可以自己去官网下载不同的插件下来进行试用其他工具
  除了JVM官方提供的工具,还有其他第三方也提供了一些非常优秀的工具可以帮助我们更好的分析dump文件,比如说阿里巴巴提供的在线实时分析工具Arthas,还有 MAT,Histogram等都是非常优秀的工具。总结
  本文主要介绍了一些JVM的一些常用参数的使用,以及JVM提供的一些常用的监控工具,并且利用一个OOM例子结合工具来讲述了如何分析OOM时的dump文件,当然,本文的主要目的是告诉大家有哪些工具可以使用,但是对一个工具的使用并没有非常详细的介绍,大家都是程序员,相信只要知道了有这么一款工具,使用的时候也可以非常容易上手,关键在于实践,多使用才能积累经验。工具毕竟只是工具,只是可以更好的帮助我们分析问题,更重要的是发现问题之后该如何针对问题进行修改和优化,这才是使用工具的目的。

智能电视,各个品牌之间的差异到底有多大?在选购数码家电的时候,许多人最先考虑的问题,是该买哪个品牌的。这点无论是手机电脑,还是电视空调都不例外。在很多情况下,品牌决定了一个产品的调性是极致的性价比还是望而却步的高端气质,多重安全功能360高清看护,体验小白智能摄像机Y2云台尊享版孩子幼儿园放暑假之后一直跟着爷爷奶奶待在家里,平时除了外出逛逛超市公园之外就是在家里看看书画画绘本,偶尔也看一段时间的动画片,但是我跟她妈妈这边每天忙着工作很难做到全天候的陪伴。所彭博苹果公司计划为iPhone增加卫星功能,以应对紧急状况彭博8月31日报道,苹果公司为iPhone加入卫星功能的计划将侧重于紧急情况,允许用户向应急部门发送短信,以及在没有手机信号的地区报告坠机沉船之类的事件。据知情人士称,该公司正在开空调有着四大基础功能,增加的八项附加功能实用性好吗?空调是我们常用的温度调节设备,在生活中充当着我们的好帮手,科技人员也在对空调的功能进行不断地改进和研发,因此空调的附加功能越来越多,除了空调的基础功能之外,增加的八项附加功能实用性平价蓝牙耳机什么牌子好?博主分享五款超高性价比蓝牙耳机魏哥身为数码博主,最近收到很多粉丝的私信咨询平价蓝牙耳机什么牌子好,蓝牙耳机这两年持续火爆,成为我们必备的数码单品,很多朋友都希望能买到性价比高的蓝牙耳机。魏哥今天就满足大家要求,辅助驾驶事故频发,特斯拉新增驾驶员监控系统(DMS)几个月前,特斯拉推出了一种新的驾驶员监控系统(DMS),该系统使用Model3ModelY和新的ModelS机舱摄像头来帮助确定驾驶员是否注意道路,基于摄像头的DMS使得特斯拉的安不可磨灭的华为经典华为AscendP62013年6月18日,华为发布Ascendp6系列,华为Ascendp6搭载了1。5GHz海思k3v23G四核处理器,机身厚度仅6。18毫米,双卡版6。48毫米,是当时全球最薄的智新车日产全新微型电动车明年亮相!对标五菱宏光MINIEV?文懂车帝原创周桐懂车帝原创产品近日,懂车帝从海外媒体处获悉,日产将于明年春天正式发布一款微型纯电车型。而最近日产在申报信息中也透露,新车有可能被命名为SAKURA(中文译名樱花)。大数据精准采集软件系统当互联网出现彭勃发展,当大数据井喷式的涌向市场,众多互联网新生产品就在这个社会上线了!大数据采集系统就是其中的一项明星产品!现在很多朋友已经有所了解,所谓的精准大数据采集系统什么呢年轻人的第一台插电混动?领克COPHEV你值得拥有销量连续三年超过100万辆,连续六年位居全球第一工信部装备工业发展中心近日发布的中国汽车产业发展年报2021,展现了新能源汽车发展的强劲势头。在产业发展向好的形势下,新能源汽车消费iPhone13能打卫星电话?事情没有那么简单在警匪片的世界里,一个大反派可以没有笔挺的西装反光的墨镜,但一定要有一台超凡脱俗的卫星电话。这可能是因为大反派阴险狠辣的形象已经深入人心,而用一台除了全球通信啥都不能干的卫星电话来
腾讯诉5G芝麻平台预装英雄联盟等游戏获赔88万蓝鲸TMT频道2月15日讯,天眼查App显示,近日,深圳市腾讯计算机系统有限公司杭州祺韵网络技术有限公司等著作权权属侵权纠纷民事一审民事判决书公布。文书显示,原告腾讯诉称,被告祺韵自带300个游戏,Steam掌机即将发售作为主机御三家的任天堂,其主机掌机的策略一直是独一份的,switch外出可以当便携式掌机,在家接电视又是一台性能刚够用的主机,可以说是想象力和技术力的结合(也可以说是妥协),也让它测评DOMINObySIM2DTVS激光电视实现色彩与亮度的跃升,并强化游戏性能从型号上来看,DTVS与DTV一样同属于DONIMO系列,外形上也完全延续了此前的意大利威尼斯GINDOLA建筑装饰栅格艺术设计风格,大胆采用高光仿水晶玻璃材质与流畅金属线条,最终书智能商业,主导未来的新商业模式你好,我是bluehouse456,期待大家的点赞与关注,这是对我最大的支持,谢谢!你好,今天为大家解读的是智能商业。它的作者,是中国互联网界的超级智囊,阿里巴巴集团的军师,曾鸣。手机预装软件删不掉?新规拟要求除基本功能软件外均可卸载南都讯记者蒋琳智能手机预装多个App且无法卸载的行为将迎来规范。近日,工业和信息化部(下称工信部)信息通信管理局发布关于进一步规范移动智能终端应用软件预置行为的通告(征求意见稿)并中国发布丨工信部拟规定除基本功能软件外的预置App均可卸载中国网2月17日讯工业和信息化部日前公开对关于进一步规范移动智能终端应用软件预置行为的通告(以下简称通告)征求意见,通告指出,生产企业应确保除基本功能软件外的预置应用软件均可卸载,网易云音乐上线无缝播放功能支持全格式音频品玩2月17日讯,近日,网易云音乐上线无缝播放功能,带来更专业的数字音乐内容体验。无缝播放(GaplessPlayback),是指对播放列表中歌曲无间断的播放,使前后两首歌无缝衔接智能手机成瘾榜德国垫底,美国仅排18,中国排名全球第一文谛林审核子扬校正知秋全球手机市场从功能机时代升级为智能机时代后,智能手机在消费者的日常生活中开始扮演越来越重要的角色。时至今日,智能机已经成为大多数消费者的生活必需品,移动支付以好多中老年手机摄影班,这能算得上是摄影吗?攝影这个词,是不具备身份的代名词,不会拍照可以学习,更不能用年令段来划分。有点基础退休后,若再深造加以提升技能,无可厚非。俗话说姜还是老的辣。这个问题问的好有意思。好多中老年手机摄龙湖集团拟21。6亿元收购大股东智能科技及医疗服务资产9月29日晚间,龙湖集团控股有限公司发布公告称,公司拟以21。6亿元收购公司大股东孵化的智能科技及医疗服务资产。据公告,此次龙湖集团收购的两大资产中的智能科技资产为北京百佑科技有限容声冰箱哪款最值得买?性价比高吗?看完你就知道了说起容声的话大家应该都不是很陌生吧。我家里现在用的那台就是容声的对开门冰箱,在这台冰箱之前也是买的容声的对开门冰箱,只是颜色不一样。先说一下,我对它的整体印象吧,对开门确实比较的大