对于系统运行缓慢问题,要分情况讨论:
- 如果该问题导致线上系统不可用
出现这种情况可能的原因主要有两种:
- 代码中某个位置读取数据量较大,导致系统内存耗尽,从而导致 Full GC 次数过多,系统缓慢。
- 代码中有比较耗 CPU 的操作,导致 CPU 过高,系统运行缓慢。
解决方法:导出 jstack 和内存信息,然后重启系统,尽快保证系统的可用性。
- 另外有几种情况也会导致某个功能运行缓慢,但是不至于导致系统不可用:
- 代码某个位置有阻塞性的操作,导致该功能调用整体比较耗时,但出现是比较随机的。
- 某个线程由于某种原因而进入 WAITING 状态,此时该功能整体不可用,但是无法复现。
- 由于锁使用不当,导致多个线程进入死锁状态,从而导致系统整体比较缓慢。(三次握手:syn洪泛攻击)
对于这三种情况,通过查看 CPU 和系统内存情况是无法查看出具体问题的,因为它们相对来说都是具有一定阻塞性操作,CPU 和系统内存使用情况都不高,但是功能却很慢。
解决方法
①通过 top 命令查看 CPU 情况,如果 CPU 比较高,则通过 top -Hp 该进程的pid 命令查看当前进程的各个线程运行情况。
找出 CPU 过高的线程之后,将其线程 id 转换为十六进制的表现形式,然后在 jstack 日志中查看该线程主要在进行的工作。
这里又分为两种情况:
如果是正常的用户线程,则通过该线程的堆栈信息查看其具体是在哪处用户代码处运行比较消耗 CPU。
如果该线程是 VM Thread,则通过 jstat -gcutil 命令监控当前系统的 GC 状况。
②如果通过 top 命令看到 CPU 并不高,并且系统内存占用率也比较低。此时就可以考虑是否是由于另外三种情况导致的问题。
网站打不开怎么排查?
1,首先根据网站的提醒,看状态码
常见的状态码:
200:请求成功
301:临时重定向
302:临时重定向
400:客户端请求的语法出错
403:forbidden 服务器禁止访问
404:网页不存在
500:服务器内部出错
502 Bad Gateway :该状态码表明服务器网关错误。
503 Service Unavailable :该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。
2,看日志
3,自己探查
自己探查可以从两个方面进行排查
网站出问题
自己的电脑出问题
验证一下:别人的电脑是否能打开
如果是自己的电脑有问题:
首先ping域名,域名假如ping不通说明域名解析有问题,域名能ping通但是网站访问不了就有可能是网站程序或者是服务器的问题,导致的个别地区访问不了网站的情况。