`

【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。例如,高斯模糊、...

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

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

    mysql-connector-java-gpl-5.1.36

    "mysql-connector-java-gpl-5.1.36"是MySQL Connector/J的一个特定版本,发布于GPL(GNU General Public License)许可下,意味着它是开源且可自由分发的。 MySQL Connector/J 5.1.36是针对MySQL 5.1系列数据库...

    ckeditor-java-core-3.5.3

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

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

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

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

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

    javacv所有jar包-java

    从javacv-platform-1.3.3-bin.zip中抽出来的:javacpp.jar、javacv.jar、javacv-platform.jar、opencv.jar、opencv-android-arm.jar、opencv-android-x86.jar、opencv-linux-armhf.jar 、opencv-linux-ppc64le.jar、...

    java3d-1_3_1-windows-i586-opengl-sdk.exe

    java3d-1_3_1-windows-i586-opengl-sdk.exe

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

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

    java图片处理工具类JAR包 java-image-scalingjar

    java图片处理工具类JAR包 java-image-scalingjar

    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,支持多种浏览器,并且可以与各种测试框架...

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

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

    java解压rar 包含java-unrar-0.3.jar

    `java-unrar-0.3.jar`是一个库,它允许Java开发者处理RAR文件,无需依赖外部命令行工具,如WinRAR。这个库为Java提供了一个简单易用的API,可以方便地实现RAR文件的解压功能。 `java-unrar-0.3.jar`库是由Andrei ...

    selenium-java-2.44.0、selenium-java-2.44.0-srcs、selenium-server-standalone-2.44.0

    首先,我们来了解一下 `selenium-java-2.44.0.jar`。这是一个预编译的Java库,其中包含了Selenium WebDriver的Java绑定。WebDriver是Selenium的一个核心部分,它提供了一个编程接口,允许测试脚本直接控制浏览器。...

    深入体验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

    javacv-core-1.3.zip

    javacv-core-1.3.zip包含javacv.jar,javacpp.jar和javacv-platform.jar三个核心jar包

Global site tag (gtag.js) - Google Analytics