页面卡顿,作为技术人员应该怎么去排查

419 阅读7分钟

引用

作为一个开发仔,一定遇到过这样的问题。

用户反馈页面点了一点反应都没有,这个时候我们就需要快速的定位这个问题出在哪里。

如果领导安排你去看一下,结果你过去回来一问三不知,找不到问题,给不出解决方案,那就很尴尬了。

下面一起探索一下怎么去定位这个问题。我将跟着下图来详细研究。

注意:本文主要围绕网页版来探索。

image.png

一、如何初步判断问题范围

1.1 重现问题

首先要明确,大部分用户都是小白,他只会使用系统,你想让用户给你提供更多的说明,是非常难的;所以我们要想方设法的获得用户遇到的问题的具体表现。

如果是外部用户就非常难,需要做好各种数据埋点。企业内部用户就相对来说简单很多,如果很方便可以直接去他工位看看,不行也可以远程或者教她怎么获取更多信息下来。

收集信息我们可以关注下面的内容:

  • 确定卡顿现象的具体表现(如加载缓慢、点击无响应、系统卡死(这个是个天坑,别排查了半天是系统卡死了,真有这种)等)

  • 记录卡顿出现的环境(浏览器类型、设备型号、网络状况等)

    • 网络状况最直接的就是打开百度看看是否正常,另外我们建议后端开发一个可以测试网络环境的接口,因为可能公司的网络做了额外的限制。

1. 2 初步分类

实际这三个问题非常容易初步判断,打开开发者工具(F12),选择NetWork,看看这个界面的交互,是否有网络请求出去。

image.png

先清空所有的,然后点击,现在我们可以根据这个界面的信息来做判断,可以分为三个方面:

image.png

  • 前端问题:如果没有请求信息,或者出现了4XX的错误码,大概率定位为前端问题。

  • 后端问题:如果出现了5XX的错误码,大概率可以定位为后端问题。

  • 网络问题:如果出现了类似ERR_INTERNET_DISCONNECTED的状态,也就是不是数字的,可以认为和网络环境有关。

二、前端问题排查

因为作者是后端仔,前端排查的问题就不班门弄斧了,这里只是简单罗列一下我知道的。

image.png

三、后端问题排查

当问题确定出现在后端的时候,那毫不怀疑,这个时候单纯的想看日志,可能是没有效果的。下面一起来看看都怎么分析。

3.1 服务器性能分析

3.1.1 监控服务器资源(CPU、内存、磁盘I/O、网络带宽)

监控服务器资源是性能分析的基础,通过实时监控可以发现潜在的瓶颈和问题。

  • 使用工具

top命令top命令实时显示系统中各个进程的资源占用状况,包括CPU使用率、内存占用、进程优先级等。通过top可以快速定位占用资源较高的进程。

image.png

htop命令htop是一个交互式的进程查看器,类似于 top,但提供了更丰富的功能和更友好的界面。它可以帮助我们实时监控系统资源(如 CPU、内存、交换空间等)和进程信息。

image.png

其他监控工具:如iostat(用于监控磁盘I/O)、iftop(用于监控网络流量)等,这些命令都要多多实操,实践出真知。

  • 识别资源瓶颈

上面说了介绍了一些命令工具,使用这些工具的目的就是为了识别资源瓶颈,可以从以下几个方面来识别。

问题类型描述解决方法
CPU瓶颈如果CPU使用率长期接近100%,可能是CPU资源不足。可以通过分析进程来确定是某个程序占用过多CPU,还是系统负载过高。优化程序逻辑,增加CPU核心数,或升级CPU。
内存瓶颈如果内存使用率过高,可能会导致频繁的磁盘交换(swap),从而降低系统性能。增加物理内存,优化程序内存使用,或关闭不必要的服务。
磁盘I/O瓶颈如果磁盘I/O等待时间过长,可能是磁盘性能不足或磁盘负载过高。优化磁盘布局,使用SSD,或增加磁盘数量。
网络带宽瓶颈如果网络带宽使用率过高,可能会导致网络延迟增加。升级网络设备,优化网络配置,或限制不必要的网络流量。

3.1.2 查看服务器日志

前面说不能单纯看日志,但是我们也不能脱离日志;服务器日志是分析问题的重要依据,通过日志可以发现错误、异常和性能问题。

一般web日志可以分为以下几个方面:

image.png

访问日志:定位到了后端问题,我们一般也会查看一下访问日志,确定没有被拦截之类的,是真的请求到了我们的服务器;当然,查看访问日志的重点不在这里,而是通过访问日志得到接口耗时信息。

程序日志:这就是看我们的日志配置和主动打印的日志输出信息,一般我们都会在一些重要节点增加一些日志,方便排查问题。

3.2 数据库性能分析

咱默认数据库性能杠杠的,而且一般开发仔也接触不到数据库运维。所以这里我们就说说慢sql分析。可能大多数人都知道MySQL本身提供慢SQL记录,但是这个我们可能拿不到。

这里建议大家使用druid连接池,这里面设置默认采集慢SQL,你可以打印,也可以自己弄个地方存下来,方便我们定位分析。

3.3 Java还可以查看堆栈信息

JDK本身提供了jstackjmap命令帮助我们快速分析问题,这个可以专门搜搜,很多介绍。

四、网络问题排查

当出现网络问题的时候,有可能是后端服务不行了,这个时候为了快速定位,我们得首先确定用户网络是不是OK的,请求是否触达到了后端网关服务。

  • 检查是否有网络,最简单,打开百度或者某个技术网站,看看OK不OK。

  • 后端提供一个网络ping的基础服务,注意,不是默认的ping命令,而是一个简单的接口或者页面,能返回客户端的IP,请求UA等信息。

  • DNS解析:这个说的高大上了,说白了就是看看用户是不是自己设置了hosts之类的,是不是开了额外的VPN。

五、总结

哈哈,经过一番折腾,这篇文章终于要收尾了。作为一名“开发仔”,我今天算是把排查网页无响应问题的那些事儿,从头到尾梳理了一遍。这过程,简直就像是一场“技术版的侦探游戏”,不过说实话,还挺有成就感的。

排查问题,虽然过程有点繁琐,但每找到一个潜在的问题点,心里就踏实一分。排查问题,其实就像是在解决问题的“迷宫”里摸索前行,虽然有时候会走弯路,但只要方向对了,总能找到出口。

最后,我想说的是,做开发的,遇到问题不怕,关键是要有一套系统的排查方法。

希望本文对您有所帮助。如果有任何错误或建议,请随时指正和提出。

同时,如果您觉得这篇文章有价值,请考虑点赞和收藏。这将激励我进一步改进和创作更多有用的内容。

感谢您的支持和理解!