线上问题排查及解决记录

今天在生产环境发现一个前端请求一直在显示正在加载中,随后查看请求情况,发现返回的response报错。但是跟进去看代码是正常的。之后ssh连上服务器,查看cpu的使用情况,因为该请求可以会进行大量的计算,可能会导致数据返回很慢。

看了网上的一些教程,大致可以归纳为以下几点:

  1. 查看日志
  2. 查看CPU情况
  3. 查看TCP情况
  4. 查看java线程 jstack 命令
  5. 查看java堆 jmap命令
    jmap -heap pid 输出当前进程JVM堆新生代、老年代、持久代等情况,GC使用的算法等信息

我自己也按着如下的步骤进行操作:

步骤一:执行命令top 利用top命令找到CPU占用高的进程pid

步骤二:执行命令top -Hp pid 利用 top 命令可以查出该进程中占 CPU 最高的线程 pid

步骤三:将其找到的pid转换为 16 进制形式 (因为 java native 线程以 16 进制形式输出)。可以使用在线转换工具进行转换 在线转换地址,也可以使用命令printf ‘%x\n’ pid 进行进制的换算,假设换算的结果为A

步骤四:利用 jstack 打印出 java 线程调用栈信息,从信息中进行分析,可以将信息下载也可以使用命令直接查看jstack 进程PID | grep ‘A’ -A 100 --color

查看发现对应到的后台代码是一个从Json数据中取数的操作,于是断点进入调试查看数据量大概在几十万+,想着也不会这么容易占用吧,再返回前端,看这个前端页面的请求默认是没有带查询条件的,那么它去请求获取数据的时候就会把所有的数据都计算一遍进行返回,如果是加了下拉框中的一个限定条件,计算的数据就大幅下降了,得到的计算结果的Json的数据量也不是很大,数据能够很快的正常返回。

总结:对于整个问题就是要结合前后端和线上的一些问题排查命令,能让自己对整个流程更加的清晰。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值