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插件

2)运行测试代码2,图形化观察OOM错误
java -Xms100m -Xmx100m oom
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

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
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>




浙公网安备 33010602011771号