用jrcmd监控java虚拟机的运行状态
Java性能监控:使用JProfiler或VisualVM等工具进行性能监控
Java性能监控:使用JProfiler或VisualVM等工具进行性能监控引言:在开发和部署Java应用程序时,性能是一个至关重要的方面。
优化应用程序的性能可以提高用户体验,减少资源消耗,并确保应用程序能够在高负载下正常运行。
为了实现这一目标,开发人员需要使用专业的性能监控工具来分析和优化应用程序的性能。
本文将介绍两种常用的Java性能监控工具:JProfiler和VisualVM,并探讨它们的使用方法和优势。
一、JProfilerJProfiler是一款功能强大的Java性能分析工具,它提供了丰富的功能和直观的界面,可以帮助开发人员深入了解应用程序的性能瓶颈,并提供相应的优化建议。
下面将介绍JProfiler的使用步骤:1. 安装和配置:首先,我们需要下载并安装JProfiler。
安装完成后,打开JProfiler并创建一个新的会话。
在会话配置中,选择要监控的Java进程,并设置相关的参数,如端口号和采样频率。
2. 启动监控:配置完成后,点击“开始监控”按钮,JProfiler将连接到目标Java进程,并开始收集性能数据。
在监控过程中,我们可以实时查看应用程序的CPU使用率、内存使用情况、线程状态等信息。
3. 分析性能数据:当我们收集到足够的性能数据后,可以使用JProfiler的分析工具来深入分析应用程序的性能问题。
例如,我们可以查看方法调用的耗时、内存分配的情况以及线程之间的竞争情况。
通过这些数据,我们可以找到性能瓶颈,并进行相应的优化。
4. 优化建议:在分析性能数据的过程中,JProfiler会根据收集到的数据提供相应的优化建议。
这些建议可以帮助开发人员识别潜在的性能问题,并提供相应的解决方案。
例如,JProfiler可能建议我们使用更高效的数据结构、减少内存分配或者优化数据库查询等。
二、VisualVMVisualVM是一款免费的Java性能监控和分析工具,它是基于Java技术的,可以与任何支持Java虚拟机诊断引擎(JVM TI)的Java应用程序进行交互。
使用jvisualvm远程监控JVM
使⽤jvisualvm远程监控JVM⼀、jmx ⽅式加上如下启动参数,以 tomcat 为例,修改 bin\catalina ⽂件,在开始位置添加 JAVA_OPTSJAVA_OPTS="-Djava.rmi.server.hostname=192.168.8.229 -Dcom.sun.management.jmxremote.port=1100 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false" # 开启 JMX 远程服务权限# -Dcom.sun.management.jmxremote.port:配置远程 connection 的端⼝号# -Dcom.sun.management.jmxremote.ssl:指定 JMX 是否启⽤ ssl# -Dcom.sun.management.jmxremote.authenticate:指定 JMX 是否启⽤密码# -Djava.rmi.server.hostname:配置 Server IP(不要使⽤ 127.0.0.1)# -Dcom.sun.management.jmxremote.rmi.port=2222# -Dcom.sun.management.jmxremote.local.only=false# -Dcom.sun.management.jmxremote=trueJDK8 后不集成 jvisualvm# windows 上启动start /b visualvm_202\bin\visualvm.exe --jdkhome "D:\PcAPP\jdk-11.0.7" --userdir "data"JDK8 可以直接使⽤,Windows 下打开 JDK ⽬录下的 bin/jvisualvm.exe 程序添加 JMX 连接,填写地址和端⼝即可查看堆栈⼆、Jstatd ⽅式在 $JAVA_HOME/bin 下创建 jstatd.all.policy ⽂件cd /opt/jdk-11.0.7/bin/vim jstatd.all.policy# 有 tools.jar(JDK8)grant codebase "file:${java.home}/lib/tools.jar" {permission java.security.AllPermission;};# 没有 tools.jar(JDK11)grant codebase "jrt:/jdk.jstatd" {permission java.security.AllPermission;};grant codebase "jrt:/jdk.internal.jvmstat" {permission java.security.AllPermission;};启动cd /opt/jdk-11.0.7/bin/nohup jstatd -J-Djava.rmi.server.hostname=192.168.8.136 -J-Djava.security.policy=./jstatd.all.policy -p 1099 & jps -l。
教你如何监控Java线程池运行状态的操作(必看)
教你如何监控Java线程池运⾏状态的操作(必看)之前写过⼀篇 Java 线程池的使⽤介绍⽂章《》,全⾯介绍了什么是线程池、线程池核⼼类、线程池⼯作流程、线程池分类、拒绝策略、及如何提交与关闭线程池等。
但在实际开发过程中,在线程池使⽤过程中可能会遇到各⽅⾯的故障,如线程池阻塞,⽆法提交新任务等。
如果你想监控某⼀个线程池的执⾏状态,线程池执⾏类 ThreadPoolExecutor 也给出了相关的 API, 能实时获取线程池的当前活动线程数、正在排队中的线程数、已经执⾏完成的线程数、总线程数等。
总线程数 = 排队线程数 + 活动线程数 + 执⾏完成的线程数下⾯给出⼀个线程池使⽤⽰例,及教你获取线程池状态private static ExecutorService es = new ThreadPoolExecutor(50, 100, 0L, LISECONDS,new LinkedBlockingQueue<Runnable>(100000));public static void main(String[] args) throws Exception {for (int i = 0; i < 100000; i++) {es.execute(() -> {System.out.print(1);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}});}ThreadPoolExecutor tpe = ((ThreadPoolExecutor) es);while (true) {System.out.println();int queueSize = tpe.getQueue().size();System.out.println("当前排队线程数:" + queueSize);int activeCount = tpe.getActiveCount();System.out.println("当前活动线程数:" + activeCount);long completedTaskCount = tpe.getCompletedTaskCount();System.out.println("执⾏完成线程数:" + completedTaskCount);long taskCount = tpe.getTaskCount();System.out.println("总线程数:" + taskCount);Thread.sleep(3000);}}线程池提交了 100000 个任务,但同时只有 50 个线程在执⾏⼯作,我们每陋 3 秒来获取当前线程池的运⾏状态。
使用visualvm远程监控JVM
使用visualvm远程监控JVM前段时间在排查问题过程中我使用了jprofiler远程进行了jvm资源使用情况的监控,从系统的损耗来看,jprofiler对系统资源尤其是内存的消耗是非常庞大的。
当时配置的jprofiler内存使用上线是1G,后来发现系统内存在整个测试过程中出现持续上涨的趋势,最后稳定在3G左右(JVM的内存我们配的上限值是2G)。
从这个情况来看,如果我们要在测试过程中利用图形界面的形式实时监控jvm内存的使用情况,使用jprofiler是不合适的;在对几个性能测试工具进行评估后,我们最终选定了visualvm进行我们的java 资源监控,下面我将讲述一下如何配置visualvm监控jvm资源以及在监控过程中visualvm在server上面的性能消耗情况1.如何配置visualvm监控visualvm支持在linux和windows上启用图形界面监控jvm的资源,基于目前我们的server资源比较紧张,而且从监控方便的角度来分析(我们现有server的linux系统是关闭图形界面的,如果要支持visualvm的图形显示需要安装插件),我推荐在自己的windows环境中安装监控的客户端Visualvm目前支持两种remote connection方式,分别是jstatd和JMX方式;我看了一下官方的说明文档,如果是针对jboss的监控,官方还是推荐使用JMX的方式监控,因此下面我就讲述一下如何在server端以及客户端配置JMX方式监控的visualvm:(1)首先要修改JDK中JMX服务的配置文件,以获得相应的权限:进入$JAVA_HOME所在的根目录的/jre/lib/management子目录下,a. 将jmxremote.password.template文件复制为jmxremote.passwordb. 调整jmxremote.access和jmxremote.password的权限为只读写,可以使用如下命令chmod 600 jmxremote.access jmxremote.passwordc. 打开jmxremote.password文件,去掉# monitorRole QED# controlRole R&D这两行前面的注释符号(2)修改startWeblogic.sh文件打开user_projects/domains/zjl_acc9944/bin/startWeblogic.sh文件,并在JVM的启动配置中添加如下信息:JAVA_OPTS="-Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=10.20.150.218 其他配置”这几个配置的说明如下:-Dcom.sun.management.jmxremote.port:这个是配置远程connection的端口号的,要确定这个端口没有被占用-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false:这两个是固定配置,是JMX的远程服务权限的-Djava.rmi.server.hostname:这个是配置server的IP的,可以不增加,要使用server的IP最好在机器上先用hostname –i看一下IP是不是机器本身的IP,如果是127.0.0.1的话要改一下,否则远程的时候连不上,目前我们的server上我已经都改好了。
《Java虚拟机性能优化与监控技术》
《Java虚拟机性能优化与监控技术》Java虚拟机性能优化与监控技术Java虚拟机是Java语言的核心,它是一个能够运行Java字节码的虚拟计算机。
Java虚拟机的优化和监控是保证Java应用程序性能稳定和高效的关键。
本文将从Java虚拟机性能的优化和监控技术两个方面进行探讨,并详细介绍如何通过以上两个方面来实现Java虚拟机的性能优化和监控。
一、Java虚拟机性能优化Java虚拟机性能优化主要包括以下几个方面:1.内存管理内存管理是Java虚拟机性能优化中最重要的一部分。
Java中的内存管理由Java虚拟机自动完成,因此对Java应用程序的性能影响极大。
对于较复杂的应用程序,需要合理配置Java虚拟机内存参数,如-Xms(初始堆大小)和-Xmx(最大堆大小)等,以避免内存泄漏和溢出等问题。
2.垃圾回收垃圾回收机制是Java虚拟机自动管理内存的核心。
在大部分情况下,Java虚拟机可以通过分代回收、并行回收和CMS等策略对垃圾进行回收。
针对不同的应用场景,可以通过调整Java虚拟机参数和垃圾回收器的类型等来优化垃圾回收性能。
3.代码性能优化Java虚拟机的JIT编译器可以将Java字节码编译成机器码,在性能上远高于运行Java字节码的速度。
常见的代码性能优化手段包括使用局部变量、减少方法调用、使用缓存等。
4.并发性能优化Java虚拟机支持线程级别的并发,所以并发性能优化是非常重要的一部分。
通过使用线程池、避免过度锁定和使用CAS(比较-交换)等机制,可以优化Java虚拟机的并发性能。
二、Java虚拟机监控技术Java虚拟机监控技术包括以下两个方面:1.JMXJMX(Java管理扩展)是Java虚拟机的监控和管理API,它可以提供Java 虚拟机内部状态的查看和修改。
可以通过JMX来查看Java虚拟机内存使用情况、线程执行情况等。
2.JVM监控工具除了JMX之外,还可以使用各种JVM监控工具对Java虚拟机进行监控。
jcmd的native memory tracking内容解析
jcmd的native memory tracking内容解析摘要:一、引言二、JCMD简介1.概念2.作用三、Native Memory Tracking原理1.内存分配与回收机制2.内存泄漏检测四、JCMD命令使用方法1.基本命令2.高级命令3.常用选项和参数五、JCMD实战案例1.内存泄漏排查2.内存使用分析六、总结与展望正文:一、引言在Java应用程序的开发和运维过程中,内存管理一直是一个至关重要的问题。
内存泄漏、内存溢出等问题时常困扰着开发者。
为了更好地监控和解决这些问题,JCMD(Java Command Line Memory Diagnostic Tool)应运而生。
本文将对JCMD的Native Memory Tracking进行详细解析,帮助大家更好地理解和使用这个实用的工具。
二、JCMD简介1.概念JCMD是一个Java命令行工具,用于诊断Java应用程序的内存问题。
它可以通过监控Java虚拟机(JVM)的内存使用情况,帮助开发者发现内存泄漏、内存溢出等问题。
2.作用JCMD的主要作用有以下几点:(1)检测内存泄漏:通过跟踪Java对象的创建和回收,找出可能导致内存泄漏的根源。
(2)分析内存使用:展示Java应用程序的内存占用情况,包括堆内存、栈内存和本地方法内存等。
(3)诊断性能问题:分析内存分配与回收的性能,为优化内存管理提供依据。
三、Native Memory Tracking原理1.内存分配与回收机制JCMD通过解析Java虚拟机的内存管理机制,对对象的创建和回收进行监控。
它跟踪本地方法调用,分析内存分配与回收的详细过程,从而揭示内存泄漏的线索。
2.内存泄漏检测JCMD能够检测到内存泄漏,主要依赖于其对Java对象引用的监控。
当一个对象被回收时,如果其引用链上还存在其他对象,就会导致内存泄漏。
JCMD会找出这些引用的源头,帮助开发者定位内存泄漏的位置。
四、JCMD命令使用方法1.基本命令JCMD的基本命令格式如下:```jcmd <options> <pid> <command>```其中,`<pid>`是Java进程的进程ID,`<command>`是JCMD的命令选项。
使用JavavisualVM监控远程JVM的流程分析
使⽤JavavisualVM监控远程JVM的流程分析VisualVM是JDK⾃带的⼀款全能型性能监控和故障分析⼯具,包括对CPU使⽤、JVM堆内存消耗、线程、类加载的实时监控,内存dump⽂件分析,垃圾回收运⾏情况的可视化分析等,对故障排查和性能调优很有帮助。
1 监控远程tomcat 对于被监控的tomcat,需要修改tomcat的bin⽬录下的Catalina.sh配置⽂件,增加如下配置。
JAVA_ OPTS="$JAVA_ OPTS -Dcom.sun.management.jmxremote-Dcom.sun.management.jmxremote.port=9004-Dcom.sun.management.jmxremote.authenticate=false-Dcom.sun.management.jmxremote.ssl=false.preferlPv4Stack=true-Djava.rmi.server.hostname=10.110.3.62" 其中9004,是远程主机的端⼝,10.110.3.62是远程主机的ip地址。
2 监控远程java程序 对于被监控的java程序,需要修改启动的参数,修改配置如下:nohup java -Dcom.sun.management.jmxremote-Dcom.sun.management.jmxremote.port=9004-Dcom.sun.management.jmxremote.authenticate=false-Dcom.sun.management.jmxremote.ssl=false.preferlPv4Stack=true-Djava.rmi.server.hostname=10.110.3.62 -jar hello.jar &3 Java VisualVM界⾯配置 ctrl + r 快捷键,运⾏ "jvisualvm"进⼊Java VisualVM界⾯,点击远程添加远程主机,输⼊远程主机的ip地址。
jconsole使用教程?
JConsole 是一个用于监视和管理Java 虚拟机(JVM) 的图形化工具。
下面是一个简单的JConsole 使用教程:1. 启动JConsole: 打开终端或命令提示符窗口,然后在命令行输入"jconsole" 并按Enter 键来启动JConsole。
2. 选择连接的JVM:JConsole 启动后,它会显示一个列表,包含正在运行的JVM 进程。
从列表中选择您想要连接的JVM,并单击"连接"按钮。
3. 监视JVM:当成功连接到JVM 后,JConsole 显示一个主界面,其中包含多个选项卡,用于监视不同方面的JVM。
您可以选择适当的选项卡以查看有关内存、线程、类、GC 等方面的信息。
4. 内存监控:在“内存”选项卡中,您可以查看堆和非堆内存使用情况,以及内存池的详细信息。
您还可以手动执行垃圾回收操作。
5. 线程监控:在“线程”选项卡中,您可以查看当前运行的线程列表,包括线程ID、状态和CPU 使用情况等信息。
6. 类监控:在“类”选项卡中,您可以查看已加载的类的数量和详细信息。
您还可以强制执行类的垃圾收集操作。
7. GC 监控:在“GC”选项卡中,您可以查看JVM 的垃圾回收器的性能统计信息,如垃圾回收频率、暂停时间等。
8. 导出数据:您还可以使用JConsole 导出监视数据以进行后续分析。
在选项卡上右键单击,选择“导出”以导出数据。
请注意,使用JConsole 需要JDK 安装包中提供的工具。
确保您的环境中已正确配置了JDK,并且具有足够的权限来连接并监视JVM 进程。
以上是一个简单的JConsole 使用教程,希望对您有帮助。
使用JConsole 进行JVM 监控需要一定的经验和理解,建议在使用之前查阅更多的资料和文档以更全面地了解其功能和用法。
java内存使用情况的命令 -回复
java内存使用情况的命令-回复Java是一种面向对象的编程语言,由于其良好的跨平台性和动态性能,在各种应用开发中被广泛使用。
Java虚拟机(JVM)是Java语言的核心组成部分,它负责在运行时执行Java字节码。
在进行Java程序开发时,了解和监控Java程序的内存使用情况是非常重要的,因为内存管理直接影响程序的性能和稳定性。
本文将介绍几个常用的命令,用于监控和调试Java程序的内存使用情况。
1. jps:jps命令用于列出正在运行的Java进程的进程ID和主类名称。
在命令行中输入jps,将显示运行中的Java进程列表。
通过查看进程ID,可以确定要监控的Java进程。
2. jstat:jstat命令用于监控Java虚拟机的各种运行时统计信息,包括垃圾收集、类装载、编译等情况。
在命令行中输入jstat -gc 进程ID,将显示与垃圾收集相关的信息,如堆内存使用、垃圾收集时间等。
3. jmap:jmap命令用于生成Java堆转储快照,可以通过转储文件分析Java堆内存使用情况。
在命令行中输入jmap -heap 进程ID,将显示Java 堆内存的详细信息,如堆大小、已使用大小、垃圾收集器类型等。
4. jhat:jhat命令用于分析jmap生成的Java堆转储快照文件。
在命令行中输入jhat 堆转储文件路径,然后在浏览器中打开5. jstack:jstack命令用于生成Java线程的堆栈转储快照,可以用于分析线程死锁等问题。
在命令行中输入jstack 进程ID,将显示Java进程中所有线程的堆栈信息,包括线程状态、锁信息等。
除了以上这些命令外,还可以使用一些第三方工具来监控Java程序的内存使用情况,如VisualVM、jconsole等。
这些工具提供了直观的图形界面,可以实时监控Java虚拟机的各种统计信息,并对内存使用情况进行可视化展示。
在进行Java内存使用监控时,需要注意以下几点:1. 根据实际需求选择合适的命令和工具。
jcmd用法
jcmd用法jcmd是Java命令行工具的一部分,它提供了一种简单的方式来监控和管理正在运行的Java应用程序。
通过使用jcmd,您可以执行各种诊断和故障排除任务,以及查看和控制Java进程的各个方面。
本文将重点介绍jcmd的用法,以及如何利用它来管理和监控Java应用程序。
1. jcmd简介jcmd是Java Development Kit (JDK)的一部分,它是一个命令行工具,用于监控和管理Java进程。
它提供了一系列的命令,可以用来执行各种操作,包括查看线程栈信息、堆转储、查看系统属性等。
使用jcmd,您无需安装任何其他工具或插件,就可以方便地管理Java进程。
2. 查看Java进程列表使用jcmd命令行工具的第一步是查看当前运行的Java进程列表。
要查看进程列表,只需在命令行中输入以下命令:```jcmd -l```该命令将返回所有正在运行的Java进程的进程ID(PID)和启动命令。
3. 查看Java进程的详细信息要查看特定Java进程的详细信息,可以使用以下命令:jcmd <PID> VM.version```将<PID>替换为要查看详细信息的Java进程的进程ID。
该命令将返回Java进程的版本信息,包括Java版本、Java虚拟机版本和Java主页。
4. 查看线程栈信息使用jcmd,您可以查看正在运行的Java进程中的线程栈信息。
要查看线程栈信息,执行以下命令:```jcmd <PID> Thread.print```将<PID>替换为要查看线程栈信息的Java进程的进程ID。
执行该命令后,您将获得Java进程中每个线程的详细信息,包括线程ID、线程名称、线程状态和线程堆栈跟踪。
5. 获取Java堆转储如果您想分析Java进程的内存使用情况,可以使用jcmd来获取Java堆转储。
执行以下命令:```jcmd <PID> GC.heap_dump <文件路径>将<PID>替换为要获取堆转储的Java进程的进程ID,并将<文件路径>替换为您希望保存堆转储文件的路径。
jcmd用法
jcmd是Java的一个命令行工具,用于监控Java虚拟机(JVM)的性能和诊断问题。
以下是jcmd的一些基本用法:
1.启动jcmd:在命令行中输入jcmd命令即可启动jcmd。
2.查看进程信息:使用jcmd的-l选项可以查看当前机器上所有的Java进程
信息。
例如,jcmd -l可以列出所有正在运行的Java进程,并显示它们的
进程ID和主类名称等信息。
3.获取性能统计信息:jcmd可以获取Java进程的性能统计信息,包括垃圾收
集、内存使用等方面的数据。
例如,使用jcmd <pid> GC.class_stats可以获取指定Java进程的垃圾收集统计信息。
4.获取线程堆栈信息:使用jcmd <pid> Thread.print可以获取指定Java进
程的线程堆栈信息。
5.手动执行垃圾收集:使用jcmd <pid> GC.run可以手动执行指定Java进程
的垃圾收集操作。
6.其他选项:jcmd还有其他一些选项,如命令行参数选项、诊断插件等,可
以查看jcmd的帮助文档或使用jcmd -?获取更多信息。
需要注意的是,jcmd命令需要在Java环境中运行,并且需要具有足够的权限来访问目标Java进程的信息。
同时,使用jcmd命令时也需要提供目标Java进程的进程ID(PID)作为参数。
Java框架中的性能监控与调优技巧
Java框架中的性能监控与调优技巧Java框架在开发大型应用程序时扮演着重要的角色,然而,应用程序的性能往往是一个挑战。
为了确保系统在高负载下仍能正常运行,开发人员需要学习性能监控与调优技巧。
本文将介绍几种常用的Java 框架性能监控和调优方法。
一、性能监控工具性能监控工具可以帮助开发人员跟踪应用程序的性能并定位潜在的性能瓶颈。
以下是几种常用的性能监控工具:1. Java VisualVMJava VisualVM是一个功能强大的性能分析工具,可以提供CPU、内存和线程等方面的数据。
它可以监控正在运行的Java应用程序,并显示应用程序的性能状况。
2. Apache JMeterApache JMeter是一个用于测试性能和负载的开源工具。
它可以模拟多个用户同时访问应用程序,并提供性能指标和报告。
3. PrometheusPrometheus是一个开源的监控系统,可用于收集和查询指标数据。
它支持多种数据源,可以用于监控Java应用程序的性能指标。
二、性能监控指标了解应用程序的性能指标对于定位问题和调优至关重要。
以下是几个常见的性能监控指标:1. CPU使用率CPU使用率是衡量应用程序运行在处理器上的负载程度的指标。
当CPU使用率过高时,可能表示需要优化应用程序的性能。
2. 堆内存使用率Java应用程序使用堆内存来存储对象。
通过监控堆内存使用率,可以判断内存泄漏或者内存溢出问题。
3. 垃圾回收时间垃圾回收是Java应用程序自动管理内存的过程。
监控垃圾回收时间可以帮助开发人员了解垃圾回收的性能,并进行相应的优化。
三、性能调优技巧针对性能问题,有一些常用的调优技巧可以改善应用程序的性能:1. 优化数据库查询数据库查询通常是应用程序性能的瓶颈之一。
通过优化查询语句、创建索引等方式,可以提高数据库查询的性能。
2. 缓存机制使用缓存可以减少对数据库或者其他外部资源的访问次数,从而提高性能。
可以使用内存缓存、分布式缓存等不同的缓存机制。
如何利用Java虚拟机进行性能监测
如何利用Java虚拟机进行性能监测在如今广泛应用的技术领域中,Java语言和虚拟机占据了重要的位置。
Java虚拟机是Java程序的基石,也是Java程序性能监测的一个关键工具。
那么,如何利用Java虚拟机进行性能监测呢?本文将为您作一介绍。
第一,利用Java虚拟机的垃圾回收监测Java程序中频繁使用垃圾回收机制,因此通过监测垃圾回收机制可以非常直观地了解Java程序的内存使用情况,也可以找出产生性能问题的原因。
一种有效的方法是在虚拟机启动参数中加入“-verbose:gc”参数,这将会在控制台输出垃圾回收的详细信息。
在监测期间,可以查看每次垃圾回收的耗时、堆的内存使用情况等等,这有助于进行性能优化。
第二,利用Java虚拟机的内存监测Java虚拟机不仅支持对垃圾回收进行监测,同时还支持对程序内存使用情况的监测。
Java程序内存使用情况的异常是产生性能问题的常见原因之一,因此必须及时监测内存使用情况。
可以通过添加JVM参数“-Xms”和“-Xmx”来限制程序启动时的内存空间大小,并通过“-Xmn”参数来设置新生代的大小,也可以通过程序中添加代码进行内存运行时的监测。
例如,可以用“Runtime.getRuntime().totalMemory()”查询Java虚拟机所用的内存总量,“Runtime.getRuntime().freeMemory()”查询Java虚拟机中未使用的内存量,还可以用“Runtime.getRuntime().maxMemory()”查询Java虚拟机可以使用的最大内存量。
第三,利用Java虚拟机的性能分析工具Java虚拟机还提供了丰富的性能分析工具,用于分析程序的瓶颈,帮助进行性能优化。
其中最受欢迎的性能分析工具是VisualVM,这是一个免费、易于使用的GUI工具,它提供了对程序CPU、内存、线程以及垃圾回收等方面的详细监测,同时可以进行堆分析、线程取样、CPU取样等等。
使用JVisualVM远程监控Tomcat
使用JVisualVM远程监控Tomcat用JVisualVM连接远程JVM,监控系统运行性能参数。
作用:JVM和监控的应用程序运行在不同的服务器上,减轻应用程序的负担,特别是HeapDupm的时候,应用常能够续负担很大。
1. 为服务器上的tomcat 配置jvm 启动参数。
在tomcat 的catalina.bat 中添加如下参数:set JAVA_OPTS=-Dcom.sun.management.jmxremote-Dcom.sun.management.jmxremote.port="9004"-Dcom.sun.management.jmxremote.authenticate="false"-Dcom.sun.management.jmxremote.ssl="false"其中-Dcom.sun.management.jmxremote.port=9004 指定了JMX 启动的代理端口;这个端口就是Visual VM 要连接的端口其中-Dcom.sun.management.jmxremote.ssl ="false" 指定了JMX 是否启用ssl其中-Dcom.sun.management.jmxremote.authenticate =”false”指定了JMX 是否启用鉴权(需要用户名,密码鉴权)2 运行JVisualVM,选中左边的Remote节点,右键点击Add Remote Host弹出对话框3 填写远程的Tomcat的主机IP,点击OK4 在左侧的Remote节点下面增加了刚才添加的节点。
选中10.87.40.141这个节点,右键弹出菜单选择“Add JMX Connetcion..”.5 在弹出的对话框的填写要连接的Tomcat所在的主机IP和端口,端口是在Catalina.bat设置的端口9004,点击OK。
如何利用 JConsole观察分析Java程序的运行
如何利用JConsole观察分析Java程序的运行,进行排错调优一、JConsole是什么从Java 5开始引入了JConsole。
JConsole是一个内置Java 性能分析器,可以从命令行或在GUI shell 中运行。
您可以轻松地使用JConsole (或者,它更高端的“近亲” VisualVM)来监控Java 应用程序性能和跟踪Java 中的代码。
二、如何启动JConsole1.如果是从命令行启动,使JDK 在PATH 上,运行jconsole即可。
2.如果从GUI shell 启动,找到JDK 安装路径,打开bin 文件夹,双击jconsole。
当分析工具弹出时(取决于正在运行的Java 版本以及正在运行的Java 程序数量),可能会出现一个对话框,要求输入一个进程的URL 来连接,也可能列出许多不同的本地Java 进程(有时包含JConsole进程本身)来连接。
如图所示:想分析那个程序就双击那个进程。
三、如何设置JAVA程序运行时可以被JConsolse连接分析1.本地程序(相对于开启JConsole的计算机),无需设置任何参数就可以被本地开启的JConsole连接(Java SE 6开始无需设置,之前还是需要设置运行时参数-Dcom.sun.management.jmxremote)2.无认证连接(下面的设置表示:连接的端口为8999、无需认证就可以被连接)Java代码1.-Dcom.sun.management.jmxremote.port=89992.-Dcom.sun.management.jmxremote.authenticate=false3.-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.port=8999 \-Dcom.sun.management.jmxremote.authenticate=false \-Dcom.sun.management.jmxremote.ssl=false3.如果考虑到安全因素,需要认证,需要安全连接,也是可以搞定的。
监控Java应用程序运行状态的方法、系统、设备和存储介质[发明专利]
专利名称:监控Java应用程序运行状态的方法、系统、设备和存储介质
专利类型:发明专利
发明人:熊方翼
申请号:CN202010311267.8
申请日:20200420
公开号:CN111625428A
公开日:
20200904
专利内容由知识产权出版社提供
摘要:本公开提供了一种监控Java应用程序运行状态的方法、系统、设备和存储介质。
所述方法包括:扫描计算机系统正在运行的程序,自动识别出Java应用进程;自动收集所述Java应用进程的JVM运行状态信息;将收集的JVM运行状态信息输入Java程序运行状态异常检测模型进行分析以判定当前的Java应用程序运行状态是否异常;当判定当前的Java程序运行状态异常时进行告警。
本公开提供的监控Java应用程序运行状态的方法,通过自动识别Java应用进程并收集JVM运行状态信息可以减少人力成本,提高JVM运行状态信息获取的效率和实时性,以及通过Java程序运行状态异常检测模型分析判定Java应用程序运行状态,进而对异常进行告警可以提高告警准确率。
申请人:中国建设银行股份有限公司
地址:100032 北京市西城区金融大街25号
国籍:CN
代理机构:广州三环专利商标代理有限公司
代理人:郝传鑫
更多信息请下载全文后查看。
获取远程服务器上Java进程的运行状态
获取远程服务器上Java进程的运行状态为了安全考虑, 有些服务器会被限制登录. 本文介绍如何获取远程服务器上 Java 进程的运行状态.启动 jstatd 服务在服务器端启动 jstatd 服务后, 远程的机器可以通过 rmi 协议获取服务器上 Java 程序的运行状态.在服务器上创建jstatd 的授权文件, 假设文件路径为/etc/jstatd.all.policy, 内容如下:1.grant codebase "file:/usr/local/java/lib/tools.jar" {2.permission java.security.AllPermission;3.};如果你的JAVA_HOME目录不是/usr/local/java的话, 请改为正确的值.接下来通过以下命令启动 jstatd 服务:jstatd -J-Djava.security.policy=/etc/jstatd.all.policy -p 12345 需要注意的地方有:•授权文件的路径需要改成你自己的, 最好使用绝对路径.•-p参数指定 jstatd 服务监听的端口. 如果不指定的话, 默认的端口为 1009. 不过从我自己的实践来看, 最好还是设定一个比1024大的端口号.远程使用jps, jstat命令在服务器上启动 jstatd 服务之后, 就可以在自己的机器上查看服务器上运行的 Java 进程了. 假设服务器的IP为 192.168.2.37, jstatd 服务监听的端口号为 12345.首先通过 jps 命令获取服务器上运行的 Java 进程列表:jps -l rmi://192.168.2.37:12345拿到 Java 进程的 pid 列表之后, 可以通过 jstat 命令获取某个进程的 GC 信息:jstat-gcutilrmi://*************.2.37:1234510001000其中 39939 表示 Java 进程的pid.远程使用 VisualVM 监控 Java 应用通过VisualVM, 可以在图形面板上看到很多 Java 应用的信息, 相当于多个命令(jps, jstat, jstack, jmap, jinfo)的集合.VisualVM 是一个图形应用, 只能运行在本机, 然后通过远程连接, 获取服务器上的 Java 应用的信息.通过$JAVA_HOME/bin/jvisualvm 命令启动VisualVM, 点击下图的红框部分, 输入要连接服务器的IP地址:然后右键点击服务器地址, 可以看到能够通过2种方式连接服务器, 分别是 jmx 和 jstatd.按照上述的步骤在服务器上启动 jstatd 服务后, 就能够以 jstatd 的形式连接到远程服务器了.VisualVM 通过 jstatd 连接的方式能够获取的信息比较有限. 如果想获取更完整的 Java 应用信息, 可以通过 jmx 的方式连接服务器上的Java 进程. 需要在启动 Java 应用的时候, 指定以下和 jmx 相关的参数: -Djava.rmi.server.hostname=10.11.2.139 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=9090java.rmi.server.hostname参数指定ip或者host, com.sun.management.jmxremote.port参数指定 jmx 监听的端口.。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用jrcmd监控java虚拟机的运行状态Jrocket会提供一个jrcmd工具来分析java虚拟机的运行状况。
也就是我们通常所说的飞行记录,通过jrcmd命令,抓取相关的飞行记录,再用jrocket自带的分析工具可以很方便的分析java虚拟机的运行状况。
Jrcmd位于jrocket的bin目录下,配置环境变量之后可以直接运行该命令。
1.通过jrcmd找到需要监控的进程[javadev@center3 ~]$ jrcmd -p19146 com.sun.enterprise.glassfish.bootstrap.ASMain -domainname domain1 -asadmin-args --host,,,localhost,,,--port,,,4848,,,--secure=false,,,--terse=false,,,--echo=false,,,--interactive=tr ue,,,start-domain,,,--verbose=false,,,--debug=false,,,--domaindir,,,/home/javadev/glassfish3/g lassfish/domains,,,domain1 -instancename server -verbose false -debug false -asadmin-classpath /home/javadev/glassfish3/glassfish/modules/admin-cli.jar -asadmin-classname com.sun.enterprise.admin.cli.AsadminMain -upgrade false -type DAS -domaindir /home/javadev/glassfish3/glassfish/domains/domain1 -read-stdin true24012 jrockit.tools.jrcmd.JrCmd –p可以看到,我们需要监控的程序glassfish的进程号是191462.Jrcmd支持的命令[javadev@center3 ~]$ jrcmd 19146 help19146:The following commands are available:kill_management_serverstart_management_serverprint_object_summarymemleakserverprint_class_summaryprint_codeblocksdump_codelayoutdump_codelistdump_codemapprint_codegenlistprint_vm_stateprint_utf8poolcheck_flightrecordingdump_flightrecordingstop_flightrecordingstart_flightrecordingprint_propertieshprofdumpprint_threadsdatadump_requestrunsystemgcrunfinalizationheap_diagnosticsoom_diagnosticsprint_exceptionsversiontimestampcommand_linesanityverbosityset_filenamehelpprint_memusageset_vmflaglist_vmflagsFor more information about a specific command use 'help <command>'.Parameters to commands are optional unless otherwise stated.Help参数,可以查看jrcmd可支持的所有参数。
我们主要对flightrecording相关的参数进行介绍。
3.打开飞行记录[javadev@center3 ~]$ jrcmd 19146 help start_flightrecording19146:Starts a JFR recordingname - Name of recording (string)settings - Settings file or preset (string)defaultrecording - Starts default recording (bool, false)delay - Delay recording start (time, 0s)duration - Duration of recording (time, 0s)filename - Resulting recording filename (string)compress - GZip-compress the resulting recording file (bool,false)maxage - Maximum age of buffer data (time, 0s)maxsize - Maximum size of buffers in bytes (long, 0)我们需要给此次飞行记录取个名字,如tmp name=tmp,另外设置监控时间为10分钟duration=15m ,用compress 设置是否开启GZIP压缩。
[javadev@center3 ~]$ jrcmd 19146 start_flightrecording name=tmp duration=15m filename='dump201304022200.jfr' compress=true19146:Started recording 54.监控飞行记录的运行状态[javadev@center3 ~]$ jrcmd 19146 check_flightrecording19146:Recording : id=5 name="tmp" duration=900s dest="dump201304022200.jfr" compress=true (running)如上所示,飞行记录开始工作。
5.导出飞行记录文件通过dump_flightrecording 命令可以将上述飞行记录文件导出。
主要参数如下:[javadev@center3 ~]$ jrcmd 19146 help dump_flightrecording19146:Copies contents of a JFR recording to filename - Recording name (string)recording - Recording id (long, -1)copy_to_file - Copy recording data to file (string)compress_copy - GZip-compress "copy_to_file" destination (bool, false)我们设置需要导出的文件名为dump201304022200.jfrName就是在start的时候,设置的名称,为tmp ,如果没有设置名称,也可通过recording 来区分,recording即使check过程中显示的id,二者任选其一都可以[javadev@center3 ~]$ jrcmd 19146 dump_flightrecording recording=5 name=tmp copy_to_file='/home/javadev/dump201304022200.jfr' compress_copy=true19146:[javadev@center3 ~]$ ll -th-rw-rw-r-- 1 javadev javadev 1.8M 4月 2 22:06 dump201304022200.jfr可以看到,文件已经导出,如果我们需要导出开始设置的15m之后的文件,那么通过check命令,等duration=15m的15分钟之后,观察到飞行记录已停止时再dump即可。
15分钟之后,可以看到飞行记录stop[javadev@center3 ~]$ jrcmd 19146 check_flightrecording19146:Recording : id=5 name="tmp" duration=900s dest="dump201304022200.jfr" compress=true (stopped)此时导出,可以看到比开始执行dump文件增加了不少。
[javadev@center3 ~]$ jrcmd 19146 dump_flightrecording recording=5 name=tmpcopy_to_file='/home/javadev/dump201304022200.jfr' compress_copy=true19146:[javadev@center3 ~]$ ll -th-rw-rw-r-- 1 javadev javadev 4.4M 4月 2 22:16 dump201304022200.jfr6.关闭飞行记录导出完毕之后需要将飞行记录关闭,避免浪费资源[javadev@center3 ~]$ jrcmd 19146 stop_flightrecording recording=5 name=tmp19146:[javadev@center3 ~]$ jrcmd 19146 check_flightrecording19146:可以看到关闭之后,通过check已经看不到相关的飞行记录信息。
另外需要注意的是,print_threads 也是个重要的参数,可以导出java虚拟机中的线程堆快照。
我们也可以将其导出[javadev@center3 ~]$ jrcmd 19146 print_threads > /home/javadev/threads_201304022221.txt[javadev@center3 ~]$ ll -th threads_201304022221.txt-rw-rw-r-- 1 javadev javadev 448K 4月 2 22:21 threads_201304022221.txt通过sftp将文件从服务器上下载到本地即可分析。