8款 JDK 自带的监控和故障处理工具,定位问题太方便了!

VSole2023-01-31 10:15:53

jdk本身为我们定位java相关的生产问题提供了内置的工具,这些内置的工具用好了足以应对常见的大多数生产问题,这篇就将jdk自带命令行和可视化工具做一下汇总介绍。

jps–虚拟机进程查看工具

类似于ps命令,输出虚拟机进程信息,第一列为LVMID跟pid是一致的。

jstat–虚拟机统计监视工具

虚拟机统计信息监视工具,监视虚拟机各种运行状态比如GC的统计信息。

比如:每250毫秒查询一次进程垃圾收集状况,一共查询20次。

#格式:jstat [option]  lvmid  interval  count
$jstat -gc 17936  250 20

解释:

  • 「C:」 容量
  • 「U:」 使用量
  • 「E:」 eden区
  • 「O:」 老年代
  • 「M:」 元数据区
  • 「YGC:」 YoungGC次数
  • 「YGCT:」 YoungGC花费总时间
  • 「FGC:」 FullGC次数
  • 「FGCT:」 FullGC花费总时间

jinfo–虚拟机配置信息工具

实时查看和调整虚拟机各项参数

比如:查看进程17936的System.properties()信息

jinfo -sysprops  17936  

查看老年代触发gc百分比

$jinfo -flag CMSInitiatingOccupancyFraction 17936

jmap–虚拟机内存映象工具

jmap命令用于生成heapdump文件,也就是“堆转储快照”。

其他方式如:-XX:HeapDumpOnOutOfMemoryError或者kill -3 pid

 # 给进程为17936生成dump二进制文件,名称为jeffdump.bin
   $jmap -dump:format=b,file=jeffdump.bin 17936
# 打印
 C:\Users\Administrator>jmap -dump:format=b,file=jeffdump.bin 17936
 Dumping heap to C:\Users\Administrator\jeffdump.bin ...
 Heap dump file created

jhat–虚拟机HeapDump分析工具

jhat内置了一个微型的http/html服务器,生成dump文件的分析结果后,可以在浏览器中查看。

一般不会再服务器上直接用jhat分析dump,毕竟耗时耗资源,而且jhat分析功能简陋,一般可以用VisualVM或者Eclipse Memory Analyzer。

$jhat jeffdump.bin
C:\Users\Administrator>jhat jeffdump.bin
Reading from jeffdump.bin...
Dump file created Wed Apr 29 17:30:48 CST 2020
Snapshot read, resolving...
Resolving 1831310 objects...
Chasing references, expect 366 dots.............
................................................
................................................
................................................
.....................................
Eliminating duplicate references................
................................................
................................................
................................................
..................................
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.

打开浏览器:http://localhost:7000/

分析内存泄露问题主要使用到Heap Histogram,可以找到内存中总容量最大的对象

jstack–java堆栈跟踪工具

生成虚拟机当前时刻的线程快照,即threaddump或者javacore文件。也就是当前虚拟机每一条线程正在执行的方法堆栈集合,可以用来定位线程长时间停顿的原因,比如线程间死锁、死循环、请求外部资源导致的长时间等待。

$jstack -l 17936

Jconsole和VisualVM

  • jconsole和visualVM 是jdk提供的两个可视化监控工具。VisualVm是jdk发布的功能最强大的运行监视和故障处理工具。比专业收费的Jprofiler、youkit都不逊色多少。
  • VisualGC: 非jdk自带的工具,IDEA也有插件可以安装。
  • jmc:BEA公司JDK带的工具。需要装oracle的jdk才有。生产环境不建议使用,太重可能干扰线上服务。

visualVM分析OutOfMemoryError异常

  • 对于CMS收集器来说,如果超过98%的时间都在GC,而只有不足2%的内存恢复,则会抛出OOM:GC overhead limit exceeded。不过可以设置-XX:-UseGCOverheadLimit关闭这个异常的抛出。不过仍然可能会抛出OOM:Java Heap sapce异常!或者OOM:unable to creare new native thread.
  • 使用jdk自带的工具java VisualVM来分析
-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError

生成的java_pid9516.hprof文件,也可以使用Eclipse Memory Analyzer打开。

虚拟机jdk
本作品采用《CC 协议》,转载必须注明作者和本文链接
jdk本身为我们定位java相关的生产问题提供了内置的工具,这些内置的工具用好了足以应对常见的大多数生产问题,这篇就将jdk自带命令行和可视化工具做一下汇总介绍。jps–虚拟机进程查看工具类似于ps命令,输出虚拟机进程信息,第一列为LVMID跟pid是一致的。jstat–虚拟机统计监视工具虚拟机统计信息监视工具,监视虚拟机各种运行状态比如GC的统计信息。比如:每250毫秒查询一次进程垃圾收集状况,一共查询20次。
最近在分析JDK7u21反序列化漏洞,对命令执行载体com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl的利用点不太明白。
Java 8 的内存结构
2022-03-10 14:37:13
java8内存结构图虚拟机内存与本地内存的区别Java虚拟机在执行的时候会把管理的内存分配成不同的区域,这些
RMI存在着三个主体RMI RegistryRMI ClientRMI Server
安卓工具总结
2021-10-14 08:39:34
JRE:Java Runtime Environment是Java运行时环境,包含了java虚拟机,java基础类库安装过程:1)双击启动安装程序2)默认安装路径3)jre路径选择4)配置环境变量JAVA_HOME. 这里介绍几款不错的安卓模拟器。
'User Portal' 及 'Webadmin' 两个接口存在认证绕过漏洞,漏洞巧妙利用了 Java 和 Perl 处理解析 JSON 数据的差异性,实现了变量覆盖,从而导致认证绕过及命令执行。
Jboss是一个基于J2EE的开放源代码的应用服务器。JBoss代码遵循LGPL许可,可以在任何商业应用中免费使用。JBoss是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3的规范。但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。
C:\Users\bk\Desktop\天府科技云APP\天府科技云服务平台\天府科技云服务平台.apkC:\Program Files\Java\jdk1.8.0_111\bin\jarsigner.exe?文件将解压出来的classes.dex文件拷贝到dex2jar工具文件夹中执行命令:d2j-dex2jar classes.dex执行完毕后,得到反编译而来的classes-dex2jar.jar文件使用jd-gui.exe或者luyten-0.5.4打开 classes-dex2jar.jar文件,得到360安全加固混淆加密的源代码。应同时使用V1+V2签名)6.应用完整性校检将反编译出来源码中修改图片文件名为test.png进行重新生成apk包,命令如下:java -jar apktool.jar b -f?
堆区分为两大区:Young区和Old区,又称新生代和老年代。在不同的JVM实现及不同的回收机制中,堆内存的划分方式是不一样的。相对于基于寄存器的运行环境来说,JVM是基于栈结构的运行环境。在活动线程中,只有位于栈顶的帧才是有效的,称为当前栈帧。正在执行的方法称为当前方法,栈帧是方法运行的基本结构。在执行引擎运行时,所有指令都只能针对当前栈帧进行操作。而StackOverflowError表示请求的栈溢出,导致内存耗尽,通常出现在递归方法中。
一、远程 Debug 原理首先,Java程序的执行过程分为以下几个步骤:Java的文件 > 编译生成的类文件
VSole
网络安全专家