常用JVM命令

110 阅读2分钟

记录JVM常用命令

1、打印jvm配置参数

java -XX:+ PrintCommandLineFlags

2、监控jvm垃圾回收(侧重于回收频率)

jstat -gc pid(进程号) time(间隔毫秒) count(打印次数)
jstat -gc pid(进程号)
例如:
jstat -gc 43877 250 5
jstat -gc 43877

image.png

3、监控jvm垃圾回收(侧重使用空间占比)

jstat -gcutil pid(进程号) time(间隔毫秒) count(打印次数)
jstat -gcutil pid(进程号)
例如:
jstat -gcutil 43877 250 5
jstat -gcutil 43877

查询结果表明:这台服务器的新生代Eden区(E,表示Eden)使用了86%的空间,2个Survivor区(S0、S1,表示Survivor0、Survivor1)分别是62.5%,和0.00%,元空间(M 即jdk1.8之前的P,之前叫永久代)使用了99.11%,老年代(O,表示Old)使用了40.62%的空间。程序运行以来共发生Minor GC(YGC,表示YoungGC)11902次,总耗时172.562秒;发生Full GC(FGC,表示Full GC)5次,总耗时(FGCT,表示Full GCTime)为2.281秒;所有GC总耗时(GCT,表示GC Time)为174.842秒

4、监控jvm垃圾回收(打印上次垃圾回收的原因)

jstat -gccause pid(进程号) time(间隔毫秒) count(打印次数)
例如:
jstat -gccause 43877 250 5

image.png

Allocation Failure:表明本次引起GC的原因是因为在年轻代中没有足够的空间能够存储新的数据了。
ParNew: 表明本次GC发生在年轻代并且使用的是ParNew垃圾收集器

5、监控jvm垃圾回收(监控老年代)

jstat -gcold pid(进程号) time(间隔毫秒) count(打印次数)
例如:
jstat -gcold 43877 250 5
jstat -gcold 43877

6、生成快照信息

方式一 jmap -dump:format=b,file=文件名 pid
例如:
jmap -dump:format=b,file=czTest.bin 43877

image.png

方式二 kill -3
例如:
tomcat会打印再这个目录(catalina.out)
BES还未知

7、获取所有线程堆栈信息小工具

获取堆栈信息:jstack 43877
jstack -l 43877

<%@ page import="java.util.Map"%>
<html>
<head>
<title>服务器线程信息</title>
</head>
<body>
<pre>
<%
for (Map.Entry<Thread, StackTraceElement[]> stackTrace : Thread.getAllStackTraces().entrySet()) {
Thread thread = (Thread) stackTrace.getKey();
StackTraceElement[] stack = (StackTraceElement[]) stackTrace.getValue();
if (thread.equals(Thread.currentThread())) {
continue;
}
out.print("\n线程:" + thread.getName() + "\n");
for (StackTraceElement element : stack) {
out.print("\t"+element+"\n");
}
}
%>
</pre>
</body>
</html>

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第10天,点击查看活动详情