java相关工具

java相关工具

在jdk的bin目录下

自带工具 作用
jps 查看所有jvm进程
jinfo 查看进程的运行环境参数(主要是jvm命令行参数)
jstat 对jvm应用程序的资源和性能进行实时监控
jstack 查看所有线程的运行状态
jmap 查看jvm占用物理内存的状态
jhat +UseParNew
jconsole 图形化工具
jvisualvm 图形化监控工具

测试代码1:

打印hello world字符

public class helloworld extends Thread {
   public static void main(String[] args) {
	   try {
			while (true) {
				Thread.sleep(2000);
				System.out.println("hello world");
			}            
		} catch (InterruptedException e) {
		   e.printStackTrace();
		}
	}
}

测试代码2:

制造oom错误

import java.util.ArrayList;
import java.util.List;
public class oom {
   public static void main(String[] args) {
	   List<byte[]> list =new ArrayList<byte[]>();
	   int i = 0;
	   boolean flag = true;
		while(flag){
		   try{
			   i++;
			   list.add(new byte[1024* 1024]);//每次增加一个1M大小的数组对象
			   Thread.sleep(1000);
		   }catch(Throwable e){
			   e.printStackTrace();
			   flag =false;
			   System.out.println("count="+i);//记录运行的次数
			}
		}
	}
}

jvisualvm(监控工具):

jdk自带的工具

使用图形化工具:

建议用MobaXterm连接,或者有Xmanager也行

yum -y install xorg-x11-xauth xorg-x11-fonts-* xorg-x11-font-utils xorg-x11-fonts-Type1 xorg-x11-utils
export DISPLAY=2.2.0.1:0.0	#win主机的ip地址:0.0
jvisualvm

使用jvisualvm工具查看oom错误时的状态

1)jvisualvm图形化安装Visual GC插件

image

2)运行测试代码2,图形化观察OOM错误
java -Xms100m -Xmx100m oom

image

jprofiler工具:

由于jvisualvm只能看到oom过程,但看不到是哪个进程导致的oom,而jprofiler工具可以定位错误
运行在windows的工具

JProfiler是一款功能强大的Java开发分析工具,它可以快速的帮助用户分析出存在的错误,软件还可对需要的显示类进行标记,包括了内存的分配情况和信息的视图等

官网:http://www.ej-technologies.com/products/jprofiler/overview.html

1)运行oom测试代码,并把错误导出到文件
java -Xms5m -Xmx10m -XX:+HeapDumpOnOutOfMemoryError oom
2)复制文件到本地

复制java_pid号.hprof,用jprofiler工具打开


jps工具:

jps [-q] [-mlvV] [<hostid>]
	-q:静默模式;
	-v:显示传递给jvm的命令行参数;
	-m:输出传入main方法的参数;
	-l:输出main类或jar完全限定名称;
	-v:显示通过flag文件传递给jvm的参数;
	[<hostid>]:主机id,默认为localhost;

jconsole工具:

图形化工具,可以用来查看Java进程信息

JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用

JMX最常见的场景是监控Java程序的基本信息和运行情况,任何Java程序都可以开启JMX,然后使用JConsole或Visual VM进行预览

java程序开启JMX:

只要在运行Java程序的命令后面指定

-Dcom.sun.management.jmxremote	#启用远程监控JMX
-Djava.rmi.server.hostname=127.0.0.1	#本地监听的ip
-Dcom.sun.management.jmxremote.port=1000	#默认启动的JMX端口号,要和zabbix添加主机时候的端口一致即可
-Dcom.sun.management.jmxremote.ssl=false	#关闭ssl
-Dcom.sun.management.jmxremote.authenticate=false	#不使用用户认证
例: Tomcat开启JMX:
catalina.sh stop 

vim tomcat/bin/catalina.sh
CATALINA_OPTS="$CATALINA__OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=2.2.2.22"  

catalina.sh start
例: jconsole图形显示
#运行oom测试代码
java -Xms100m -Xmx100m oom

#允许工具
jconsole

image


jinfo工具:

输出给定的java进程的所有配置信息

jps [-q] [-mlvV] [<hostid>]
	-q:静默模式;
	-v:显示传递给jvm的命令行参数;
	-m:输出传入main方法的参数;
	-l:输出main类或jar完全限定名称;
	-v:显示通过flag文件传递给jvm的参数;
	[<hostid>]:主机id,默认为localhost;

jstat工具:

输出指定的java进程的统计信息

jstat -option [-t] [-h<lines>] jvm中进程id [<interval> [<count>]]
	interval:时间间隔,单位是毫秒;
	count:显示的次数;

选项:
	-class:		class loader
	-compiler:		JIT
	-gc:			进行gc
	-gccapacity:	统计堆中各代的容量
	-gccause:
	-gcmetacapacity
	-gcnew:		新生代
	-gcnewcapacity
	-gcold:		老年代
	-gcoldcapacity
	-gcutil
	-printcompilation

image

jstack工具:

堆栈情况查看工具

jstack [-l] <pid>
jstack -F [-m] [-l] <pid>
	-l:long listings,会显示额外的锁信息,因此,发生死锁时常用此选项
	-m:混合模式,既输出java堆栈信息,也输出C/C++堆栈信息

jmap工具:

查看堆内存的使用状态

jmap [option] <pid> [远程id@远程ip]
	-heap 
	-histo[:live]
	-clstats
	-finalizerinfo
	-dump:<dump-options>
		live			仅存活对象
		format=b		输出的格式
		file=<file>		输出到文件
		
	-F		强制
	-J<flag>
	-F:当使用"jstack -l PID"无响应,可以使用-F强制输出信息

jhat工具:

堆分析工具,分析jmap导出的文件

ps aux|grep java
jmap [option] 24817 
查看堆空间的详细信息:
jmap -heap <pid>

image

posted @ 2022-02-22 16:25  suyanhj  阅读(31)  评论(0)    收藏  举报