Java运行时监控,第1部分: Java系统运行时性能和可用性监控

简介

当今的许多 Java 应用程序都依赖于一组复杂的分布式依赖关系和移动部件。很多外部因素都可能对应用程序的性能和可用性造成影响。这些影响基本上都无法完全消除或解决,且难以在预生成环境中准确模拟。Stuff happens。但是,您可以创建并维护一个全面的系统来监控应用程序的整个生态系统,从而显著降低这些事件的严重性和持续时间。

本系列文章给出了实现此类系统的一些模式和技巧。模式,以及我将使用的一些术语,都表示泛指。通过结合示例代码和插图,它们将帮助您理解应用程序性能监控的概念。这种理解强调解决方案的必要性,并能帮助您选择商业或开源的解决方案。您可以扩展和定制一个解决方案,或者根据需要将其作为设计解决方案的蓝图。

第 1 部分:

探究应用程序性能管理(APM)系统的属性

描述系统监控的常见反面模式

列举监控 JVM 性能的方法

提供有效插装应用程序源代码的方法

第 2 部分将重点介绍插装 Java 类及资源而无需修改原始源代码的方法。第 3 部分将论述监控 JVM 外部资源的方法,包括主机及其操作系统以及数据库和消息传递系统等远程服务。它还将总结并归纳其他的 APM 问题,如数据管理、数据虚拟化、报告和报警。

APM 系统:模式和反面模式

为让大家正确入门,应当强调,虽然此处介绍的多数与 Java 相关的内容看上去与应用程序和代码性能分析的流程类似,但其实并非 如此。性能分析是一个极具价值的生产前流程,它可以确认您的 Java 代码是否可扩展、高效、快速和足够出色。但是,根据 stuff happens 公理,当您在生产中遇到无法说明的问题时,优秀的开发阶段代码性能分析可能无用武之地。

我的意思是,在生产中实现性能分析的一些方面,并从运行中的应用程序收集一些相同的实时数据及其所有外部依赖关系。该数据由一系列遍及目标的定量测量指标组成,它们为整个系统的健康状况提供细粒度和详细的表示。此外,通过保留这些指标的历史库,您可以捕获准确的基线,以帮助您确认环境仍然健康,或查明特定缺陷的根源和规模。

监控反面模式

完全没有监控资源的应用程序微乎其微,但仍然需要考虑这些反面模式,它们经常出现在运行环境中:

盲点:某些系统依赖关系未受监控,或者监控数据不可访问。运行中的数据库可以覆盖所有监控范围,但如果受支持的网络无法全面覆盖,则诊断小组在分析数据库性能和应用服务器症状时将无法看到网络中的故障。

黑盒:核心应用程序或者它的某个依赖关系对于其内部可能不具有监控透明性。JVM 是一个不折不扣的黑盒。举例来说,诊断小组正在调查 JVM 中的莫名延时问题,并且只拥有支持操作系统的统计数据(如 CPU 利用率和进程需要的内存大小),则他们可能无法诊断垃圾收集或线程同步问题。

脱节和断开的监控系统:应用程序可以由大型共享数据中心托管,其中,依赖关系由一系列共享资源组成,比如说数据库、存储区网络(SAN)库、消息传递及中间件服务。组织有时高度孤立,各小组只负责管理自己的监控和 APM 系统(请参阅 孤立监控的缺陷 侧栏)。没有各依赖关系的整合视图,各组件所有者只能管中窥豹,只见一斑。

时间: 2024-12-25 15:24:12

Java运行时监控,第1部分: Java系统运行时性能和可用性监控的相关文章

Android应用程序框架层和系统运行库层日志系统源代码分析

    在开发Android应用程序时,少不了使用Log来监控和调试程序的执行.在上一篇文章Android日志系统驱动程序Logger源代码分析中,我们分析了驱动程序Logger的源代码,在前面的文章浅谈Android系统开发中Log的使用一文,我们也简单介绍在应用程序中使Log的方法,在这篇文章中,我们将详细介绍Android应用程序框架层和系统运行库存层日志系统的源代码,使得我们可以更好地理解Android的日志系统的实现.         我们在Android应用程序,一般是调用应用程序框

自己动手保护Windows Server 2008系统运行安全

凭借新鲜超强的功能以及更胜一筹的安全优势,Windows Server 2008系统吸引了许多http://www.aliyun.com/zixun/aggregation/14045.html">网络管理员在不知不觉中前来试用尝鲜.可是,这并不能说明Windows Server 2008系统在安全方面就可以高枕无忧了,因为在不同的使用环境下,Windows Server 2008系统表现出来的安全防范能力是不一样的,甚至该系统在某些方面没有一点安全抵抗能力,这时就需要我们自己动手来保护W

Java 7 SDP:一次编写,到处运行,有时还运行得超炫!

本文将简单介绍Java 7 SDK里引入的Java套接字直接协议(Sockets Direct Protocol,SDP),这项新技术是个非常激动人心的突破.如果要对InfiniBand的远程直接内存存取(Remote Direct Memory Access,RDMA)进行native访问,SDP就能让超高性能计算(Ultra High Performance Computing,UHPC)社区在这种不常见的场景下使用Java通用的特性和优势.RDMA为低延迟应用提供了一种协议,可以直接访问其

按钮-自己参照书本写了一个Java Swing中的容器类入门程序设计,但是运行结果不对,求大神帮帮忙!

问题描述 自己参照书本写了一个Java Swing中的容器类入门程序设计,但是运行结果不对,求大神帮帮忙! /*题目是这样的:创建一个窗体在其中摆放两个内容面板对两个面板进行边框个性化设置.初始状态为第二个面板不可见,当单击第一个面板中的"打开"按钮时,第二个面板即可见:当单击第一个面板中的"关闭"按钮时,第二个面板消失. 以下是我结合书本写的代码,不知道为什么运行不了???*/import javax.swing.*;import java.awt.*;impor

java以webservice形式向发送远程数据,发送时出现重复数据,如何解决?

问题描述 java以webservice形式向发送远程数据,发送时出现重复数据,如何解决? 我是用java从本地数据库中(oracle)提取数据后,封装,发送给远程服务器,然后远程服务器会返回发送结果代码. 我在主表中的每条数据都有一个字段显示其发送次数,还有一个字段显示发送结果.再有一张结果表,专门存储每条数据每次发送的结果和错误原因等详细信息.两张表是一对多关系.主表对每条数据是唯一的,当发送完,次数字段会增加1,发送结果也会更新 最新一次数据发送的结果.平时数据量小的时候完全没有问题,比如

Java魔法堂:以Windows服务的形式运行Java程序

一.前言   由于防止维护人员误操作关闭Java控制台程序,因此决定将其改造为以Windows服务的形式运行.弄了一个上午总算搞定了,下面记录下来,以供日后查阅.   二.Java Service Wrapper   官网地址:http://wrapper.tanukisoftware.com/doc/english/download.jsp   JavaServiceWrapper以守护进程或windows服务的方式运行java程序.JSW提供四种方案改造原有项目,以实现守护进程或window

调用java进程时为什么找不到java类

问题描述 调用java进程时为什么找不到java类 您好,请问我在调用java进程时为什么找不到java类? 我用的是myeclipse,执行命令 Process p = run.exec("java cn.com.jit.ida.demo.ratk.InvokeProcess"); 时,发现没有调用InvokeProcess.java类 解决方案 你这没有编译,直接执行的,找不到.class文件.应该先使用javac命令 解决方案二: 你的路径对吗,是否在同一个目录下.

java中在使用log4j中的error打印日志时,怎么能捕获到,然后去调用另一个方法。

问题描述 java中在使用log4j中的error打印日志时,怎么能捕获到,然后去调用另一个方法. 使用log4j中的error打印日志时,怎么能捕获到,然后去调用另一个方法. 解决方案 java日志信息 log4j 使用方法java日志信息 log4j 使用方法java日志信息 log4j 使用方法 解决方案二: 一般的error级别的日志都是在异常分支中打印的.你可以直接在catch分支里面调用需要的方法.

绑定日志-maven jetty 环境下的Web项目在使用logback slf4j时,slf4j总是绑定java.util.logging

问题描述 maven jetty 环境下的Web项目在使用logback slf4j时,slf4j总是绑定java.util.logging Logger logger = (Logger) LoggerFactory.getLogger(UserAction.class); logger.info("loginUser:username{},password{}",username,password); java.lang.ClassCastException: org.slf4j.