在Java服务中,除了对于 业务、接口耗时&性能的监控之外还需要对Java 所依赖的JVM进行一定的监控策略。 对于JVM的合理监控可以帮助我们更加全面的发现问题:比如说内部接口耗时忽然上升、oom频出这类问题,并且合理的JVM监控及分析策略,能够以此为依据进行服务所使用JVM的调优,从而提升稳定性及性能。 JVM 自带了一些工具,已经基本能够全面的分析JVM的使用情况了: jstat:JVM 内存监视工具,可以看到任何堆内存、非堆内存的使用情况及young GC发生的时间&次数、full GC的时间&次数 来进行监控,但是在实际生产环境中,这个并不适用。 具体的调优策略会在JVM系列的JVM参数介绍时说明,这里仅仅是介绍对应的工具,及我们能用这些工具做什么。
分钟内的系统平均负载 运行队列中的平均进程数 二.vmstat 可以统计系统的CPU,内存,swap,io等情况 vmstat 1 4 三.top cpu内存 每个进程占CPU情况 四.pidstat 监控 java程序的运行情况 六.java自带工具 1.jps 列出java进程, -q 只输出进程id -m 输出Java进程(主函数)的参数 -l 可以用于输出主函数的完整路径 -v可以显示传递给JVM 的参数 2.jinfo 查看java应用程序的扩展参数 -flag <name>:打印指定JVM的参数值 -flag [+|-]<name>:设置指定JVM参数的布尔值 -flag <name>=< value>:设置指定JVM参数的值 jinfo -flag PrintGCDetails 2972 3.jmap 生成java应用程序的堆快照和对象的统计信息 4.jstack 打印线程dump - l 打印锁信息 -m 打印java和native的帧信息 -F强制dump,当jstack没有响应时候使用 5.JConsole 图形化监控工具 可以查看Java应用程序的运行概况,监控堆信息、永久区使用情况
前言 了解了部分JVM运行的原理之后,就要进入实战环节啦.在实际工作中,我们既不需要去实现虚拟机,也不需要对垃圾收集或者内存分配过程进行DEBUG.但是我们经常需要对某个应用程序进行JVM层面的调优. 可能是因为我们的代码和JVM配合不够好,也可能是我们的代码直接就有问题,但是需要在JVM上找到错误的具体表现. JDK的可视化工具 在本地启动JVM,可以在JDK/bin目录下启动jconsole,或者VisualVM.可以打开图形界面,按照其中的引导,连接虚拟机,点击内存,线程等按钮即可查看当前虚拟机状态.这里就不展开了
1.前言: 我们的监控系统是zabbix,最近刚做完jvm还有tomcat的监控,需要吐槽以下内容: zabbix官方提供的jvm和tomcat监控模版,存在item书写格式的坑,导致很多内容无法获取到监控 本文监控jvm内容如下: 内存使用状态:堆内存(Heap memory)和非堆内存(No Heap memory),包括已用值、最大值、已提交; 堆内存内存池:新生代(eden space),survivor UTC Server number: 8.0.23.0 OS Name: Linux OS Version: 2.6.32-573.22.1.el6.x86_64 Architecture: amd64 JVM Version: 1.8.0_65-b17 JVM Vendor: Oracle Corporation 2.1.Server端配置 1、 Zabbix server端安装java jdk环境并开启javaGateway 原文:西门飞冰的博客-专注于Linux运维 » zabbix监控tomcat(包含jvm监控)。
Zabbix自带监控系统的内存利用率和CPU利用率,但是系统内存并不能反应JVM内存情况 在本地我们可以通过jconsole或者jvisualvm进行监控jvm内存情况 不过正是环境一般都是部署在linux jvm详情了,如上效果图 linux测试 需要下载cmdline-jmxclient-0.10.3.jar包 通过上述方式启动之后如下 ? jvm内存情况集成jmx步骤逻辑 在zabbix服务器上安装配置zabbix-java-gateway,并且配置相关参数。 127.0.0.1 #JavaGateway所在服务器的IP JavaGatewayPort=10052 #JavaGateway的默认端口 StartJavaPollers=5 #JVM 第二步,添加你需要的监控项即可 ? 这里选取四项,查看效果图 ? ok,其余的配置再摸索,监控多个java进程的jvm还须研究
JVM-7.JVM 性能监控 jdk命令 常见监控和故障处理工具 名称 描述 jps JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程 jstat JVM Statistics jinfo Configuration Info for Java,显示虚拟机配置信息 jmap Memory Map for Java,生成虚拟机的内存转储快照(heapdump文件) jhat JVM : 选项 作用 -q 输出LVMID,省略主类的名称 -m 输出虚拟机进程启动时传给主类main()函数的参数 -l 输出主类的全名,如果进程执行的是jar包,输出Jar路径 -v 输出虚拟机启动时的JVM 参数 2. jstat:虚拟机统计信息监视工具 jstat(JVM Statistics Monitoring Tool)是用于监视虚拟机各种运行状态信息的工具。
该shell脚本主要用于监控: 1.各个进程的jvm内存使用情况; 2.端口监控; 3.访问的页面是否正常。 *-Dweblogic.Name=//g'|awk '{print $1}'` #jvm内存监控 echo ############################################## ] then jvm=$jvm+${name1}+":Perm Generation:"+${perm}+"%超阀值 " fi echo $jvm done #端口监控 if [ "$name" an |grep $port|grep LISTEN|grep $addr` if [ "$net" = "" ] then p1=$p1+${port}+"端口异常" fi done #url监控 ** sleep $step done exit 0 ---- 监控截图: [bech8l6wx7.jpeg] [475ldqsxa2.png]
JVM之常用监控工具 jps jinfo 获取配置信息 基本语法 jinfo [options] <pid> 常用选项 -sysprops:显示JVM进程的系统属性。 -flags:显示用于启动JVM的命令行标志和VM选项。 -flag <name>:显示指定JVM标志的当前值。 -flag [+|-]<name>:启用或禁用指定的JVM标志。 -flag <name>=<value>:设置指定JVM标志的值。 -h:打印帮助消息,列出可用选项的列表。 常用示例 获取正在运行的JVM的系统属性: jinfo -sysprops 608 .... JVM version is 25.231-b11 using thread-local object allocation.
介绍 在生产环境中,经常会遇到各种各样奇葩的性能问题,所以掌握最基本的JVM命令行监控工具还是很有必要的 名称 主要作用 jps 查看正在运行的Java进程 jstack 打印线程快照 jmap 导出堆内存映像文件 jstat 查看jvm统计信息 jinfo 实时查看和修改jvm配置参数 jhat 用于分析heapdump文件 jps:查看正在运行的Java进程 jps可以列出正在运行的Java进程,并显示虚拟机执行主类 help] jps [-q] [-mlvV] [<hostid>] Definitions: <hostid>: <hostname>[:<port>] 「可以看到可以监控远程服务 但是基于安全考虑,一般不使用」 常见的选项如下 选项 作用 -q 只输出进程id -m 输出传递给主类main函数的参数 -l 输出主类全类名,如果进程执行的是Jar包,输出jar包名字 -v 程序启动时指定的jvm 含义如下 Loaded 解释 Loaded 加载类的个数 Bytes 加载类的字节数 Unloaded 卸载类的个数 Bytes 卸载类的字节数 Time 花费的时间 jinfo:实时查看和修改jvm
JVM监控工具 Java的安装包自带了很多优秀的工具,善用这些工具对于监控和调试Java程序非常有帮助。 jstat ---- 用途:jstat利用了JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控等等。 采用 jstat -gcutil PID 10000 监控更简洁直观。 JVM的gc状况。 `date`" jmap_stat.sh 长期监控jmap状况。 #!
主要参数有: 1)-l 打印模块名以及包名 2)-v 打印传给JVM的参数 3)-m打印传给main方法的参数 jstat 用于打印JVM进程的性能数据,主要用来查看JVM gc相关的数据 jstat用法 其中-gc可以换成-class 、-gcnew、-gcold等参数;而54992表示的JVM的进程id(可能通过上面的jps命令查看) ;4s表求每4秒打印一次,后面的3表求共打印三次 jmap jmap用于分析JVM中堆中的对象,包括生成堆的dump文件,这个命令同样有多条子命令。 jmap -histo:live使用示例 3:jmap -dump :用于导出JVM的堆快照文件,方便用GUI工具分析。 ? jmap -finalizerinfo使用示例 注意:jmap依赖于 Java 虚拟机的Attach API,因此只能监控本地的java进程。
JVM性能监控工具是我们的得力助手,它们可以帮助我们追踪内存使用、线程情况、垃圾回收等关键指标,从而更好地了解应用程序的健康状况。 本文将介绍一些常用的JVM性能监控工具,并详细展示它们的用法,以便帮助你更好地监控和优化Java应用程序。 用法示例 监控JVM进程 打开VisualVM,点击“远程”选项卡。 在“本地”栏中选择要监控的JVM进程,点击“连接”。 在“监控”选项卡下,你可以查看内存使用情况、线程信息、类加载器等。 创建一个新的飞行记录会话,选择要监控的JVM进程。 在飞行记录会话中,你可以启动和停止飞行记录,并实时监控性能指标。 控制台 在Mission Control中,点击“控制台”选项。 工具四:JConsole 简介 JConsole是JDK自带的一个监控工具,它提供了一些基本的JVM性能监控功能,适合快速查看应用程序的健康状况。
public static void main(String[] args) throws Exception { fillHeap(1000); } } 可以观察到JConsole监控到的情况为 1.3线程监控 相当于jstack命令,线程停顿可以用这个标签页进行监控分析。
https://www.cnblogs.com/you-men/p/12839535.html
jstat:查看JVM统计信息 jstat(JVM Statistics Monitoring Tool):用于监视虚拟机各种运行状态信息的命令行工具。 用于对JVM中内存、线程和类等的监控,是一个基于JMX(java management extensions)的GUI性能监控工具。 主要功能: 1.生成/读取堆内存/线程快照 2.查看JVM参数和系统属性 3.查看运行中的虚拟机进程 4.程序资源的实时监控 5.JMX代理连接、远程环境监控、CPU分析和内存分析 官方地址:https 在线排查问题,无需重启;动态跟踪Java代码;实时监控JVM状态。 有什么办法可以监控到JVM的实时运行状态? 怎么快速定位应用的热点,生成火焰图? 官方地址:https://arthas.aliyun.com/doc/quick-start.html
一、概述 JMX Exporter https://github.com/prometheus/jmx_exporter 它是Prometheus官方组件,作为一个JAVA Agent来提供本地JVM 本文参考链接: https://chanjarster.github.io/post/prom-grafana-jvm/
Java JVM监控工具JConsole简介 jconsole命令 功能:打开java监视管理控制台 方法: jconsole [选项1] [选项2] …… [选项n] 常用选项: -help 2)关于内存的相关说明 Java VM管理两种内存:堆内存(heap memory)和非堆内存(non-heap memory),两者都是在JVM启动时被创建。 堆内存:JVM为所有类实例和数组分配内存的运行时数据区。堆内存大小可以是固定大小或者动态变化的。 垃圾收集器是一个会回收对象堆内存的自动化内存管理系统 非堆内存:包含被所有线程共享的方法区和JVM用于内部处理或优化的必备内存。 方法区逻辑上是堆内存的一部分,但是依赖于具体实现,JVM可能不会对它进行垃圾回收。像对内存一样,方法区可固定大小或者大小动态变化。方法区中的内存不一定是连续的。
JMX exporter,提供JMX中和JVM相关的metrics。 Tomcat,用来模拟一个Java应用。 第一步:启动几个Java应用 1) 新建一个目录,名字叫做prom-jvm-demo。 备注:这里提供的simple-config.yml仅仅提供了JVM的信息,更复杂的配置请参考JMX exporter文档。 第二步:启动Prometheus 1) 在之前新建目录prom-jvm-demo,新建一个文件prom-jmx.yml,内容如下: scrape_configs: - job_name: 'java 6) 使用我制作的JVM Dashboard,页面右侧出现的ID号是8563,记住这个号,填在如下图所示的位置: ? 7) 然后鼠标点击别处稍等一下,出现下图,选择一下数据源就可以了 ?
当获得 Java 进程的进程 ID 之后,我们便可以调用接下来介绍的各项监控及诊断工具了。 jstat jstat命令(帮助文档)可用来打印目标 Java 进程的性能数据。 反过来说,如果你不想被其他进程监控,那么你需要开启该参数。 jinfo jinfo命令(帮助文档)可用来查看目标 Java 进程的参数,如传递给 Java 虚拟机的-X(即输出中的 jvm_args)、-XX参数(即输出中的 VM Flags),以及可在 Java SegmentedCodeCache -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseG1GC VM Arguments: jvm_args 总结与实践 今天我介绍了 JDK 中用于监控及诊断的命令行工具。我们再来回顾一下。 jps将打印所有正在运行的 Java 进程。
如何使用JDK自带jvisualvm监控工具 使用jvisualvm、jmc远程监控JVM 部分参数说明 ? ? Visual GC(监控垃圾回收器) 有人说“JVM的内存分为两块堆和栈”,还有人说"JVM的内存分为三块(新生代、老年代、方法区)"该有个结论了 对于堆栈说法的人他们是根据下图中的维度来看问题的 ? jvisualvm和jmc都是JDK自带的监控工具。jmc监控数据比jvisualvm更加丰富。它们都在JDK bin目录中 1. 接下来介绍另一个JDK自带的监控工具jmc,打开bin/jmc.exe 之后,jmc即可扫描出本地运行的JVM进程 ? 选择一个进程,点开选择MBean服务器,右键 启动JMX控制台,即可看到监控信息 ? 如果想要用jmc监控远程的JVM进程,配置方式和jvisualvm方式一一样即可。