你解决过线上问题吗?
你能挑选一个你解决过的线上问题说说吗?
你搞过JVM调优吗
这种问题,快成八股文了,这类问题考察的是解决问题的思路,linux,jdk,以及其他检测和解决问题的工具。可解决实际问题,不仅仅是表面上的这些,还得是你对jvm,linux系统,组件原理的理解。估计是个开发都解决过这类问题,可正真能有几人有机会接触到jvm,系统痛点的解决,且不说有没有能力,很少有这样的机会接触到,既然问道也不能说没接触过,那就得挑选一个有代表性问题拿出来说说。哪怕这个问题是网上copy来的。实际线上问题解决都是起于功能,可面试跟实际解决问题不同,他不愿意听你的逻辑分析,只想听听问题核查的那些技术和工具(这类问题越是小地方越严重)。
如果不为了面试,日常工作也需要有针对线上问题的解决思路,这样遇到问题就能有“法”可依,心里有“法”就不会慌张,这个法子是总结多少年多少人解决在线问题的思路总结而来
架构图
JavaWeb在线系统问题核查-Java文档类资源-CSDN下载 (原图下载地址)
系列博文
下面会针对此类问题从思想,步骤,技术,工具,团队协作 几个方面挨个介绍。
JavaWeb在线问题.Linux服务器CPU核查_闲猫的博客-CSDN博客
JavaWeb在线问题.Linux服务器MEM内存核查_闲猫的博客-CSDN博客
JavaWeb在线问题.Linux服务器磁盘Disk核查_闲猫的博客-CSDN博客
JavaWeb在线问题.Linux服务器网络核查_闲猫的博客-CSDN博客
JVM命令:jsp(找进程),jstack(线程栈),jmap(内存),jinfo(参数)_闲猫的博客-CSDN博客
待补充...
在线问题步骤
1. 问题现象
无论是开发,还是业务,产品,测试都有必要了解 遇到一个问题需要验证哪些方面。稍微遇到不满足需求就直接抛出开发很不友好的,不利于问题解决和团队协作。
遇到问题需要确认是功能报错,卡顿,还是请求超时。这些对问题的核查有很大的帮助。
报错,页面出现了乱码提示,或者用F12查看到报错日志;
卡顿,页面明细卡顿,卡顿是一直慢还是一会慢一会正常,这种卡顿是刚开始就这样,还是啥时候才开始卡顿的
超时,页面突然超时,多次点击也没反应,本机机器运行正常,风扇转动也不快,系统突然慢。或者系统某个功能一直超时
2. 问题确认
搞清楚问题什么现象后,还需要确认一下问题。最基本的是需要排除是自己笔记本和网络导致的问题。其次需要确认类似功能是否好着,问题是一直这样,还是重启浏览器就好了。能做到如此的测试,业务都是很优秀了,对接开发一定会很和谐。开发不讨厌问题,讨厌抛问题的做法。这些需要从文化方面让大家认可在共同解决问题,针对甩责任行为进行批评;通用为了在体能上对业务,测试,产品等进行通识技能培训。
方法:1. 比对类似功能是否有问题;2. 重复测试是否重现
结构:一类问题就首先定位共同依赖功能;个例问题就分段分析
3. 分段核查
这就是开发自己的事情了,但如果是测试,产品,项目经理需要能 根据不同开发角色粒度,如果前后端,需要将问题定位到是前端还是后端问题,如果时下不确定可以直接发给前端。
思路:先粗调再微调(先确认大的范围,然后逐渐拆分核查)
示例:BS架构分格,前后端,后端和数据库,第三方依赖
团队协作:首先确定谁的问题,再找谁来解决
手段:http请求和结构;客户端测试DB,Redis等第三方中间件;浏览器Console日志; 后端日志,APM系统辅助(如链路追踪系统)
4. 问题主体
确认是哪部分出问题了,前端逻辑,后端代码,服务器宕机,第三方组件等
逻辑:根据代码逻辑判断,或者根据日志定位问题出在哪
服务:服务器好的,Server提供服务出了问题(如慢,卡顿,超时响应)
服务器:Cpu,内存,磁盘,网络(如:宕机,cpu内存使用率超高,网络不通,磁盘满了)
第三方组件
5. 逻辑出问题
手段:使用日志核查;流量回放;测试账号重试;链路追踪
可能问题:逻辑不完善;逻辑容错性差,垃圾数据影响; 特殊场景没有被考虑到
6. 服务出问题
现象:访问变慢,速度不稳定(需要排除网速问题),长时间不响应,连接超时,刚启动好的用了一段时间变慢,重启后又好了
步骤:确认Server是罪魁祸首;分析是否哪个线程导致; 单线程有问题解决,没问题需要看是否线程直接竞争资源导致,即分析多线程问题
WEB Server确认: 服务CPU高并不一定一定是Server导致,也可能是其他辅助服务,需要根据top命令确认
单线程问题定位: 根据进程PID列线程列表top -Hp PID; jstack 打印占用资源较多线程代码位置
多线程问题定位:jstack快照所有线程;dump导出;使用jvisualvm分析dump文件
JVM分析:日志开启;GC日志打印;GC分析
7.服务器问题
现象:CPU使用率高;内存使用率高;磁盘满生成文件失败;连接第三方接口超时或者失败;
服务器和服务的关系:服务逻辑有问题可能会导致服务器CPU,内存使用率超高;表面解决可提升服务器性能缓解,但需要从根上解决还得从服务入手
磁盘问题
问题分类
磁盘容量 df ;du
IO速率 iostat,vmstat; lsof查看进程打开的文件
导致问题场景
日志
日志没有定时删除,提前做好日志策略
临时文件
上传的临时文件没有删除或者并发太高
上传文件的逻辑控制
网络问题: 较少,检测出来一般你也解决不了,需要网络工程师介入
CPU,MEM:top,free -h
8. 团队协作
团队角色:客户,业务(对接客户), 项目组接口人,测试,前端,后端,DBA,运维
客户,业务(对接客户),项目组接口人,测试:确认问题,正确描述问题,问题分类
协作:Jira规范问题提交,定位,解决流程;规范问题分类,解决时限;问题升级需求流程; 跨团队协作机制
解决问题不止是技术的问题,同时会体现企业文化,组织治理能力,团队成员关系等方面,为了能高效的解决问题就需要在这些方面进行早期铺垫,临时抱佛脚是没有的。
END