网站常见问题1分钟定位 - 如何使用阿里云ARMS诊断Java应用卡顿问题

简介:     不要慌,上面只是一张贴图。     为什么“慢”那么难查   网站卡顿、页面加载过慢是互联网应用最常见的问题之一。排查、解决这类问题通常会花费开发运维人员大量的时间,通常是因为以下三个原因: 应用链路太长,无从下手。
 
 
不要慌,上面只是一张贴图。
 
 

为什么“慢”那么难查

 
网站卡顿、页面加载过慢是互联网应用最常见的问题之一。排查、解决这类问题通常会花费开发运维人员大量的时间,通常是因为以下三个原因:
  • 应用链路太长,无从下手。
    • 从前端页面到后台网关,从Web应用服务器到后台数据库,任何一个环节的问题都有可能导致请求整体卡顿,到底是前端资源加载过慢?还是数据库出了问题?还是新发布的服务端代码有性能问题?出现问题的原因五花八门。
    • 采用“微服务”架构的应用,链路更加复杂。不同组件可能由不同的团队、人员分别维护,加剧了问题排查的难度。
  • 日志不全或质量欠佳,现场缺失。
    • 应用日志无疑是排查线上问题的神器,但出现问题的位置往往无法预期,发生了问题通常会发现日志信息不全 -- 我们不可能在每一个有可能出现问题的地方打印日志。
    • “慢”的定义偏主观,“慢”有时候往往也是偶发现象。真正要捕捉到“慢”的那一行代码,我们往往需要记录每一次调用,不放过每一行代码,但这往往代价太大。
  • 监控不足,出现问题为时已晚。
    • 业务发展快、迭代速度更快,会导致业务系统频繁修改接口、增加依赖、代码质量恶化。如果没有一个完善的监控体系,能够对应用的每一个接口的性能进行全自动的监控,对出现问题的调用进行自动的记录,等用户反馈问题再来解决,本身就已经太迟了。
 
 

使用阿里云ARMS的0埋点技术,1分钟定位“慢”问题

 
利用阿里云ARMS(应用实时监控- 链接 )的线程剖析、调用链诊断、接口监控等一系列功能,您只需要在您的应用启动脚本中增加几行探针加载逻辑( 链接 ),不需要对您的应用代码做任何改动,即可以让应用中所有“慢”调用无处可逃。
 
 

第一步:安装Java探针(如果您的应用托管于EDAS,您甚至可以跳过这一步 - 链接

  • 开通ARMS,并创建应用。
  • 下载Java探针包并解压。
  • 在Java应用启动脚本中增加 -javaagent:/{user.workspace}/ArmsAgent/arms-bootstrap-1.7.0-SNAPSHOT.jar -Darms.licenseKey=xxx -Darms.appId=xxx (appId和licenseKey根据页面分配的信息填写,详情可看 - 链接 )
  • 打开ARMS页面,数据开始上报,验证Java探针安装成功。
     
 
 

第二步:在应用概览中发现“慢”可疑线索。

  • 进入ARMS应用拓扑图。在应用概览中我们能够明显地看到今天系统中有“慢SQL”5次。
     
 
 

第三步:浏览并发现“慢接口”

  • 点击接口列表,我们能够一眼看到这个应用提供的所有接口以及这个接口的调用次数和耗时,当然,这些接口都是ARMS的探针自动在程序中发现的,无需做任何配置。
  • 在这些接口中,“慢”接口会被明显标注出来。我们很明显地发现了可疑的慢接口。
  • 选中左侧的调用次数最多的”慢”接口,我们可以从右侧看到这次调用明显是“慢”在数据库的调用上。
 
 
 

第四步:到底“慢在哪一行代码”? 一键定位原因!

 
  • 光看到接口的耗时还不够,我们需要精准定位“慢”到底出现在哪一行代码。
 
  • 点击“接口快照”,可以看到这个接口对应的所有接口的快照,快照是对一次调用的全链路调用的完整记录。ARMS探针将用非常小的性能损耗记录每一次调用所经过的代码及耗时,帮助您精准定位“慢”问题。
     
     
 
  • 我们点击某一个调用快照的TraceId,展开即可查看到这次调用具体“慢”在哪一行。从上图中我们可以清晰地看到,在这次耗时705毫秒的调用中,大部分的时间都消耗在了"SELECT * FROM l_employee"这次SQL调用中,这明显是一次全表扫描的操作!
 
  • 到此为止,我们已经明确地发现了系统中的一个慢调用的错误根因。并且有充分的依据来指导我们下一步的代码优化工作。我们还可以回到调用接口列表,再逐一打开列表中其他“慢”的调用,逐一解决,相信在ARMS的帮助下,您的网站从此可以远离卡顿的困扰,给用户提供更加流畅的体验。
 
 

第五步:防患于未然 -- 设置告警

 
  • 当然,您可以在ARMS的告警设置中对某一个接口或全部接口设置告警,让页面接口出现卡顿时第一时刻通知到您的运维团队。
     
 
 

快速诊断更多问题

 
  • 当然除了错误以外,网站还会出现后台抛错、页面加载失败、内存泄漏等一系列问题。利用ARMS快速解决更多网站疑难杂症,请继续关注“网站常见问题1分钟定位”系列其他文章。
 

 

相关实践学习
通过轻量消息队列(原MNS)主题HTTP订阅+ARMS实现自定义数据多渠道告警
本场景将自定义告警信息同时分发至多个通知渠道的需求,例如短信、电子邮件及钉钉群组等。通过采用轻量消息队列(原 MNS)的主题模型的HTTP订阅方式,并结合应用实时监控服务提供的自定义集成能力,使得您能够以简便的配置方式实现上述多渠道同步通知的功能。
目录
相关文章
|
5月前
|
监控 Kubernetes Java
使用 New Relic APM 和 Kubernetes Metrics 监控 EKS 上的 Java 微服务
在阿里云AKS上运行Java微服务常遇性能瓶颈与OOMKilled等问题。本文教你通过New Relic实现集群与JVM双层监控,集成Helm部署、JVM代理注入、GC调优及告警仪表盘,打通从节点资源到应用内存的全链路观测,提升排障效率,保障服务稳定。
301 2
|
存储 Prometheus 运维
在云原生环境中,阿里云ARMS与Prometheus的集成提供了强大的应用实时监控解决方案
在云原生环境中,阿里云ARMS与Prometheus的集成提供了强大的应用实时监控解决方案。该集成结合了ARMS的基础设施监控能力和Prometheus的灵活配置及社区支持,实现了全面、精准的系统状态、性能和错误监控,提升了应用的稳定性和管理效率。通过统一的数据视图和高级查询功能,帮助企业有效应对云原生挑战,促进业务的持续发展。
360 3
WK
|
安全 Java 编译器
C++和Java哪个更适合开发web网站
在Web开发领域,C++和Java各具优势。C++以其高性能、低级控制和跨平台性著称,适用于需要高吞吐量和低延迟的场景,如实时交易系统和在线游戏服务器。Java则凭借其跨平台性、丰富的生态系统和强大的安全性,广泛应用于企业级Web开发,如企业管理系统和电子商务平台。选择时需根据项目需求和技术储备综合考虑。
WK
510 0
|
数据采集 XML 前端开发
Jsoup在Java中:解析京东网站数据
Jsoup在Java中:解析京东网站数据
|
安全 Java Python
基于python-django的Java网站全站漏洞检测系统
基于python-django的Java网站全站漏洞检测系统
203 0
|
Java Docker 容器
java版本学习网站又添加了一个libgdx模块
java版本学习网站之前添加了docker,想了想还是再把libgdx添加进去吧。
162 3
|
前端开发 安全 Java
在Java服务器端开发的浩瀚宇宙中,Servlet与JSP犹如两颗璀璨的明星,它们联袂登场,共同编织出动态网站的绚丽篇章。
在Java服务器端开发的浩瀚宇宙中,Servlet与JSP犹如两颗璀璨的明星,它们联袂登场,共同编织出动态网站的绚丽篇章。
183 1
|
前端开发 Java 关系型数据库
Java中的电子商务网站开发实战
Java中的电子商务网站开发实战
|
SQL XML JavaScript
【若依Java】15分钟玩转若依二次开发,新手小白半小时实现前后端分离项目,springboot+vue3+Element Plus+vite实现Java项目和管理后台网站功能
摘要: 本文档详细介绍了如何使用若依框架快速搭建一个基于SpringBoot和Vue3的前后端分离的Java管理后台。教程涵盖了技术点、准备工作、启动项目、自动生成代码、数据库配置、菜单管理、代码下载和导入、自定义主题样式、代码生成、启动Vue3项目、修改代码、以及对代码进行自定义和扩展,例如单表和主子表的代码生成、树形表的实现、商品列表和分类列表的改造等。整个过程详细地指导了如何从下载项目到配置数据库,再到生成Java和Vue3代码,最后实现前后端的运行和功能定制。此外,还提供了关于软件安装、环境变量配置和代码自动生成的注意事项。
30215 73
|
Java 应用服务中间件 程序员
高级Java程序员必备:《IDEA问题库》常见问题及解决方案,提升开发效率5(JAVA 小虚竹)
高级Java程序员必备:《IDEA问题库》常见问题及解决方案,提升开发效率5(JAVA 小虚竹)
455 0
高级Java程序员必备:《IDEA问题库》常见问题及解决方案,提升开发效率5(JAVA 小虚竹)