`

【Java核心-性能基础】诊断后台服务明显变慢

    博客分类:
  • Java
 
阅读更多

详细描述问题现象

服务变慢的具体表现形式往往可以提供一些思路,帮我们缩小排查范围。如:

服务时突然变慢 还是 长时间运行后变慢?

该现象是否重复出现?

 

虽然以下开发人员的回答经常会被谴责,甚至认为政治不正确,但这样的回答确实可以为排查问题提供一些信息。

测试:“程序有bug。”

开发:“不可能。在我机器上运行是好的。”

在这种情况下,“先认定程序逻辑没问题,去排查环境问题”也是比较合理的一个方向。

 

解决思路

1. 定位问题原因

1.1 先排查功能性原因

通过问题中描述的业务场景,自顶向下理清各模块调用链路;结合服务日志及其它相关运行时数据定位问题。

查看服务自身的业务日志。如果有异常日志,可从异常日志入手。

 

1.2 再排查非功能性原因

1.2.1 查看操作系统级别的资源使用情况

如,是否大量CPU、内存等资源被其它进程占用。

Linux 中可使用命令:

  • dstat:一个综合性的系统资源使用状况查看工具
  • top:查看CPU与内存占用率较高的进程数据(默认按CPU占用率降序排列)
  • vmstat:查看CPU、内存、IO等性能相关的数据
    • 如,上下文切换频率(cs)比系统中断频率(in)高很多,可能是多线程调度不合理
  • pidstat:查看单个进程的CPU、内存、IO等相关数据
  • iostat:查看各设备的IO状况
  • free命令:查看操作系统内存使用情况

 

 

1.2.2 查看Java服务的JVM相关日志

  • GC日志中是否出现 Full GC、Minor GC 耗时是否变长等现象。
  • 查看内存使用信息(jstat)
  • 查看是否出现死锁(jstack)

另外,使用 Profiling 工具对 Java 程序进行性能分析一般是在性能测试阶段。(专业的 Profiling 工具如果用得好,帮助很大)

对生产系统上的 Java程序进行 Profiling 会使系统性能明显下降。

如果确实需要在生产系统上进行,可以采用 JFR + JMC 的方式。JFR 采集数据的方式开销较小(低于2%)

JVM 内存监控与诊断

 

有时候 火焰图 也是一种选择。可以从视觉上的感受哪些方法耗时较长。(当然,专业集成化 Profiling 工具更强大)

 

2. 根据问题原因修复程序或调整相关配置,并验证问题已解决

如未解决,重复上述操作

 

 

  • 大小: 321.5 KB
分享到:
评论

相关推荐

    javacv-platform-1.3-bin.zip

    首先,OpenCV是JavaCV的核心部分,它是一个广泛使用的计算机视觉库,包含了众多图像处理和计算机视觉算法。在JavaCV 1.3中,你可以找到用于图像处理、特征检测、对象识别、人脸识别等功能的API。例如,高斯模糊、...

    javacv-platform-1.3.3-bin.zip

    javacv官方最新全量jar包,javacv-platform-1.3.3-bin.zip,由于github国内下载较慢,此文件只作为分流,由于现在csdn没办法设置免费资源了,只能设置最低的2分,望大家见谅!

    mysql-connector-java-5.1.7-bin.jar

    "mysql-connector-java-5.1.7-bin.jar" 文件就是这个桥梁,它是一个Java归档(JAR)文件,包含了MySQL JDBC驱动的所有必要组件。 MySQL JDBC驱动,也被称为MySQL Connector/J,允许Java应用程序通过遵循JDBC API来...

    mysql-connector-java-5.1.40-bin.jar连接器

    在这个特定的版本——mysql-connector-java-5.1.40-bin.jar中,我们找到了这个连接器的5.1系列的一个稳定版本。 首先,让我们了解JDBC的作用。JDBC是Sun Microsystems(现为Oracle公司)为Java编程语言设计的一套...

    ckeditor-java-core-3.5.3

    虽然"ckeditor-java-core-3.5.3"已经较旧,但开发者应考虑适时升级到最新版本,以获取更好的性能、更多的功能和安全修复。CKEditor的最新版本通常会提供更好的用户体验和更完善的API。 通过理解和掌握这些知识点,...

    Java-WebSocket-jar

    Java-WebSocket jar包,封装WebSocket实现。

    mysql驱动包 mysql-connector-java-5.1.13-bin.jar

    mysql驱动包 mysql-connector-java-5.1.13-bin.jar 方便快捷获取。。。

    mysql-connector-java-5.1.42-bin.jar 官网驱动下载

    mysql-connector-java-5.1.42-bin.jar 官网下载的驱动

    java基础教程----精华版

    Java是一种广泛使用的面向对象的编程语言,以其平台独立性、安全性、健壮性和高性能而闻名。这个"java基础教程----精华版"显然是一份精心整理的资料,旨在帮助初学者快速掌握Java编程的基础知识。下面将详细介绍Java...

    mysql-connector-java-5.1.37

    MySQL Connector/J 5.1.37 是MySQL数据库与Java应用程序之间的重要桥梁,它是一个实现了JDBC(Java Database Connectivity)接口的驱动程序,允许Java开发者在应用中与MySQL数据库进行交互。这个版本的驱动是MySQL...

    mysql-connector-java-5.1.7-bin.jar包

    mysql 数据库 JDBC驱动包 mysql-connector-java-5.1.7-bin.jar

    Core Java.JAVA核心技术(中文版)

    《Core Java.JAVA核心技术(中文版)》是学习Java编程的重要参考资料,主要涵盖了Java语言的基础以及进阶知识。这本书深入浅出地讲解了Java的核心概念和技术,为读者提供了全面而细致的学习路径。以下是对该书内容的...

    mysql-connector-java-5.1.30-bin.jar

    mysql-connector-java-5.1.30-bin.jar 最新的mysql jdbc

    selenium-java-2.47.1.zip

    这个压缩包 "selenium-java-2.47.1.zip" 包含了Selenium的Java版本,具体是2.47.1的更新,发布于2015年8月。这个版本在当时是一个稳定且广泛使用的版本,它提供了丰富的API,支持多种浏览器,并且可以与各种测试框架...

    eclipse-java-indigo-SR2-win32

    2. **Service Release 2 (SR2)**:这是对Indigo的第二次服务更新,通常包含了修复的问题、性能改进和新的特性。SR2是为了提供更稳定、更可靠的开发环境,解决用户在使用Indigo初期版本时遇到的问题。 3. **集成...

    mysql-connector-java-5.1.20-bin.jar

    mysql-connector-java-5.1.20-bin.jar java中连接mysql用到的驱动程序

    基于java--jsp--servlet--tomcat--sqlserver的社区医疗管理系统

    《基于Java-JSP-Servlet-Tomcat-SQLServer的社区医疗管理系统详解》 社区医疗管理系统是一种信息化解决方案,它旨在提高医疗服务的效率和质量,优化资源配置,满足城市社区居民的医疗需求。本文将深入探讨该系统的...

    深入体验Java_Web开发内幕-核心基础.高清扫描版

    《深入体验Java_Web开发内幕-核心基础》是张孝祥著作的一本关于Java Web开发的深度解析书籍,旨在帮助读者全面理解并掌握Java Web开发的核心技术。这本书以高清扫描版的形式提供,使得读者能够在电子设备上清晰地...

    mysql-connector-java-5.1.25.jar(用于JAVA连MySQL驱动)

    JAVA连MySQL驱动mysql-connector-java-5.1.25.jar

    mysql链接数据库jar驱动包(mysql-connector-java-5.0.4-bin.jar)

    用于连接mysql数据库. mysql-connector-java-5.0.4-bin.jar

Global site tag (gtag.js) - Google Analytics