网站首页 > 精选教程 正文
Java 自带性能监控工具:监视和管理控制台 jconsole,它可以提供 Java 某个进程的内存、线程、类加载、jvm 概要以及 MBean 等的实时信息,也许能够对以上问题提供参考。
1. JVM 一些参数
在启动 jconsole 之前我们先来回顾一下 JVM 的一些主要参数:
- -Xms 初始/最小堆内存大小
- -Xmx 最大堆内存大小
- -Xmn 年轻代大小
- -XX:NewSize 年轻代大小
- -XX:MaxNewSize 年轻代最大值
- -XX:NewRatio 年老代与年轻代比值
- -XX:MaxPermSize 持久代最大值
- -XX:PermSize 持久代初始值
有些资料说,Xms、Xmx 设置的是 JVM 内存大小,是不对的,JVM 除了留给开发人员使用的堆内存之外还有非堆内存。
读者可能发现,有三种方式可以划分年轻代大小:-Xmn 方式、-XX:NewSize + -XX:MaxNewSize 方式、-XX:NewRatio 方式。三种都可以,优先级从高到低依次是 -XX:NewSize + -XX:MaxNewSize 方式、-Xmn 方式、-XX:NewRatio 方式,也就是说配置了前面优先级高的后面的优先级低的就被覆盖掉了。
2. 本机启用 jconsole 以监控 Java 进程
CMD 切换到 %JAVA_HOME%/bin 目录,直接执行 jconsole
即可打开 Java 监视和管理控制台:
本地进程列表里显示了所有本地执行中的 Java 进程,双击你感兴趣的那个进程(比如 PID 为 8504 那个),即可对该进程进行监控了:
3. 远程监控 Java 进程
要对 Java 进程进行远程监控,在启动它的时候需要启用 JMX。
以远程主机上的 tomcat 为例,先为 jmx 找一个可用的远程端口,比如 9999:
No news is good news~在 %TOMCAT_HOME%/bin/catalina.sh 文件的前面加上以下配置:
[plain] view plain copy
print?
- JAVA_OPTS="-Xms1024m -Xmx2048m -XX:MaxPermSize=128m -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
如图
然后重启 tomcat,在本机打开 Java 监视和管理控制台,"远程进程" 输入远程主机名和 jmx 端口号:
点击 "连接" 按钮,即可对远程主机上的 tomcat 进行实时监控了:
4. jconsole 提供的一些有用信息
接着第 4 步的案例往下看。
4.1. JVM 设定信息是否起作用检查
点击 "VM 概要" 可以查看到刚才我们设定的 JAVA_OPTS 的一些参数已经奏效了:
4.2. tomcat 线程池、自定义线程池数量情况实时监控
还在为 tomcat 线程池的神秘面纱而头疼?还在为自己定义的线程池 "黑盒" 一般而苦恼?看看下图:
我们的 tomcat 刚启动,从上图可以看出只有一个 http-8080-Acceptor-0 线程,我们去访问一下我们的项目,然后再回来看看:
http-8080 线程一下子增长到了 8 个。是不是一切一目了然,尽在掌握之中?
4.3. 内存使用实际消耗
点击 Java 监视和管理控制台 "内存" 叶项,可以看到 tomcat 堆内存的使用情况:
图表里有很多选项:
我们看一下 Eden 区:
Eden 区基本和整个堆内存的走势差不多。再看 Survivor 区:
Survivor 区在较短时间内的走势相对平稳。再看 Old Gen 区:
这个走势更加平稳,而且对比 Survivor 区、Old Gen 区两张图,可以很明显地看出,在大约 19:58 那个时刻有将一批对象从 Survivor 区移到 Old Gen 区。最后看 Perm Gen 区。
这个走势最平稳了。可以明显看出,在大约 19:58,在我们访问一下我们的项目的时候,一些新的 class 等静态资源加载到了 JVM 中。5.4 的加载类数的图也证实了这一点。
4.4. tomcat 加载类的情况
5. 配合 jmap 的使用
先找到我们 tomcat 进程的 PID 是 13863,然后执行 jmap -heap 13863:
Heap Configuration 里列的基本就是我们刚才配的那些,比如 MaxHeapSize 是 2048 MB,MaxPermSize 是 128 MB。这个和 4.1 里的是一样的。
猜你喜欢
- 2024-11-07 JMX带你透视Java应用,实现应用程序的动态实时监控
- 2024-11-07 java应用监控和分析思路 java监控gc
- 2024-11-07 巧用JAVA监控工具2——jvisualvm java jvm 监控
- 2024-11-07 老技术新谈,Java应用监控利器JMX(1)
- 2024-11-07 Javaagent 使用 - 探针 jsp探针
- 2024-11-07 详解docker容器的资源监控方案 docker容器资源限制
- 2024-11-07 性能诊断利器 JProfiler 快速入门和最佳实践
- 2024-11-07 java监控工具(1) java视频监控
- 2024-11-07 java通过插桩的概念来完成监控系统的设计
- 2024-11-07 高性能、无侵入的 Java 性能监控神器
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)