jStat

JVM:查看java内存情况命令

霸气de小男生 提交于 2020-08-13 21:03:18
jinfo:可以输出并修改运行时的java 进程的opts。 jps:与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号。 jstat:一个极强的监视VM内存工具。可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。 jmap:打印出某个java进程(使用pid)内存内的所有'对象'的情况(如:产生那些对象,及其数量)。 jconsole:一个java GUI监视工具,可以以图表化的形式显示各种数据。并可通过远程连接监视远程的服务器VM。 详细:在使用这些工具前,先用JPS命令获取当前的每个JVM进程号,然后选择要查看的JVM。 jstat工具特别强大,有众多的可选项,详细查看堆内各个部分的使用量,以及加载类的数量。使用时,需加上查看进程的进程id,和所选参数。以下详细介绍各个参数的意义。 jstat -class pid:显示加载class的数量,及所占空间等信息。 jstat -compiler pid:显示VM实时编译的数量等信息。 jstat -gc pid:可以显示gc的信息,查看gc的次数,及时间。其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。 jstat -gccapacity:可以显示,VM内存中三代(young,old

一个软件测试必问面试题——除了功能测试,你还会做什么测试?性能、自动化、兼容性... 【思维导图】

*爱你&永不变心* 提交于 2020-08-13 17:29:45
引言 用例设计是测试工程师的必备技能。所以在面试时会有一个用例设计的问题,比如:给你一个杯子怎么测试?扫码支付怎么测试?面试官会挑一个大家非常熟悉的产品的一个功能让设计用例。 面试官到底想考察什么? 衡量一个人员的水平,主要测试的 广度 和 深度 两个方面,这是面试官最关心的。 什么是测试的广度? 除了功能测试,你还会做什么测试?性能、自动化、兼容性... 我总结一个图供参考( 1079636098 )推荐软件测试交流群 什么是测试深度? 就拿扫码支付这个例子来说吧。 大家设计用例时可能会设计,这个码能不能扫成功、会不会自动化刷新、如果扫非本App码会怎么样、光线不好怎么办、容不容易扫出来、支付是否能成功、各种支付方式、使用红包、支付失败怎么办... 这些场景都比较基础。 二维码到底是什么?它是怎么存储数据的?如果存储URL的话,可以存储多少数据,数据多是不是不容易扫了 支付过程用https传输,是怎么传输的,什么TLS握手,如果用Burp Suite拦截,修改支付金额能支付成功吗? 支付时比较卡,怎么定位卡的原因,怎么用Time Profiler定位到卡顿地方 接口有性能问题,怎么定位,什么是Full GC,怎么用jstat、jstack、jmap定位问题... 这就是测试的深度 怎么回答到这个问题? 这个是什么App,什么功能确定后。要冷静,不要马上回答。即使像微信这种常用软件

一份详尽的 Java 问题排查工具清单,值得收藏!

微笑、不失礼 提交于 2020-08-12 20:59:45
作者:红魔七号 https://yq.aliyun.com/articles/69520 前言 平时的工作中经常碰到很多疑难问题的处理,在解决问题的同时,有一些工具起到了相当大的作用,在此书写下来,一是作为笔记,可以让自己后续忘记了可快速翻阅,二是分享,希望看到此文的同学们可以拿出自己日常觉得帮助很大的工具,大家一起进步。 闲话不多说,开搞。 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 -A 3 #上匹配 seq 10 | grep 5 -B 3 #下匹配 seq 10 | grep 5 -C 3 #上下匹配,平时用这个就妥了 cat f

一个不合理的 JVM 参数设置引发的一场线上惨案。。。

南楼画角 提交于 2020-08-09 19:54:27
凌晨3点,一阵急促的铃声把老王惊醒。。。 “老大,线上系统好像出问题了,频繁Full GC,系统一直处于卡顿状态。。。” 听到Full GC的那一刻,老王就已睡意全无,他知道,马上又要看到凌晨3点的北京了。 “小猛,先别着急,你和彪子先去线上看看GC日志,我这边马上赶到!” 想想自己的年终奖、KPI,看着自己熟睡的儿子,老王哪敢怠慢,匆匆穿上衣服,一头扎进北京初冬的寒风中。。。 一小时后,某创业公司。。。 空荡荡的写字楼灯火通明,两个年轻的工程师正在紧张的操作,时不时的交头接耳。 老王快步向前,也顾不得跟两个小弟打招呼,连忙问道:现在情况怎么样? “还是跟之前一样,频繁Full GC,系统卡死。。。”,小猛和彪子不敢隐瞒,马上把情况报告给老大 查看 JVM GC 日志 没有一丝耽搁,老王立刻调出了线上GC日志,在日志里,看到了一个“ Metadata GC Threshold ”的字样,类似于如下日志: 【Full GC(Metadata GC Threshold)xxxxx, xxxxx】 通过GC日志,老王立即定位到这次频繁的Full GC,实际上是JDK 1.8以后的 Metadata元数据区 导致的。 奇怪了,Metadata区域一般是放一些加载到JVM里去的类,为什么会被频繁的塞满,进而触发Full GC呢? 老王陷入了沉思,一旁的小猛和彪子只是静静的看着,大气也不敢出。

这是一份稳收秋招offer的jvm常见面试题指南,助你成为offer收割机

 ̄綄美尐妖づ 提交于 2020-08-09 19:53:20
JVM是java从业者,必须要迈过的坎,不管你是初级、中级还是高级,都是必须掌握的,而且在面试中,jvm也是必考题,如果你不深入了解话,那去面试找工作肯定是有点难受的。 本文将重点介绍面试过程中常见的 JVM 题目,将面试题分为三大类:基础题目,进阶题目,实战题目 。 基础 1.1 JDK、 JRE、JVM 的关系是什么? 什么是 JVM ? 英文名称 ( Java Virtual Machine ),就是 JAVA 虚拟机, 它只识别 .class 类型文件,它能够 将 class 文件中的字节码指令进行识别并调用操作系统向上的 API 完成动作。 什么是 JRE ? 英文名称( Java Runtime Environment ),Java 运行时环境。 它主要包含两个部分:JVM 的标准实现和 Java 的一些基本类库。相对于 JVM 来说,JRE多出 来一部分 Java 类库。 什么是 JDK? 英文名称( Java Development Kit ),Java 开发工具包。 JDK 是整个 Java 开发的核心,它集成了 JRE 和一些好用的小工具。 例如:javac.exe、java.exe、jar.exe 等。 这三者的关系:一层层的嵌套关系。JDK > JRE > JVM。 1.2 JVM 的内存模型以及分区情况和作用 如下图所示: 黄色部分为线程共有

JAVA和GO真香!谁用谁知道!

馋奶兔 提交于 2020-08-08 20:51:31
  今天面了个32岁的Java程序员,各方面都挺好,问啥都会,对于JVM调优问题,答得还行,最后问了个Go语言GC问题,就答不上来了,走时几乎落泪...唉!    细想想...   当面试官向你提问JVM的实战问题时,你是否感觉到无所适从?   想解决生产环境中的GC问题,你是否感觉到狗咬刺猬,无处下嘴?   面对JVM的海量参数,你是否感觉到迷茫无助?   看过很多的JVM文章,但当遇到了生产环境中真实问题的时候,你是否依然不知道如何进行分析排查?   如果是这样,我觉得我们大家先想清楚在 金九银十 这个时间段“ 自己想要什么 ”最为重要      我认为是 “实战” !    “实战” 可以让我们 快速消除痛点,解决面试,积累实战经验 。   在这里小编推荐你,拿出2小时的时间   赶紧参加【马士兵老师】的 「JVM实战调优」 集训营   马老师带你横扫一切关于JVM的面试问题,吊打所有敢于提问JVM的面试官。   让你在简历中,填写上JVM调优经历,为升职加薪添上浓墨重彩的一笔。    点开看...       下面这些内容,全网首讲,你从未听过,且只讲一次   Go语言内存管理和Java的异同,Rust语言为什么不需要GC?   Golang的内存管理和Jvm有何不同?   Golang的gc算法和Jvm有何不同?   Golang的内存调优应该如何做?  

JVM命令-jstat

╄→尐↘猪︶ㄣ 提交于 2020-08-07 06:16:28
jstat用法如下: jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]] -t :代表时间粗 -h<lines>:即-h跟数字,代表隔几行显示标题 vmid :代表vm进程id interval:代表监控间隔时间段,默认毫秒做单位 count:代表取数次数 例:jstat -gcutil -t -h5 123456 1000 100 表示每1000毫秒收集一次jvm内存和gc信息,共收集100次,每隔5行显示一次标题,且标题行带时间戳 一、命令说明 option 选项 class 显示classLoader 相关信息 compiler 显示 JIT 编译相关信息 gc 显示与 GC 相关堆信息 gccapacity 显示各个代的容量以及使用情况 gccause 显示垃圾收集相关信息,最后一次垃圾回收的原因 gcnew 显示新生代信息 gcnewcapacity 显示新生代使用情况 gcold 显示老年代和永久的信息 gcoldcapacity 显示老年代的大小 gcpermcapactiy 显示永久代的大小 gcutil 显示垃圾收集信息 printcompilation 输出 JIT 编译的方法信息 -t 参数 参数可以在输出信息前面加上一个 Timestamp 列,显示程序运行的时间。 -h参数

-xms和-xmx设置完之后,堆的大小就真的是设置的大小吗?

坚强是说给别人听的谎言 提交于 2020-08-06 08:35:40
前面看了jdk的几个查看jvm信息的命令,然后只看不动手,不用回头就忘记的干干净净了。还是实际使用一下,然后顺便结合着jvm的内存分区,再深层次的记录一下几个分区的名称、大小、gc器、等等。 首先,查看一个进程,筛选一个进程,就可以使用 jps -mvl ,m让他带上方法参数,v带上设置的jvm参数,l显示完整的运行main方法名称。 完了之后,就可以看到这个pid的好多信息了。但是这个看到的不全,还是有些虚拟机默认的参数是看不到的,这个时候已经拿到了pid,再使用 jinfo -flags pid ,就会显示这个pid的手动在脚本里面显示的设置的各种参数,再加上虚拟机自动设置的默认值的参数,看一个pid的jvm设置就更完全了。 然后,还打算看看这个pid的gc情况,就可以使用 jstat -gc 1s 100 意思就是1s执行一次,执行100次,连续的看内存的gc才能发现问题。 下面是 jinfo -flags pid的输出 * 命令:jinfo -flags 64363 * 输出: * Attaching to process ID 64363, please wait... * Debugger attached successfully. * Server compiler detected. * JVM version is 25.131-b11 * * Non

线上问题排查命令

别等时光非礼了梦想. 提交于 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 定期获取堆对象的统计信息,来发现持续增长的可疑对象。