Jvm命令 落日映苍穹つ 2022-06-14 01:17 229阅读 0赞 Java指令jconsole 用法: jconsole \[ -interval=n \] \[ -notile \] \[ -pluginpath <path> \] \[ -version \] \[ connection ... \] -interval 将更新间隔设置为 n 秒 (默认值为 4 秒) -notile 初始不平铺窗口 (对于两个或多个连接) -pluginpath 指定 jconsole 用于查找插件的路径 -version 输出程序版本 connection = pid || host:port || JMX URL (service:jmx:<协议>://...) pid 目标进程的进程 ID host 远程主机名或 IP 地址 port 远程连接的端口号 -J 指定运行 jconsole 的 Java 虚拟机 的输入参数 监控GC的工具分为2种:命令行工具和图形工具; 常用的命令行工具有: 注:下面的命令都在JAVA\_HOME/bin中,是java自带的命令。如果您发现无法使用,请直接进入Java安装目录调用或者先设置Java的环境变量,一个简单的办法为:直接运行命令 export PATH=$JAVA\_HOME/bin:$PATH; 另外,一般的,在Linux下,下面的命令需要sudo权限,在windows下,部分命令的部分选项不能使用。 Java系列笔记(4) - JVM监控与调优 JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解 Java虚拟机学习 - JDK可视化监控工具 1、jps 查询正在运行的JVM进程,常用的参数为: -q:只输出LVMID,省略主类的名称 -m:输出虚拟机进程启动时传给主类main()函数的参数 -l:输出主类的全类名,如果进程执行的是Jar包,输出Jar路径 -v:输出虚拟机进程启动时JVM参数 命令格式:jps \[option\] \[hostid\] 一个简单的例子: 在上图中,有一个vid为309的apache进程在提供web服务。 图形化界面JConsole启动后,将自动搜索本机运行的jvm进程,不需要jps命令来查询指定 2、jstat jstat可以实时显示本地或远程JVM进程中类装载、内存、垃圾收集、JIT编译等数据(如果要显示远程JVM信息,需要远程主机开启RMI支持)。 如果在服务启动时没有指定启动参数-verbose:gc,则可以用jstat实时查看gc情况。 命令格式:jstat \[option vmid \[interval\[s|ms\] \[count\]\]\] 参数解释: Options — 选项,我们一般使用 -gcutil 查看gc情况 vmid — VM的进程号,即当前运行的java进程号 interval– 间隔时间,单位为秒或者毫秒 count — 打印次数,如果缺省则打印无数次 \-gcutil: 监视内容与-gc基本相同,不同的是这里显示的是已占用的百分比,如S0为86.53,代表着S0区已使用了86.53% >jstat -gc 1532 >jstat -gc 1532 1000 5 >jstat -gcutil 1532 1000 5 jstat有如下选项: -class: 监视类装载、卸载数量、总空间及类装载所耗费的时间 -gc: 监听Java堆状况,包括Eden区、两个Survivor区、老年代、永久代等的容量,以用空间、GC时间合计等信息 -gccapacity: 监视内容与-gc基本相同,但输出主要关注java堆各个区域使用到的最大和最小空间 -gcutil: 监视内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比 -gccause: 与-gcutil功能一样,但是会额外输出导致上一次GC产生的原因 -gcnew: 监视新生代GC状况 -gcnewcapacity: 监视内同与-gcnew基本相同,输出主要关注使用到的最大和最小空间 -gcold: 监视老年代GC情况 -gcoldcapacity: 监视内同与-gcold基本相同,输出主要关注使用到的最大和最小空间 -gcpermcapacity: 输出永久代使用到最大和最小空间 -compiler: 输出JIT编译器编译过的方法、耗时等信息 -printcompilation: 输出已经被JIT编译的方法 一些术语的中文解释: S0C:S0区容量(S1区相同,略) S0U:S0区已使用 EC:E区容量 EU:E区已使用 OC:老年代容量 OU:老年代已使用 PC:Perm容量 PU:Perm区已使用 YGC:Young GC(Minor GC)次数 YGCT:Young GC总耗时 FGC:Full GC次数 FGCT:Full GC总耗时 GCT:GC总耗时 实例使用: \[root@localhost bin\]\# jstat -gcutil 25444 S0 S1 E O P YGC YGCT FGC FGCT GCT 11.63 0.00 56.46 66.92 98.49 162 0.248 6 0.331 0.579 实例使用2:(25444是java的进程号,ps -ef | grep java) \[root@localhost bin\]\# jstat -gcutil 25444 1000 5 S0 S1 E O P YGC YGCT FGC FGCT GCT 73.54 0.00 99.04 67.52 98.49 166 0.252 6 0.331 0.583 73.54 0.00 99.04 67.52 98.49 166 0.252 6 0.331 0.583 73.54 0.00 99.04 67.52 98.49 166 0.252 6 0.331 0.583 73.54 0.00 99.04 67.52 98.49 166 0.252 6 0.331 0.583 73.54 0.00 99.04 67.52 98.49 166 0.252 6 0.331 0.583 ps -ef|grep jboss jstat -gcutil $pid S0 S1 E O P YGC YGCT FGC FGCT GCT 74.79 0.00 95.15 0.86 37.35 2 0.112 0 0.000 0.112 3、jstack 用于生成当前JVM的所有线程快照,线程快照是虚拟机每一条线程正在执行的方法,目的是定位线程出现长时间停顿的原因。 -F:当正常输出的请求不被响应时,强制输出线程堆栈 -l:除堆栈外,显示关于锁的附加信息 -m:如果调用到本地方法的话,可以显示C/C++的堆栈 命令格式:jstack \[option\] vmid 4、jmap jmap用来查看堆内存使用状况,一般结合jhat使用。 用于显示当前Java堆和永久代的详细信息(如当前使用的收集器,当前的空间使用率等) -dump:生成java堆转储快照 -heap:显示java堆详细信息(只在Linux/Solaris下有效) -F:当虚拟机进程对-dump选项没有响应时,可使用这个选项强制生成dump快照(只在Linux/Solaris下有效) -finalizerinfo:显示在F-Queue中等待Finalizer线程执行finalize方法的对象(只在Linux/Solaris下有效) -histo:显示堆中对象统计信息 -permstat:以ClassLoader为统计口径显示永久代内存状态(只在Linux/Solaris下有效) 命令格式:jmap \[option\] vmid 其中前面3个参数最重要,如: 查看对详细信息:jmap -heap 309 生成dump文件: jmap -dump:file=./test.prof 309 查看当前堆中对象统计信息: jmap -histo 309: 该命令显示3列,分别为对象数量,对象大小,对象名称,通过该命令可以查看是否内存中有大对象; 用jmap把进程内存使用情况dump到文件中,再用jhat分析查看 jmap进行dump命令格式如下: jmap -dump:format=b,file=dumpFileName pid 我一样地对上面进程ID为21711进行Dump: root@ubuntu:/\# jmap -dump:format=b,file=/tmp/dump.dat 21711 Dumping heap to /tmp/dump.dat ... Heap dump file created 5、jhat 用于分析使用jmap生成的dump文件,是JDK自带的工具,使用方法为: jhat -J -Xmx512m \[file\] 不过jhat没有mat好用,推荐使用mat(Eclipse插件: http://www.eclipse.org/mat ),mat速度更快,而且是图形界面。
还没有评论,来说两句吧...