JMAP

cpu和内存问题排查套路

妖精的绣舞 提交于 2020-08-05 10:30:43
查看cpu ----1 线程占cpu高 top -Hp 123 printf '%x' 32826 jstack 1501|grep -A 20 1b306 ----2 线程频繁切换 vmstat 1 10 pidstat -p pid -w 1 10 查看mem jstat -gcutil pid 1000 10 jmap -heap pid jmap -histo:live pid jmap -dump:format=b,file=/tmp/heap.bin pid jinfo pid 来源: oschina 链接: https://my.oschina.net/jzgycq/blog/4279991

线上问题排查命令

别等时光非礼了梦想. 提交于 2020-07-29 07:03:28
java进程排查 ps aux | grep java |grep -v grep dump内存:jmap -dump:format=b,file=/tmp/dump.dat jps -l 可以查看java进程的完整名(包括包) jinfo -flags <进程id> 查看java进程的一些参数 jinfo -flag <参数名> <进程id> 查看具体的参数 jstat -gc <进程id> jstat -gc <进程id> <毫秒> <次数> 多少秒打印一次,共打印多少次 netstat -anp|grep [port] 查看端口占用 lsof -i:[port] top -Hp pid 查看最消耗cpu的线程 Dump过程: ①top 查看%CPU占用情况,查看哪个java进程占用cpu比较高 jps -l 确定是哪个进程 jps -l 得到22243 ②ps -mp 进程号,tid,time 通过ps 查看具体哪个JVM线程,找到消耗cpu最大的线程(tid) #ps -mp 22243 -o THREAD,tid,time ③然后把上面消耗cpu最大的线程id(tid)转化为16进制,在shell中使用printf “%x\n” tid即可,我当时的线程得到的16进制id为:56ed: printf “%x\n” 22253 ④用jstack 查看具体线程栈信息

工具集之jvm、linux

戏子无情 提交于 2020-07-29 05:48:42
谢谢《32个java面试必考点》王雷老师 新浪微博资深技术专家 ,大家多多支持 jps 用来查看 Java 进程的信息,包括进程 id、主类名称、主类全路径等。 jmap 可以查看JVM中对象的统计信息,包括内存占用、实例个数、对象类型等等,jmap 可以把堆 dump 下来配合内存分析工具 MAT 进行分析。 jstat 对 JVM 的资源和性能进行实时监控,统计项主要包括:类加载情况、内存容量及使用量、 GC 次数和时间等等。 jstack 可以查看 JVM 线程栈的信息,包括:线程名称、序号、优先级 prio、线程状态、锁状态等。 jinfo 可以查看运行中 JVM 的全部参数,还可以设置部分参数。 jcmd 是 JDK1.7 后提供的工具,可以向 JVM 发送诊断命令。它的功能非常强大,基本上包括了 jmap、jstack、jstat 的功能。可以重点了解这个工具。 其他还有 jconsole、JProfiler、jvisualVM 等,功能跟 JMC 基本重合,建议直接使用 JMC 即可。 当你排查线上问题,需要查看 GC 日志,发现没有打印 GC 的详细信息,可以通过 jinfo 开启 JVM 参数 PrintGCDetails 来动态生效。 当你分析内存泄露风险时,可以通过 jmap 或 jcmd 定期获取堆对象的统计信息,来发现持续增长的可疑对象。

jvm~xmx设置多少合适

∥☆過路亽.° 提交于 2020-07-28 13:11:20
Java整个堆大小设置 Xmx 和 Xms设置为老年代存活对象的3-4倍,即FullGC之后的老年代内存占用的3-4倍 永久代PermSize和MaxPermSize设置为老年代存活对象的1.2-1.5倍。 永久区并不是老年代的1.2到1.5倍,而是FullGC后永久区的1.2到1.5倍 1.2x to 1.5x permanent generation space 年轻代Xmn的设置为老年代存活对象的1-1.5倍。 老年代的内存大小设置为老年代存活对象的2-3倍。 查看进行的堆内存 jmap -head PID 1、Sun官方建议年轻代的大小为整个堆的3/8左右, 所以按照上述设置的方式,基本符合Sun的建议。 2、堆大小=年轻代大小+年老代大小, 即xmx=xmn+老年代大小 。 Permsize不影响堆大小。 3、为什么要按照上面的来进行设置呢? 没有具体的说明,但应该是根据多种调优之后得出的一个结论。 触发fullGc,查看老年代对象大小 使用jmap工具可触发FullGC jmap -dump:live,format=b,file=heap.bin <pid> 将当前的存活对象dump到文件,此时会触发FullGC jmap -histo:live <pid> 打印每个class的实例数目,内存占用,类全名信息.live子参数加上后,只统计活的对象数量.

阿里内部员工,排查Java问题常用的工具单

青春壹個敷衍的年華 提交于 2020-07-28 01:51:32
这是一篇来源于阿里内部技术论坛的文章,原文在阿里内部获得一致好评。作者已经把这篇文章开放到云栖社区中供外网访问。Hollis对文章内容做了部分删减,主要删减掉了其中只有阿里内部才能使用的工具的介绍,并删减掉部分只有通过阿里内网才能访问到的链接。 前言 平时的工作中经常碰到很多疑难问题的处理,在解决问题的同时,有一些工具起到了相当大的作用,在此书写下来,一是作为笔记,可以让自己后续忘记了可快速翻阅,二是分享,希望看到此文的同学们可以拿出自己日常觉得帮助很大的工具,大家一起进步。 闲话不多说,开搞。 Linux命令类 tail 最常用的tail -f tail -300f shopbase.log #倒数300行并进入实时监听文件写入模式 grep grep forest f.txt #文件查找 grep forest f.txt cpf.txt #多文件查找 grep 'log' /home/admin -r -n #目录下查找所有符合关键字的文件 cat f.txt | grep -i shopbase grep 'shopbase' /home/admin -r -n --include *.{vm,java} #指定文件后缀 grep 'shopbase' /home/admin -r -n --exclude *.{vm,java} #反匹配 seq 10 | grep 5

面试官:说说你了解哪些JDK自带的命令行工具

断了今生、忘了曾经 提交于 2020-07-27 13:59:01
不看不知道,一看吓一跳,原来JDK自带了这么多工具,本文主要介绍一下工作中常用的JDK工具以及使用方法和使用场景。 jps:虚拟机进程状况工具 是工作中排查问题使用率最高的命令之一,用于列出正在运行的虚拟机进程,并显示虚拟机执行主类名称以及这些进程的本地虚拟机唯一ID。 语法是 jps [options] [hostid] ,常用的选项如下: 选项 作用 -l 输出主类的全名,如果进程执行的是jar包,输出jar路径 -v 输出虚拟机进程启动时JVM参数 -q 只输出pid,省略主类的名称 -m 输出虚拟机进程启动时传递给主类main()函数的参数 jps可以通过RMI协议查询开启了RMI服务的远程虚拟机进程状态,hostid为RMI注册表中注册的主机名。 jstat:虚拟机统计信息监视工具 jstat是用于监视虚拟机各种运行状态信息的命令行工具。他可以显示本地或者远程虚拟机进程中的类加载、内存、垃圾收集、JIT编译等运行数据,在没有GUI图形界面,只提供了纯文本控制台环境的服务器上,它将是运行期间定位虚拟机性能问题的首选工具。 语法为 jstat [option vmid [interval [s|ms] [count]] ] ,常用的选项如下: jinfo:Java配置信息工具 用来实时查看和调整虚拟机各项参数。 语法为 jinfo [option] pid ,常用选项如下:

深入理解JVM一java堆分析

回眸只為那壹抹淺笑 提交于 2020-05-07 22:00:55
上一节介绍了针对JVM的监控工具,包括JPS可以查看当前所有的java进程,jstack查看线程栈可以帮助你分析是否有死锁等情况,jmap可以导出java堆文件在MAT工具上进行分析等等。这些工具都非常有用,但要用好他们需要不断的进行实践分析。本文将介绍使用MAT工具进行java堆分析的案例。 一、内存溢出(OOM)的原因 我们常见的OOM(OutOfMemoryError)发生的原因不只是堆内存溢出, 堆内存溢出 只是OOM其中一种情况,OOM还可能发生在 元空间、线程栈、直接内存 。 下面演示在各个区发生OOM的情况: 1、堆OOM public static void main(String[] args) { List <Byte[]> list= new ArrayList<Byte[]> (); for ( int i=0;i<100;i++ ){ // 构造1M大小的byte数值 Byte[] bytes= new Byte[1024*1024 ]; // 将byte数组添加到list列表中,因为存在引用关系所以bytes数组不会被GC回收 list.add(bytes); } } 以上程序设置最大堆内存50M,执行: 显然程序通过循环将占用100M的堆空间,超过了设置的50M,所以发生了堆内存的OOM。 针对这种OOM,解决办法是增加堆内存空间

JVM学习--(八)java堆分析

限于喜欢 提交于 2020-05-07 22:00:32
上一节介绍了针对JVM的监控工具,包括JPS可以查看当前所有的java进程,jstack查看线程栈可以帮助你分析是否有死锁等情况,jmap可以导出java堆文件在MAT工具上进行分析等等。这些工具都非常有用,但要用好他们需要不断的进行实践分析。本文将介绍使用MAT工具进行java堆分析的案例。 内存溢出(OOM)的原因 我们常见的OOM(OutOfMemoryError)发生的原因不只是堆内存溢出, 堆内存溢出 只是OOM其中一种情况,OOM还可能发生在 元空间、线程栈、直接内存 。 下面演示在各个区发生OOM的情况: 堆OOM public static void main(String[] args) { List<Byte[]> list=new ArrayList<Byte[]>(); for(int i=0;i<100;i++){ //构造1M大小的byte数值 Byte[] bytes=new Byte[1024*1024]; //将byte数组添加到list列表中,因为存在引用关系所以bytes数组不会被GC回收 list.add(bytes); } } 以上程序设置最大堆内存50M,执行: 显然程序通过循环将占用100M的堆空间,超过了设置的50M,所以发生了堆内存的OOM。 针对这种OOM,解决办法是增加堆内存空间,在实际开发中必要的时候去掉引用关系

常见Java性能问题一招帮你解决,80%的人都不知道

纵饮孤独 提交于 2020-05-07 13:12:01
概述 性能优化一向是后端服务优化的重点,但是线上性能故障问题不是经常出现,或者受限于业务产品,根本就没办法出现性能问题,包括笔者自己遇到的性能问题也不多,所以为了提前储备知识,当出现问题的时候不会手忙脚乱,我们本篇文章来模拟下常见的几个Java性能故障,来学习怎么去分析和定位。 另外要注意:光理论是不够的,Java架构项目经验永远是核心,如果你没有最新JAVA架构实战教程及大厂30k+面试宝典,可以去小编的Java架构学习.裙 :七吧伞吧零而衣零伞 (数字的谐音)转换下可以找到了,里面很多新JAVA架构项目教程,还可以跟老司机交流讨教! 预备知识 既然是定位问题,肯定是需要借助工具,我们先了解下需要哪些工具可以帮忙定位问题。 top命令 top 命令使我们最常用的Linux命令之一,它可以实时的显示当前正在执行的进程的CPU使用率,内存使用率等系统信息。 top -Hp pid 可以查看线程的系统资源使用情况。 vmstat命令 vmstat是一个指定周期和采集次数的虚拟内存检测工具,可以统计内存,CPU,swap的使用情况,它还有一个重要的常用功能,用来观察进程的上下文切换。字段说明如下: r: 运行队列中进程数量(当数量大于CPU核数表示有阻塞的线程) b: 等待IO的进程数量 swpd: 使用虚拟内存大小 free: 空闲物理内存大小 buff: 用作缓冲的内存大小