引用
作为一个开发仔,一定遇到过这样的问题。
用户反馈页面点了一点反应都没有,这个时候我们就需要快速的定位这个问题出在哪里。
如果领导安排你去看一下,结果你过去回来一问三不知,找不到问题,给不出解决方案,那就很尴尬了。
下面一起探索一下怎么去定位这个问题。我将跟着下图来详细研究。
注意:本文主要围绕网页版来探索。
一、如何初步判断问题范围
1.1 重现问题
首先要明确,大部分用户都是小白,他只会使用系统,你想让用户给你提供更多的说明,是非常难的;所以我们要想方设法的获得用户遇到的问题的具体表现。
如果是外部用户就非常难,需要做好各种数据埋点。企业内部用户就相对来说简单很多,如果很方便可以直接去他工位看看,不行也可以远程或者教她怎么获取更多信息下来。
收集信息我们可以关注下面的内容:
-
确定卡顿现象的具体表现(如加载缓慢、点击无响应、系统卡死(这个是个天坑,别排查了半天是系统卡死了,真有这种)等)
-
记录卡顿出现的环境(浏览器类型、设备型号、网络状况等)
- 网络状况最直接的就是打开百度看看是否正常,另外我们建议后端开发一个可以测试网络环境的接口,因为可能公司的网络做了额外的限制。
1. 2 初步分类
实际这三个问题非常容易初步判断,打开开发者工具(F12),选择NetWork,看看这个界面的交互,是否有网络请求出去。
先清空所有的,然后点击,现在我们可以根据这个界面的信息来做判断,可以分为三个方面:
-
前端问题:如果没有请求信息,或者出现了4XX的错误码,大概率定位为前端问题。
-
后端问题:如果出现了5XX的错误码,大概率可以定位为后端问题。
-
网络问题:如果出现了类似
ERR_INTERNET_DISCONNECTED的状态,也就是不是数字的,可以认为和网络环境有关。
二、前端问题排查
因为作者是后端仔,前端排查的问题就不班门弄斧了,这里只是简单罗列一下我知道的。
三、后端问题排查
当问题确定出现在后端的时候,那毫不怀疑,这个时候单纯的想看日志,可能是没有效果的。下面一起来看看都怎么分析。
3.1 服务器性能分析
3.1.1 监控服务器资源(CPU、内存、磁盘I/O、网络带宽)
监控服务器资源是性能分析的基础,通过实时监控可以发现潜在的瓶颈和问题。
- 使用工具
top命令:top命令实时显示系统中各个进程的资源占用状况,包括CPU使用率、内存占用、进程优先级等。通过top可以快速定位占用资源较高的进程。
htop命令:htop是一个交互式的进程查看器,类似于 top,但提供了更丰富的功能和更友好的界面。它可以帮助我们实时监控系统资源(如 CPU、内存、交换空间等)和进程信息。
其他监控工具:如iostat(用于监控磁盘I/O)、iftop(用于监控网络流量)等,这些命令都要多多实操,实践出真知。
- 识别资源瓶颈
上面说了介绍了一些命令工具,使用这些工具的目的就是为了识别资源瓶颈,可以从以下几个方面来识别。
| 问题类型 | 描述 | 解决方法 |
|---|---|---|
| CPU瓶颈 | 如果CPU使用率长期接近100%,可能是CPU资源不足。可以通过分析进程来确定是某个程序占用过多CPU,还是系统负载过高。 | 优化程序逻辑,增加CPU核心数,或升级CPU。 |
| 内存瓶颈 | 如果内存使用率过高,可能会导致频繁的磁盘交换(swap),从而降低系统性能。 | 增加物理内存,优化程序内存使用,或关闭不必要的服务。 |
| 磁盘I/O瓶颈 | 如果磁盘I/O等待时间过长,可能是磁盘性能不足或磁盘负载过高。 | 优化磁盘布局,使用SSD,或增加磁盘数量。 |
| 网络带宽瓶颈 | 如果网络带宽使用率过高,可能会导致网络延迟增加。 | 升级网络设备,优化网络配置,或限制不必要的网络流量。 |
3.1.2 查看服务器日志
前面说不能单纯看日志,但是我们也不能脱离日志;服务器日志是分析问题的重要依据,通过日志可以发现错误、异常和性能问题。
一般web日志可以分为以下几个方面:
访问日志:定位到了后端问题,我们一般也会查看一下访问日志,确定没有被拦截之类的,是真的请求到了我们的服务器;当然,查看访问日志的重点不在这里,而是通过访问日志得到接口耗时信息。
程序日志:这就是看我们的日志配置和主动打印的日志输出信息,一般我们都会在一些重要节点增加一些日志,方便排查问题。
3.2 数据库性能分析
咱默认数据库性能杠杠的,而且一般开发仔也接触不到数据库运维。所以这里我们就说说慢sql分析。可能大多数人都知道MySQL本身提供慢SQL记录,但是这个我们可能拿不到。
这里建议大家使用druid连接池,这里面设置默认采集慢SQL,你可以打印,也可以自己弄个地方存下来,方便我们定位分析。
3.3 Java还可以查看堆栈信息
JDK本身提供了jstack、jmap命令帮助我们快速分析问题,这个可以专门搜搜,很多介绍。
四、网络问题排查
当出现网络问题的时候,有可能是后端服务不行了,这个时候为了快速定位,我们得首先确定用户网络是不是OK的,请求是否触达到了后端网关服务。
-
检查是否有网络,最简单,打开百度或者某个技术网站,看看OK不OK。
-
后端提供一个网络ping的基础服务,注意,不是默认的ping命令,而是一个简单的接口或者页面,能返回客户端的IP,请求UA等信息。
-
DNS解析:这个说的高大上了,说白了就是看看用户是不是自己设置了hosts之类的,是不是开了额外的VPN。
五、总结
哈哈,经过一番折腾,这篇文章终于要收尾了。作为一名“开发仔”,我今天算是把排查网页无响应问题的那些事儿,从头到尾梳理了一遍。这过程,简直就像是一场“技术版的侦探游戏”,不过说实话,还挺有成就感的。
排查问题,虽然过程有点繁琐,但每找到一个潜在的问题点,心里就踏实一分。排查问题,其实就像是在解决问题的“迷宫”里摸索前行,虽然有时候会走弯路,但只要方向对了,总能找到出口。
最后,我想说的是,做开发的,遇到问题不怕,关键是要有一套系统的排查方法。
希望本文对您有所帮助。如果有任何错误或建议,请随时指正和提出。
同时,如果您觉得这篇文章有价值,请考虑点赞和收藏。这将激励我进一步改进和创作更多有用的内容。
感谢您的支持和理解!