通过日志监控并收集Java应用程序性能数据

引言

系统日志是应用程序问题诊断及运行维护的重要工具。Logback、Log4j 是常用于 Java 平台的日志记录 API. 目前大部分产品只是将系统重要参数、状态的变化及异常信息通过日志输出。本文将要介绍的 Perf4j 是一款专门用 于 Java 服务器端代码计时、记录日志和监控结果的开源工具包。Perf4j 对常用日志工具包进行了扩展,能够将得到的原 始性能数据进行统计并发布到可定制的输出源,如控制台、日志文件、JMX 等。Perf4j 提供了多种方式与 Java 代码集成 ,开发和系统维人员能够灵活地将 Perf4j 的 API 嵌入到各种不同架构的应用程序中。

Perf4j 目前依托于开源项 目协作平台 Codehaus 进行文档及代码管理,下一步该项目计划迁移到 Github 平台,以便更多的社区及开发人员可以参与 到开发及维护中来。Perf4j 欢迎使用者提出新的功能需求并且鼓励将定制或扩展的代码贡献到 Perf4j 源码中。本文中示 例代码使用的 Perf4j 版本是 0.9.16,读者需在下载类包或配置 Maven 时留意。

阅读文章之前,您要对 Java 注 解、JMX、面向方面编程有一些了解。特别是 JConsole 的使用及 Spring AOP 的配置方式要较为熟悉。

文章首先阐 明在何种应用场景下应优先考虑使用 Perf4j。然后是具体讲解 Pef4j 与应用程序的集成方式。最后会介绍如何将收集的数 据生成便于分析的可视化图表。

应用场景

在 Java 平台上遇到性能问题时,如 CPU 占用过高、系统响应缓 慢,通常的分析方法是使用 JVM 剖析工具在系统瓶颈临界点前一段时间抓取 CPU 占用分布,再对 CPU 占用率最高的几个 方法排查。Perf4j 的优势在于能够持续跟踪统计所关注功能代码的执行效率,对于前后两个版本出现较大差异的方法进行 深入分析,可以在开发周期中尽早发现问题。Perf4j 还可以用在产品环境中,从运营的早期开始,将其统计的数据做为系 统的性能和健康指标长期监测。

首选 Perf4j 的应用场景:

Java 本地代码调用(JNI)

分布式系统、集群部署

面向服务体系结构(SOA)

远程方法调用(RMI)

开发人员必须将本地方法、远程方法及 Web services 的性能问题隔离出来,以防干扰对 Java 应用程序本身的分析。 通过日志记录则是最简单的方式;采用分布式架构或集群部署的系统相对复杂,不同的网络环境、基础硬件和操作系统的差 异、虚拟主机中资源与配置的差异等造成很难采用统一的工具来监测代码级别的性能指标。而日志记录则可以轻松加入到各 种程序中,且是资源与时间成本最低的方式。Perf4j 提供了 CSV 格式的转换工具,开发人员可以借助第三方工具方便地将 统计结果汇总分析。

集成到应用程序

下面将分两种方式具体讲述如何利用 Per4j 提供的 API。在实际的项 目中,应根据现有的程序框架及监测目的灵活选择。另外,针对 WebSphere 应用服务器的自有日志系统,还必须采取额外 的措施来确保 Perf4j 的正常工作。

对代码段计时

Perf4j 中 org.perf4j.StopWatch 是整个 API 中的基础 工具。这是一个封装良好的计时器。可以把 StopWatch 嵌入到代码中任何地方。这种方式往往使得复杂的方法得到分解, 从而有利于精确定位问题的根源。以下通过清单 1 和清单 2 来介绍其具体用法。

清单 1.StopWacth 基本用法

public static void basicStopWatch() throws InterruptedException{
   // 创建 StopWacth 时开始计时,之后也可以用 stopWatch.start() 重新设定计时开始时间点
   StopWatch stopWatch = new StopWatch("TransactionA");
   // 执行需要计时的代码
   Thread.sleep(2 * 1000L);
   String result = stopWatch.stop();
   System.out.print(result);
}

清单 1 中最后输出的结果示例:start[1340442785756] time[1995] tag[TransactionA]。在构造函数中设定 tag[TransactionA] 用来区分不同的业务逻辑,可以把它看成是性能分析中的事务(Transaction)。

如果需要将 多段代码分开统计,可采用 LoggingStopWatch 类的 lap() 方法定义多个事务。

清单 2.LoggingStopWatch 用法

public static void loggingStopWacth() throws InterruptedException{
   LoggingStopWatch stopWatch = new LoggingStopWatch();
   // 设定阈值,小于此阈值的结果将不会被记录下来
   stopWatch.setTimeThreshold(1*1000L);
   Thread.sleep(2 * 1000L);
   // 停止当前计时,开始新的起始时间点
   stopWatch.lap("TransactionB");
   Thread.sleep(500L);
   stopWatch.stop("TransactionC");
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索日志
, 性能
, 方法
, 应用程序
, 代码
, logback
, 日志系统 logback
, java 第三方监控
, logback access
, 方式
java日志
graylog2收集应用日志、容器内应用日志收集、应用性能监控、apm应用性能监控、应用性能监控平台,以便于您获取更多的相关知识。

时间: 2024-12-23 18:58:19

通过日志监控并收集Java应用程序性能数据的相关文章

在NetBeans IDE 6.0中分析Java应用程序性能

NetBeans IDE 6.0 包含一个强大的性能分析工具,可提供与应用程序运行时行为有关的重要信息.通过 NetBeans 性能分析工具,我们可以方便地在 IDE 中监控应用程序的线程状态.CPU 性能以及内存使用情况,而且产生的开销相对较少. 本文将概述 IDE 中包含的性能分析工具,并指导您快速开始分析 NetBeans 项目的性能.本文旨在演示 IDE 中可用的各种性能分析任务以及分析项目性能时可以获得的分析结果.但并不覆盖 IDE 中包含的所有性能分析功能,也不会深入探索如何研究性能

数据中心里如何做好日志监控

日志是带时间标记的足迹.记录行为.条件和事件,数据中心里的任何设备都会有日志输出,对这些日志进行管理是数据中心运维工作的重要组成部分.日志管理不但可以对日常操作进行控制与管理提供依据,还可以在某些故障发生之前通过日志信息就能感知到,也可以在故障发生时打印一些异常记录,还可以供故障发生后分析使用.作为数据中心的运维人员学会检查和分析日志数据,是一项必备的技能.然而日志是一把"双刃剑",用好它,可以大幅提升数据中心的运维水平,降低数据中心的故障发生概率,节约运维开销:用不好它,反而会画蛇添

如何监控Java应用程序的Windows内存使用情况

Java 技术最知名的一个优点是:与其他语言如 C 程序员不同,Java 程序员不需要对令 人畏惧的内存分配和释放负责.Java 运行库可以为您管理这些任务.每个实例化的对象都自 动在堆中分配内存,垃圾收集程序定期收回不再使用的对象所占据的内存.但是您还不能完 全撒手不管.您仍然需要监控程序的内存使用情况,因为 Java 进程的内存不仅仅包括堆中 分配的对象.它还包括程序的字节码(JVM 在运行时解释执行的指令).JIT 代码(已经为 目标处理器编译过的代码).任何本机代码和 JVM 使用的一些

python重构日志监控脚本的程序代码

先看代码: nginx日志监控脚本Python #!/usr/bin/python2.6 #coding=utf-8 import os import time #日志记录 num_file = '/data/www/www.111cn.net/log/num' log_file = '/data/www/www.111cn.net/log/www.111cn.net.log' #ip屏蔽函数 def shellcmd(ip,con):     os.system('/root/shell/ng

日志监控告警系统的设计与实现

日志监控告警系统 基于的日志进行监控,监控需要一定规则,对触发监控规则的日志信息进行告警,告警的方式,是短信和邮件. log4j---->error,info,debug 应用程序程序的日志  error级别 TimeOutException 角标越界IndexXXXException ......Error   com.alibaba.jstorm.daemon.worker.WorkerData]-[INFO] Current worker taskList:[1, 2, 3, 4, 5,

如何集成Perf4j到Java应用程序中并生成性能数据

在实际部署的生产环境能够以较低的风险及成本实现对业务逻辑级别性能问题的追踪.本文将介绍如何集成 Perf4j 到 Java 应用程序中并生成性能数据. 系统日志是应用程序问题诊断及运行维护的重要工具.Logback.Log4j 是常用于 Java 平台的日志记录 API. 目前大部分产品只是将系统重要参数.状态的变化及异常信息通过日志输出.本文将要介绍的 Perf4j 是一款专门用于 Java 服务器端代码计时.记录日志和监控结果的开源工具包.Perf4j 对常用日志工具包进行了扩展,能够将得到

使用Install Anywhere让您的Java安装程序更高效和灵活

本文将介绍如何借助 Install Anywhere 更好地规划和设计 Java 安装程序,提供多平台多操作系统的部署,定义更灵 活的安装流程和环境检查,开发更加友好和美观的用户交互界面.文章主要面向 Java 软件安装程序开发人员,假定您对 Java 以及 Ant 开发有基本的了解,您也可以参见参考资料以了解更多 Install Anywhere 相关的知识. Install Anywhere 介绍 Install Anywhere 概述 Install Anywhere(以下简称 IA)是由

linux-java开发一个日志监控系统

问题描述 java开发一个日志监控系统 java开发一个日志监控系统,监控linux日志和windows日志,并把当前监控情况在web页面上展现 解决方案 没看明白是什么意思,是web项目不?如果是,可以用spring的AOP做日志,很方便,效率也高,把日志存数据库然后再做显示 解决方案二: 是web项目, 但是不是写日志.而已用java程序来监控window下的日志文件,有些日志文件是在linux下的(因为有些项目是部署在linux系统里的).需要是读取这些日志文件,如果监控到日志文件中有er

ElasticSearch实战-日志监控平台

1.概述 在项目业务倍增的情况下,查询效率受到影响,这里我们经过讨论,引进了分布式搜索套件--ElasticSearch,通过分布式搜索来解决当下业务上存在的问题.下面给大家列出今天分析的目录: ElasticSearch 套件介绍 ElasticSearch 应用场景和案例 平台架构 下面开始今天的内容分享. 2.ElasticSearch 套件 2.1LogStash LogStash是一个开源的.免费的日志收集工具,属于Elastic家族的一员,负责将收集的日志信息输送到ElasticSe