(jconsole、jvisualvm插件可查看堆内存变化情况,线程状态,CPU使用情况,分析线程死锁等,可监控本地和远程服务器的JVM,本地监控无须进行配置,下面是笔者实际操作的远程监控的配置步骤)
,其中port=9999,可自行设置,注意添加一个未使用的端口即可
2、修改linux服务器中jdk目录的配置文件
输入地址和端口,和用户名密码,其中端口为catalina.sh文件中配置的远程服务端口;用户名和口令为jmxremote.password文件中的账号信息
连接可查看监控信息
(备注:参考资料:《全栈性能测试修炼宝典JMeter实战》9.8 JVM监控)
JDK发展至今已经非常强大,除了我们用来开发使用外实际上还提供了一系列的工具!
JDK很多小工具名字和Linux的命令比较像,jps就是其中的典型,和Linux的ps很像,功能也像。
命令详解:jps还可以通过RMI协议查询开启了RMI服务的运行虚拟机进程状态,参数hostid为RMI注册表中注册的主机名。
-q:只输出LVMID,省略主类的名称;
-m:输出虚拟机进程启动传递给主类main()方法的参数;
-l:输出主类全名,如果进程执行的是jar包,输出jar路径;
-v:输出虚拟机启动时的JVM参数;
监视虚拟机各种运行状态信息,可以显示本地或者远程虚拟机进程中的欸类加载、内存、垃圾收集、即时编译等运行数据.
其中interval和count表示间隔时间和间隔次数,省略表示查询一次。
-class:监视类加载、卸载数量、总空间以及类转正所耗费的时间;
-gc:监视Java堆状况,包括Eden区、2个Survivor区、老年代、等容量,已用空间,垃圾收集时间;
-gccapacity:与-gc参数基本相同,但输出主要关注Java堆各个区域使用到的最大、最小空间;
-gcutil:与-gc基本相同,输出的是Java堆已使用空间占总空间百分比;
S0、S1、E表示的是2个survivor和Eden使用比例,O、M表示老年代和元空间使用比例,CCS压缩使用比例,YGC、YGCT分别表示Young GC的次数和时间,FGC、FGCT同理,GCT则表示总时间。这些参数如果知道英语名字就能很好的记住。
用于生成虚拟机当前时刻的线程快照,线程快照就是当前虚拟机内每条线程正在执行的方法堆栈集合。可以用来定位线程长时间停顿的原因。
-F:当正常输出的请求不被响应时,强制输出线程堆栈;
-l:除堆栈外,显示关于锁的附加线程;
-m:如果调用到本地方法栈的话,可以显示C/C++的堆栈;
虚拟机监控工具,可以选择指定的进程进行观察,运行如下图:
选择进去过后就可以看到监控结果了,如下图:
是jdk自带的可视化监控工具,功能很强大,同时还可以安装各种扩展插件,运行如下图:
JDK发展至今已经有很多这类的工具了,在JDK的bin目录下基本上都是。这里只是简单介绍了几个简单好用的作为入门学习,更多的工具大家有兴趣可以去测试运行一下。
Java程序员日常学习笔记,如理解有误欢迎各位交流讨论!
jdk自己就给咱们提供了能够查询jvm的指令java
查看正在运行的Java应用程序的扩展参数eclipse
jstat命令能够查看堆内存各部分的使用量,以及加载类的数量。命令的格式以下:spa
此命令能够用来查看内存信息。
实例个数以及占用内存大小
打开log.txt,文件内容以下:
使用VisualVM查看刚刚生成的对内存文件
也能够设置内存溢出自动导出dump文件(内存很大的时候,可能会导不出来)
借助一个代码:经过死循环来不断往内存添加数据,同时设置vm的内存大小
运行发生内存溢出的异常,而后会把自动导出dump文件在指定的目录
而后咱们能够经过借助图形化界面VisualVM来查看dump文件
看到String这三个占的内存那么多,咱们就能够快速定位到发生内存溢出的位置(不要说eclipse也能够看到发生溢出的位置,生产环境可不是运行在eclipse上的)
咱们程序模拟一个死锁的代码
其实VisualVM底层也是走jdk提供的那些命令的,就像数据库的图形化界面同样的意思。