美文网首页
服务端问题排查与系统优化方法

服务端问题排查与系统优化方法

作者: Real_man | 来源:发表于2020-11-13 19:27 被阅读0次

在面试时,必不可少的一项就是考察候选人的问题解决能力,如何排查XX问题?如何优化XX系统性能。会使用工具并不能体现不出大家的差别,出现问题时,谁能最快的定位问题与解决问题才能体现出技术水平,而只会问题排查还不够,再勤劳的救火队友也是没有实际业务上的产出,如何通过系统化的手段优化系统,让系统不再出现问题,那升职加薪指日可待。

面试时,我一般会问:你在做项目的过程中有遇到过什么问题吗?一般是怎么解决的?

如果回答是,我遇到了差不多XX问题,还有XX问题,那这种问题一般太偏向于一个点,而不够系统,相比对工作问题也没有很好的总结。

我认为比较好的方式可以参考下面的文章回答,工作中大致遇到过那种类型的问题,一般的解决套路是什么,有哪些常见的问题解决工具。如果进一步谈到避免问题出现,进行系统上优化,取得了什么成效... 那基本上这个候选人就通过了.

假如满分100分的话:

  • 只回答遇到问题的一个点: 50分
  • 回答大致有哪些类型的问题: 60分
  • 回答常见类型问题与如何应对:80
  • 回答常见类型问题,如何应对,以及排查工具:90
  • 回答到了不同的问题种类,应对方式,常用工具,以及优化手段:满分...

问题排查

日常工作中,可以尝试积累自己的一项问题清单列表,出现问题时依次检查此刻的问题能对应到清单中的那个问题上:

  • 逻辑错误: NPE,边界问题,死循环
  • 性能问题: RT陡增,吞吐量上不去,CPU飙高,负载过高
  • 内存问题:频繁FullGC,OOM,内存泄漏
  • 并发问题:分布式锁不生效,重复调用,超卖
  • 数据问题:脏数据,数据异常
  • 人为问题:配置错误,删库跑路...
  • ...

需要自己平时做一些积累,遇到的错误进行记录与复盘,总结与梳理,到形成自己的一套问题列表,并且能进行针对性的解决。

排查过程

  • 快速止血:回滚,开关,降级,重启,隔离
  • 保留现场:GCDump,ThreadDump
  • 定位原因:尝试复现问题,找到根本原因
  • 解决问题:

排查工具

日志:阿里云SLS,ELK,内部分布式日志系统

监控:

  • 系统监控:CPU,内存,网络,硬盘。 一般在机器上安装agent收集机器信息
  • 调用链监控:Cat,EagleEye,Zipkin+Slueth。 分布式系统不同模块之间的调用链路追踪,定位问题系统
  • 业务监控:Prometheus,实时业务数据报表 。 和业务相关数据,一般系统服务的技术或业务人员关注

问题定位:

  • Java自带工具:jps,jstack,jmap,jvivualvm,jconsole
  • Linux命令:top,tcpdump,iostat ...
  • Arthas
  • 现场日志

系统优化

快,稳,准:系统响应要快,系统运行要稳定,业务数据要准确

一些指标:

  • 吞吐量:QPS/TPS 单位时间内能处理的请求数
  • 响应时间:RT 处理单个请求花费的时长,一般会由网络传输延迟、排队延迟和实际处理耗时几个部分共同组成。
  • 可伸缩性:增加机器来提升系统性能,理想情况下为线性伸缩

性能优化与做功能需求一样,都是为业务服务的。优化之前想清楚,是否真的需要这次优化,性能优化都不是免费的午餐,优化做的越多,往往可维护性也会越差

性能优化套路:从底层到每一行代码。层次划分明确,从不同的角度优化

  • 机器内核,JDK,依赖中间件 (参数调整,依赖升级)
  • 数据结构与算法优化,模型优化,批量,异步,并行等
    • 日志异步化;
    • 减少序列化和反序列化, 如果想要性能用set和get;
    • Java Stream 大对象、复杂操作尽量不要用;
    • 频繁的单次调用试着改为批量调用
  • 代码,流程精简,减少内存开销...

稳定性优化:

  • 集群高可用,健康检查,分布式协议
  • 限流,降级,熔断,重试
  • 资源隔离,安全生产

可维护性优化:《码出高效-阿里巴巴代码规范》

  • 编码规范
  • 代码重构
  • 技术演进

最后

如果能总结出一套自己的问题解决方法论,那就可以很快形成与别人拉开差距的核心竞争力,我也需要再对这方面多做一些思考与梳理。

相关文章

网友评论

      本文标题:服务端问题排查与系统优化方法

      本文链接:https://www.haomeiwen.com/subject/klebbktx.html