2024-05-28 19:05:19 | 我爱编程网
JConsole是一个基于JMX的GUI工具,用于连接正在运行的JVM。可以监控本地和远程的java程序。
Jconsole 可以监视本地Tomcat和远程服务器上的Tomcat
监视前需要做如下配置:
1、如果要监视远程Java进程,需要在远程服务器上做相应的设置
1)windows系统下,需要修改 tomcat主目录\bin\ catalina.bat文件
将
set JAVA_OPTS=%JAVA_OPTS% -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file="%CATALINA_BASE%\conf\logging.properties"
修改成
set JAVA_OPTS=%JAVA_OPTS% -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file="%CATALINA_BASE%\conf\logging.properties"
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port="8080"
-Dcom.sun.management.jmxremote.authenticate="false"
-Dcom.sun.management.jmxremote.ssl="false"
2)Linux系统下,需要修改 tomcat主目录\bin\ catalina.sh文件
增加一行
CATALINA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=218.28.198.188 -Dcom.sun.management.jmxremote.port=9527 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"即可
然后使用JConsole就可以监控Tomcat啦。
点击%JAVA_HOME%\bin下的jconsole.exe即可
当有问题出现时,许多开发人员可能会比较盲目的用这些工具来试探性定位问题,而大多数情况下,这种试探会无功而返。因为这些分析工具主要是侧重Java单方面的分析,比如该系统调用第三方API,如果第三方API有问题,是无法监控到的。还有像文件、DB资源的访问也是是无法监控到的。
除了JAVA自带的监控工具外,我们尝试了第三方的监控工具透视宝,功能相对全面,且易操作。
在功能方面,透视宝都包括:查看执行最慢的10个元素,包括元素执行次数、持续时长和占用时长百分比;查看HTTP请求参数,包括请求的响应状态、链接页面、具体的请求参数及返回结果;查看代码执行堆栈的详细树状信息,包括每个方法的计算时间、总耗时和被调用的次数,您能直接看到特殊标识的最慢方法;查看涉及SQL语句的总耗时排序,包括SQL执行总耗时、执行次数和具体的查询语句;第三方API调用。
用第一个java虚拟机启动另一个虚拟机 并用第一个虚拟机的java程序去测试另一个虚拟机上java程序运行时的内存 CPU资源占用情况
解决问题的限制和条件
》两个虚拟机运行在同台Windows_X 机上
》只需要知道第二个虚拟机上运行程序时 第二个虚拟机的内存 CPU使用情况
》目的是 测试不同的程序在同个虚拟机上资源使用差别
解决问题的关键
第一 如何启动另一虚拟机运行测试的java程序
第二 如何用第一个虚拟机里的java程序 监视另一个虚拟机与其相关进程的运行情况
解决办法
一 使用java io中的函数(命令试过没问题 程序请按下面提示完成)
使用java io中的函数
Runtime getRuntime() exec( 系统命令 )
这里我给一个带命令参数的例子
Runtime r=Runtime getRuntime();Process p=null;String cmd[]={ 命令 参数 };try{ p=r exec(cmd);}catch(Exception e){System out println( error executing: +cmd[ ]);}我爱编程网
这里要使用到的系统命令有几个
path/java file//用第二个jvm(path为第二个jre/bin/地址)运行java程序filetasklist > log txt//将当前系统进程写以 任务管理器 的格式()写入//log txt文件中 关于tasklist使用细节 如查询某个进程ID的信息//可以使用命令 >tasklist /? 进行查询
这两步均在第一个虚拟机完成 简单!!!
二 常规方法使用JNI
这里我给一套解决方案 网上有很多相关代码 自己去找找
lishixinzhi/Article/program/Java/hx/201311/26640
2024-04-13 00:38:12
2024-03-31 15:14:06
2024-03-21 00:22:13
2024-02-10 22:15:59
2023-12-26 22:10:45
2023-10-06 13:00:52