• JAVA应用监测


    Java应用检测内容

    • 当java运行一个应用,就会生成一个JVM的实例,而java应用则运行于此JVM实例中,当应用退出,JVM实例也会关闭。启动多个java应用,也会启动多个JVM实例,它们不会相互影响(当然,它们都会占用系统的资源)。
    • 虚拟机主要有三大模块,一个类加载子系统(Class Loader Subsystem,负责加载类),一个执行引擎(Execution Engine,负责执行类的方法指令和垃圾回收),一个运行时数据区(Runtime Data Areas,负责存放程序运行时的数据)。
    • 其中运行时数据区分为方法区(存储如类信息,方法信息,引用,常量池等),堆(存储类实例对象和数组),java栈(以栈方式存放以帧为单位保存线程的运行状态帧),本地方法栈(跟本地方法相关的数据区),程序计数器(每一个线程都有它自己的程序计数器,表示下一条将被执行指令的“地址”)。
    • java应用启动流程就是通过类加载子系统加载相关的类,然后把相关数据如类信息,方法等存到方法区的栈中,实例化相关的类,同时把实例对象存储在堆中,程序运行位置则是每个线程使用计数器来指定。方法区和堆是线程共享的,程序计数器及Java栈是线程私有的。
    • 运行时数据区是java应用运行时的监测区域,其中各个区域的内存情况,特别是堆的内存使用情况,是重点区域。堆还会分年轻代、年老代及 Metaspace,垃圾回收器会进行分代回收。通过它的回收情况监测,可以检测到是否存在内存泄漏,而java栈则与线程有关,线程的运行状态又与CPU相关,因此java栈的监测可以知道CPU占用过大的问题,同时方法区和java栈的占用内存大小也是一个监测的指标。

    如何监测

    按监测工具的监测方式,主要分为以下四大类:

    • 程序内置-日志及监控页面
    • java自带命令行监测工具
    • java自带可视化监测工具
    • 第三方诊断工具

    1 程序内置监测

    程序内置监测就比较简单,在初学java时,最常用的就是使用System.out.println()把自己想要输出的内容输出,在开发阶段也有人喜欢这样,一方面可以输出业务内容,监测功能的正常与否,另一方面可以输出系统属性System.getProperties()System.getProperty()。当然,现在更多的使用日志框架进行输出,并把日志按级别输出到文件中,如log4jlogback。对于Spring Boot应用,还可以使用actuator来监测程序运行情况。tomcat容器自身也带有监测页面。此类监测主要特点是程序内置,并且通过日志输出来监测,开发人员相对比较熟悉了,一般来说在开发和测试阶段比较常用,而生产环境下,日志一般是error级别或者由于安全考虑,自带的一些监测页面有可能会关闭。因此,此类监测不再细说。

    2 java自带命令行监测工具

    在jdk的安装目录下的的bin目录,已经提供了多种命令行监测工具,以便于开发人员和运维人员监测java应用,同时方便开发及运维人员对问题进行诊断,因此,此类工具是java应用监测的重要手段。一般来说,常用的命令行工具包括jps,jinfo,jmap,jstack,jstat,其中

    • jps查看java进程ID
    • jinfo查看及调整虚拟机参数
    • jmap查看堆(heap)使用情况及生成堆快照
    • jstack查看线程运行状态及生成线程快照
    • jstat显示进程中的类装载、内存、垃圾收集等运行数据。

    通过这些工具,基本上可以了解java应用的内存变化状态,线程运行状态等信息,进而为应用监测及问题诊断提供依据。

    3 java自带可视化监测工具

    除了命令行工具,在windows平台下,jdk还提供了可视化监测工具,以更直观,更方便的方式对java应用运行状况进行监测。这两款工具分别是jconsolejvisualvm,在jdk下的bin目录下可以找到。它们均可监测本地及远程的java应用,包括堆使用情况,线程使用,cpu使用,类加载情况,gc情况,jvisualvm还可以生成相应的堆和线程快照,同时还可以使用相应的插件,以便于进一步分析。

    4 第三方诊断工具

    除了java自带的工具,一些第三方的工具也是监测及分析诊断,性能调优的利器,包括MATBTraceArthas。其中

    • MATeclipse的内存分析插件,通过MAT可以对dump出来的堆快照进行分析,并且辅助分析内存泄露原因,快速的计算出在内存中对象的占用大小,垃圾收集器的回收工作情况,并可以通过报表直观的查看到可能造成这种结果的对象。
    • BTrace是是sun推出的一款Java 动态、安全追踪(监控)工具,可以在不停机的情况下监控系统运行情况,并且做到最少的侵入,占用最少的系统资源。特别适用在生产环境下对java应用进行监测,问题排查。
    • Arthas是阿里开源的在线Java诊断工具,同样可以在不停机情况监控系统,包括内存情况,线程情况,GC情况,运行时数据,也可以监测方法参数、返回值,异常返回等数据,堪称神器,在生产环境下使用非常方便。


  • 相关阅读:
    非静态成员的sizeof
    Android中java.lang.ClassNotFoundException: ***.**** in loader dalvik.system.PathClassLoader[/data/app
    手机 SIM卡的EF
    android 获取手机ip的三种方式
    获取图片倒影效果
    python基础
    Python学习_数据处理split方法
    Python学习_从文件读取数据和保存数据
    Python学习_列表推导和Lambda表达式
    python学习_数据处理编程实例(一)
  • 原文地址:https://www.cnblogs.com/doit8791/p/12081977.html
Copyright © 2020-2023  润新知