Java应用后端响应慢问题排查思路

Java应用后端响应慢问题排查思路

java应用后端响应缓慢,在未知是否数据库写入读取慢、网络链路正常的情况下,应该如何排查。

这里引入arthas 的排查思路。(arthas 需要JDK 1.6 以上,且仅支持Java应用,命令详细使用见官方文档:
https://arthas.aliyun.com/doc/)

java应用响应慢,较大概率是数据库响应慢、自身Full GC以及业务逻辑过于复杂。链路调用的网络问题在此不做讨论

一、获取前端访问的后端接口

java 后端应用响应缓慢,需要先确认是哪个接口的返回较慢。

  • WEB应用:可通过前端浏览器,开发者工具,network 查看前端耗时较长的接口,逐层定位
  • 所以应用适用:根据日志调用信息,排查耗时较高的接口,串联日志排查(比如根据业务数据在日志中的路径,trace ID 等)
  • 如果有全链路监控,接口监控(如zipkin、pinpoint等),根据接口定位响应缓慢的接口
  • 简单粗暴,和研发确认该功能的调用栈
  • 通过arthas monitor 命令监控可疑方法

[arthas@123]$ monitor -c 5 demo.MathGame primeFactors #每隔5秒打印一次类demo.MathGame中方法primeFactors的调用情况

 二、知道了响应缓慢的接口,如何进行下一步排查

通过第一步,我们基本确认了是哪个接口响应慢,接下来,借用arthas进行下一步分析。

首先应排除是否数据库响应慢导致,该步骤不在此讨论

1、 检查应用GC 情况,可通过监控、GC log来查看,在arthas 中,可通过dashboard 查看,GC 问题可通过heapdump、threaddump 分析。

[arthas@123]$ dashboard  #arthas 控制面板
[arthas@123]$ jvm #jvm基本信息
[arthas@123]$ heapdump --live /tmp/dump.hprof  #打印heapdump 信息,类似jmap:jmap -dump:[live,]format=b,file=/tmp/dump.hprof <pid>

#使用jdk 自带命令查看GC信息
$ jstack -l <pid>
$ jstack[ option ] pid

                                                         dashboard 结果图示

2、查看是否有线程死锁、线程阻塞。通过thread 查看线程信息

[arthas@123]$ thread  #查看所有线程信息
[arthas@123]$ thread 23 #查看线程ID是23 的线程
[arthas@123]$ thread -b #查看阻塞线程,block 线程
[arthas@123]$ thread -n 3 #查看最繁忙的3个线程

3、但无法确实是线程等待、block的原因时,通过trace 查看调用链路及耗时

根据逐层查到耗时高的方法排查

[arthas@123]$ trace com.XXXController XXX # trace 类 方法
[arthas@123]$ trace com.XXXController XXX -n 3 # 捕捉到3次后退出
[arthas@123]$ trace com.XXXController XXX '#cost > 10' #耗时大于10ms 的请求
#更详细用法参考官方文档

4、根据逐层排查到的方法,最终应用是在哪里响应较慢,结合代码逻辑进行分析定位根因

比如是调用数据库返回较慢,最后一层调用应该是数据库连接层耗时较高。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 大厂java后端开发规范包括以下几个方面: 1. 代码规范:大厂在java后端开发中非常重视代码规范,包括命名规范、注释规范、代码风格等。合理的命名、清晰的注释以及统一的代码风格可以提高代码的可读性和可维护性。 2. 项目结构:大厂通常会要求有清晰、合理的项目结构,包括分模块、分层等。每个模块的功能要明确,便于团队合作开发和维护。 3. 运行环境:大厂一般会规定开发环境、测试环境和生产环境的配置。开发环境需要包括所需的IDE、数据库、版本控制等,测试环境的配置要与生产环境尽量一致,保证测试的有效性。 4. 数据库设计:在数据库设计上,需要规范表的命名、字段的命名以及数据类型的选择。合理的数据库设计可以提高查询性能和数据存储的效率。 5. 接口设计:对于大型后端项目,接口的设计尤为关键。接口需要规范输入输出参数、返回结果的格式、错误码等方面,以提供给前端或其他系统使用。 6. 测试规范:大厂通常会要求进行单元测试、集成测试和性能测试等。测试代码的编写规范同样重要,可以保证代码的质量和功能的正确性。 7. 代码管理:大厂一般会使用版本控制工具对代码进行管理,如Git。规范的代码提交、分支管理以及代码合并流程可以保证团队协作的顺利进行。 以上是大厂java后端开发规范的几个方面,通过遵循这些规范,可以提高代码的质量和开发效率,同时也有利于团队协作和项目的维护。 ### 回答2: 大厂Java后端开发规范是指在大型软件开发公司或互联网公司中,Java后端开发人员遵循的一定规范和标准,以保证团队合作效率、代码质量和系统可维护性。以下是一些常见的大厂Java后端开发规范: 1. 代码规范:采用统一的命名规范,如驼峰命名法,避免使用拼音或缩写等不规范命名方式。代码格式应统一,使用约定俗成的缩进、空格、注释等规范,提高代码的可读性。 2. 设计模式:遵循常见的设计模式,如单例模式、工厂模式、观察者模式等,提高代码的可重用性和可扩展性,降低耦合度。 3. 异常处理:合理处理异常,使用try-catch块捕获异常并进行适当的处理,避免异常影响系统的稳定性和可用性。 4. 数据库操作:使用数据库连接池进行数据库连接,避免频繁地创建和关闭连接。使用预编译语句或者ORM框架进行数据库操作,提高数据库访问性能。 5. 日志记录:使用统一的日志框架,如log4j、slf4j等,记录关键操作和异常信息,方便系统的排查和定位问题。 6. 并发控制:合理使用线程池和锁机制,控制并发访问,保证数据的正确性和系统的性能。 7. 测试规范:编写良好的单元测试和集成测试,覆盖核心代码。使用相关的测试框架和工具,如JUnit、Mockito等,提高测试效率和代码质量。 8. 安全规范:对用户输入进行合理的校验和过滤,避免安全漏洞。对重要信息进行加密传输,保证数据的安全性。 以上是大厂Java后端开发常见的规范,遵循这些规范可以提高代码的质量和可维护性,提高团队协作效率,保证整个系统的稳定性和可用性。 ### 回答3: 大厂 java 后端开发规范可以从以下几个方面进行描述。 1. 代码风格规范:大厂 java 后端开发规范会要求遵循统一的代码风格,包括代码缩进、命名规范、注释规范等。这样可以提高代码的可读性和可维护性。 2. 设计模式规范:大厂 java 后端开发规范会强调使用设计模式来解决常见的设计问题,例如单例模式、工厂模式、代理模式等。这样可以提高代码的可扩展性和灵活性。 3. 异常处理规范:大厂 java 后端开发规范会明确规定如何处理异常,包括捕获异常、处理异常和抛出异常等。这样可以提高系统的稳定性和可靠性。 4. 数据库访问规范:大厂 java 后端开发规范会规定如何进行数据库的访问,包括使用什么类型的数据库连接池、如何编写 SQL 语句等。这样可以提高数据库操作的效率和安全性。 5. 接口设计规范:大厂 java 后端开发规范会要求清晰定义接口的输入和输出,遵循 RESTful 设计原则,使用合适的 HTTP 方法和状态码等。这样可以提高接口的可用性和易用性。 6. 性能优化规范:大厂 java 后端开发规范会指导如何进行性能优化,包括数据库查询优化、缓存设计和使用合适的并发控制等。这样可以提高系统的响应速度和并发能力。 7. 安全规范:大厂 java 后端开发规范会强调安全性,包括防止 SQL 注入、XSS 攻击、CSRF 攻击等。这样可以提高系统的安全性和抵御恶意攻击的能力。 总之,大厂 java 后端开发规范旨在提高团队协作效率、代码质量和系统性能,保证软件项目的高效开发和稳定运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值