ACOS统一监控之java应用断诊

文静2年前技术文章654
一、前言

对于一些使用Java语言搭建的应用架构,java的应用诊断可以帮助开发人员快速发现和解决应用程序中的问题,提高应用程序的性能和稳定性。以下是常用Java应用诊断方法:

  1. 堆转储分析:使用工具如MAT(Memory Analyzer Tool)分析Java应用程序的堆转储,并查找内存泄漏、对象泄漏、不必要的对象创建等问题。

  2. 线程转储分析:使用工具如jstack、jvisualvm等分析Java应用程序的线程转储,查找死锁、线程阻塞、死循环等问题。

  3. 日志分析:使用工具如ELK(Elasticsearch、Logstash、Kibana)分析Java应用程序的日志,查找异常、警告、错误等信息,帮助发现和解决问题。

  4. 性能分析:使用工具如JProfiler、VisualVM等分析Java应用程序的性能,查找CPU使用率过高、内存占用过高、网络延迟等问题。

  5. 代码审查:进行代码审查,查找潜在的问题和漏洞,以提高代码质量和可维护性。

总之,应用诊断是一个多方面的过程,可能需要综合使用各种工具和方法来解决问题。


二、ACOS应用诊断

acos统一监控平台具备支持的多种环境下多种语言应用的接入监控能力,对于使用acos-agent探针监控Java应用数据更是十分成熟,涵盖了多种维度下的数据分析,例如节点、接口、数据库、链路、外部调用等;每个维度下支持组件类型和指标较为深入。同时支持较为灵活的扩展和自定义配置。但是此篇文章仅介绍java应用一些在线诊断和异常、线程分析使用场景。


1、异常分析:

异常分析对于Java应用分析的重要性非常大,可以帮助开发人员快速发现问题、定位问题、稳定性和可靠性手段。通过异常分析可以发现应用中常见的异常,例如网络连接异常、数据库连接异常等,通过解决这些异常可以优化应用提高用户的体验。

以下为acos页面异常分析操作:

  1. 当前页面会收敛应用所有的调用过程中异常名+异常数统计。

  2. 可以查看具体异常的出现次数的时序图、出错接口。

  3. 查看异常占比定位异常出现多接口进行优化。

  4. 支持异常前后文以及关联的trace链路可以下钻整个链路查看。

1.2.png                           1.1.png


2、dump分析:

Java内存dump文件也称为Java堆转储文件,在Java应用程序发生崩溃或者内存泄漏等问题时,内存dump文件可以用于分析Java应用程序的内存使用情况,包括内存泄漏、对象生命周期、GC性能等等。常见的Java内存dump文件分析工具有:jvisualvm、VisualVM、Eclipse Memory Analyzer(MAT)、YourKit Java Profiler、YourKit Java Profiler。以上分析工具可以用于分析Java进程的内存使用情况、应用程序的性能瓶颈和内存泄漏问题,但是总体的交互界面不是很友好等问题。

  1. acos对于应用运行的jvm内存支持页面转存dump后上述工具分析。同时提供更友好的Grace分析页面。

12.png  


3、线程分析:

线程安全问题是Java应用中常见的问题之一,例如:线程分析可以帮助开发人员确定应用程序中最耗时的部分并提供性能优化;通过线程分析,开发人员可以了解应用程序中哪些线程正在运行以及这些线程所占用的资源等信息。通过优化线程,开发人员可以提高应用程序的响应速度和稳定性,从而提供更好的用户体验。

以下为acos页面线程分析操作:

  1. 当前页面会收敛应用所有的调用线程+线程统计+线程耗时。

  2. 支持查看具体线程的CPU耗时和线程数(便于定位当较多线程数对cpu耗时影响)。

  3. 支持方法栈的下钻查看方法栈具体调用方法便于问题定位,例如查看处于BLOCKED状态的线程对应的方法,从而优化指定代码段,以便降低CPU使用率。

4.1.png   4.2.png


4、Arthas能力:

Arthas是Java领域线上问题的利器,支持实时监控应用程序、Arthas支持热更新代码,开发人员可以在不停止应用程序的情况下对代码进行修改和更新;提供丰富的命令行工具,支持分布式应用程序可以帮助开发人员更加高效地开发和调试应用程序,提高应用程序的性能和稳定性。

以下为acos页面arthas分析操作:

  1. 提供部分arthas部分命令的白屏化,便于用户查看JVM进程实时的内存使用情况、系统信息、系统变量和环境变量JVM进程的线程耗时情况以及指定线程的实时方法栈。

  2. 支持查看任意类的某个实例实时的属性取值情况

  3. 对CPU耗时、内存分配等对象进行一定时间的采样并生成相应的火焰图等等

3.1.png   3,2.png

    4.支持Arthas Shell建立链接,通过命令行方式使用Arthas诊断。

3.3.png

综上所述,Java应用诊断对于提高应用程序的稳定性和可靠性、提高应用程序的性能和效率、缩短故障修复时间以及提高开发人员的工作效率等方面具有重要的作用。


结束

观测运维套件-ACOS可以有效的帮助企业提高运维效率 、提升系统可用率 、降低IT成本,欢迎企业预约演示或者试用。

相关文章

MySQL运维实战之ProxySQL(9.2)ProxySQL安装和配置

proxysql安装proxysql提供了各个linux发行版的安装包,我们可以使用操作系统的包管理系统来安装proxysql。这里我们以CentOS 7为例:1、从github下载安装包根据OS版本...

spark与mr的异同

1.MR:抽象层次低,需要使用手工代码来完成程序编写,使用上难以上手;Spark:Spark 采用RDD 计算模型,简单容易上手。2.MR:只提供map 和reduce 两个操作,表达能力欠缺;Spa...

MySQL运维实战(4.5) SQL_MODE之NO_ZERO_DATE和NO_ZERO_IN_DATE

NO_ZERO_DATE:日期中不允许'0000-00-00'NO_ZERO_IN_DATE:日期中年、月或日不允许为0,如不允许'2021-00-01', '...

MySQL 通过 MTS 多线程恢复增量日志备份

MySQL 通过 MTS 多线程恢复增量日志备份

一、前言当发生 DDL 误删数据时,只能通过 备份 + 增量日志 来恢复,备份恢复到新实例后,将增量日志备份进行应用,此时只能单线程效率不高,我们可以使用 MySQL 5.7 推出的 MTS 多线程复...

kubernetes集群清理

清理如果你在集群中使用了一次性服务器进行测试,则可以关闭这些服务器,而无需进一步清理。你可以使用 kubectl config delete-cluster 删除对集群的本地引用。但是,如果要更干净地...

MySQL运维实战之ProxySQL(9.3)使用ProxySQL实现读写分离

proxysql读写分离主要通过mysql_query_rules表中的规则来实现。下面是具体的配置步骤:hostgroup配置insert into mysql_servers&...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。