系统后台服务突然变慢,怎样排查诊断?

微信原文:系统后台服务变慢,怎样排查诊断?

微信公众号:小龙coding

关注选择星标,重磅干货,第一时间送达!

如果你觉得文章对你有帮助,欢迎关注,在看,点赞,转发

关注下方公众号【小龙coding】 回复【基于人工智能的校园助手】领取大厂面试精品项目,【助力礼包】领取鹅厂大佬秋招面试助力礼包。

前文

大家好,我是小龙。

事情是这样的,因为之前面试百度二面时被面试官问过这样一个场景题 “假如你项目后台服务突然变得很慢,你该怎样去排查和解决呢?”,当时没真正遇到过这种问题,所以只能根据自己的相关经验去 “吹” !,感觉回答的不是很到位。

正好最近在负责一个项目,今天测试时发现系统后台服务变的出奇的慢,于是便自己去排查诊断了一翻。这方面我也不太熟悉,就试着去检查了一番。在此分享一下我当时排查的过程,感觉非常有意义。

一般在公司中,对实现一个系统完善的日志性能等监控系统都比较重视,因为当线上线下出现问题时,最好最快的方式就是排查日志,查看相关监控系统。

然后我还利用了一些Java诊断工具去监控系统发生的异常,比如JFR,随时监控系统是否出现大量某种异常,如果有,那么这个异常可能就是突破点。

在你看来,可能做这些额外的监控系统,日志可能比较浪费时间,没必要。但是在我个人项目中,我特别重视这一点,因为事前做好充分准备,当真正发生了故障,我便可以凭借此快速定位到问题。

排查思路

查看错误日志

回过来,我开始想的就是可能是后台服务程序自身出了问题,于是最先想到的就是去检查应用本身的错误日志,从部分日志并没有发现有什么明显的异常,然后在并发量太大的情况下,查日志也会很慢。

CPU

然后到后台服务器监控平台,查看系统资源是否达到上限,例如:CPU、内存、磁盘、I/O、网络带宽等。我是从上到下看的,网络,系统,应用。任何一个环节都有可能有问题,首先看网络监控情况,然后看系统(内存,cpu,负载 )情况。此处补充如何排查CPU、内存相关问题。

  1. 启动程序之前通过 HeapDumpOnOutOfMemoryError 和 HeapDumpPath 这两个参数开启堆内存异常日志

    -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=
    
  2. 从日志从发现异常

  3. 再通过 top -Hp pid 查看进程下所有具体线程占用系统资源情况

  4. 再通过 jstack pid 查看具体线程的堆栈信息(线程ID、状态(wait,sleep),是否持有锁)

  5. 再通过 jmap 查看堆内存的使用情况 jmap -heap pid

  6. 通过以上命令分析基本可以看出什么问题导致内存上升,现在分析问题产生的原因

  7. 我们在启动时,已经设置了 dump 文件,通过 MAT 打开 dump 的内存日志文件,分析即可。

然后,我直接大致定位到具体应用,再把线程dump出来,根据以上一系列操作,查看线程是否存在问题,有没有死锁,卡代码等问题。

磁盘

对于服务器磁盘空间问题,当时实习时,也有幸遇到过,积累了一些经验,在此顺便做个分享:

查看磁盘空间

df -h

发现某个路径已经占了100%,切换根目录查看空间

du -h --max-depth=1

然后再看该目录下哪个文件占用空间最大,然后切换到该目录,继续使用以上命令查看,以此循环直到找到问题,最后发现日志打满了。

然后磁盘有一些目录基本为空,而这个目录几乎达到100%,于是建立了一个软链接指向空目录,顺便删除了一些废弃日志。

然后重新测试,还是不太行。

继续往下排查。。。。

内部服务器配置,SQL等

接着去检查应用服务器(Tomcat)的线程池配置是否合理,看了一下请求的排队现象是否严重,如果严重则需要重新设置合理的线程池。同样,检查一下数据库的连接池设置是否合理,增大连接池设置,同时检查一下是否有慢sql,如果有慢sql,则进行优化(优化方案是查看执行计划,设置合理的索引等)

对于慢SQL如何优化,此前写过一篇文章专门介绍,此处不过多赘述。然后发现一些SQL存在一些问题,修正了一翻,但是问题也不太大,不是主要原因,于是,接着往下分析。

字节面试官:一条sql执行慢的原因?如何优化?

服务调用

由于分布式服务一般都是服务治理的,可以看整个调用链的时间图,于是我去查看了访问慢的服务的调用链,查看一下调用链中的每一步响应时间是否合理,发现有个服务响应时间明显长于其他,然后去查看其中的问题,排查了一个超时的服务,发现是Redis大量连接超时,我去,之前为啥没想到。然后又去看为啥Redis大量连接超时,最后发现是网络的问题,然后又去排查网络相关的问题。

然后我去找了临近的防火墙看对应服务器的并发连接数是否新建连接/半开连接超高,或者有突发流量挤占了资源。后来重启了有问题的服务器,就谜一样的解决了。

虽然感觉有点乌龙,但是我还是想给大家分享一下排查问题的思路,当我们遇到问题时,可以从哪些地方着手考虑。当然,我也是半吊子,不过大家可以一起学习探讨,如何更优更快更直接找到问题所在。

评论区欢迎留言,下面有个 ”写留言“ 哟!!!

相逢必是缘分,希望大家给个小小的关注!

如果这篇文章对您有所帮助,或有所启发,可以扫描上方二维码关注一下,更多优质好文等您来探索,爱你哟~

求一键三连:希望转发在看分享给更多同学哟~

公众号:大厂进阶指南,专注分享后端技术、校招面试求职~

粉丝福利:后台回复【助力礼包】领取校招求职全套攻略;回复【基于人工智能的智慧校园助手】领取校招求职精品项目。

往期精彩回顾:

《面试笔记》——JVM终结篇(吊打系列)

《面试笔记》——MySQL终结篇(30问与答

Redis基础篇(万丈高楼平地起):核心底层数据结构

字节面试官:一条sql执行慢的原因?如何优化?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下更新列表针对V5.0正式版(2008-8-4) 1、增加sql标签通过静态html页面也可以接收参数,如bm.html?card=1000,在sql标签里选ajax输出,用{ReqStr(card)}可接收到1000 2、SQL支持条件判断,引用标记{$IF(条件||输出1||输出2)},具体请参考相关教程 3、商城系统增加批量图片上传到商品介绍功能 4、商城系统内容页标签{=GetProductPhoto(260,200)}自动增加查看大图功能 5、[改进]当用户注册类型是企业会员且允许开通空间时,自动开通企业空间 6、[改进]添加栏目时自动取得栏目排序号 7、[改进]当文章修改归属其它类别时,自动删除原目录下的html文件 8、[改进]下载系统,上传时自动获得上传文件大小。 9、修复sql标签采用ajax输出时,无法用{ReqStr或{ReqNum接收参数 10、修复栏目列表页分页样式选择第一种时,无法取得正确的篇数 11、增加自定义字段的下拉选项判断,当判断为空时不处理以免出错 12、修复自定义表单项无法翻页 13、修复自定义表单项没法按表单项排序 14、修复频道绑定二级域名后无法翻页的BUG 15、修复绑定二级域名后,文章多页时链接出错 16、改进自定义模型不能使用CC插件的问题及自动插入问题 17、修复后台拷贝文章提示找不到标识的错误 18、修复生成树型菜单,选择供求时,出错提示列名'20069873804830'无效 19、修复utf-8版本给用户发邮件乱码问题 20、修复utf-8版本留言本出错 21、修复后台无法设置圈子默认模板 22、修复自带编辑器插入flash无法播放 23、修复几处普通管理员权限问题 24、修复商城系统设置为特价的时候出错 25、修复企业空间调用出来的产品及企业新闻少一条记录 26、修复企业空间的企业产品列表没有审核过的也显示出来的bug 27、修复企业空间修改企业基本信息的“公司地址”无效 28、修复搜索页面无法使用自定义字段标签 29、修正滚动图片文章调用多出一个'号 30、修正内容页没有放[KS_Charge][/KS_Charge]原有需要权限才可以查看的文章变成所有用户都可能浏览 31、修复留言本点精华,置顶出错 32、修复utf8版,在“创建自定义页面”的界面里面,没有“保存”按钮。 33、修复商城系统生成静态终级商品列表标签{$GetLastProductList无法使用 34、修复后台添加文章自动过滤一些代码 35、专题首页发布成功,进度条显示0 36、修复admin/KS.ClassMenu.asp文件错误 生成的菜单重复 37、修复生成静态时相关商品标签出错,无法解释 38、修复前台投稿的文章,审核后文章生成的文件名都变成了id.html. 39、修复友情链接太多时,后台看不到翻页 40、允许不同模型添加栏目名称可以重复 41、改进企业空间的企业新闻标签title能显示文章标题,有利于搜索引荐抓取。 42、修复专题页special.asp列表动态运行下将所有信息都列出来的bug 43、修复utf-8版本发布百度新闻xml出错 ... 后台登录:/admin 管理员:admin 密码:admin888

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值