前言
现实企业级Java应用开发、维护中,有时候我们会碰到下面这些问题:
-
OutOfMemoryError,内存不足
-
内存溢出
-
线程死锁
-
锁争用(Lock Contention)
-
Java进程消耗CPU或者Memory过高
-
......
这些问题在日常的运维维护中可能被很多人忽视(大部分人遇到上面的问题只是重启服务器或者调大内存,而不是深究问题根源),但是能够理解并解决这些问题是Java应用运维进阶的必备要求
这里介绍一下常见的jvm性能调优监控工具进行介绍,希望能起到抛砖引玉之用。
1、jps主要用来输出jvm中的运行的进程状态信息。
jps是jdk提供的一个查看当前java进程的小工具,可以看做是JavaVirtual Machine Process Status Tool的缩写。非常简单实用。
命令格式:jps [options ] [ hostid ]
[options]选项 :
-q:仅输出VM标识符,不包括classname,jar name,arguments in main method
-m:输出main method的参数
-l:输出完全的包名,应用主类名,jar的完全路径名
-v:输出jvm参数
-V:输出通过flag文件传递到JVM中的参数(.hotspotrc文件或-XX:Flags=所指定的文件
-Joption:传递参数到vm,例如:-J-Xms512m
基本使用:
2、jstack主要用来查看某个Java进程内的线程堆栈信息
命令格式:
Usage:
jstack [-l] <pid>
(to connect to running process)
jstack -F [-m] [-l] <pid>
(to connect to a hung process)
jstack [-m] [-l] <executable> <core>
(to connect to a core file)
jstack [-m] [-l] [server_id@]<remote server IP or hostname>
(to