线上故障排除思路

时间:2024-03-16 16:06:24

本篇介绍线上故障,排除思路。

参考自一次公司内部分享《要你命3000》,是我们公司很牛逼的搬砖老师分享的,小弟学到的只是皮毛,总结分享给大家

 

线上故障排除分四个层次的问题

线上故障排除思路

Java服务层

一般初级程序员,很多都是从Java服务层面去解决问题。

一、debug

如果是代码,来到工作中我用到最多的功能就debug,idea的debug功能也挺好用的,如果那还不会,或者你正要进入实习,查“IDEA debug”学习一下。

有两句话我很赞成

1、连debug都不会的,不能叫程序员,顶多是个Java学徒。

2、会写代码的人一点也不牛逼,更深的层次是能定位问题与解决问题。

二、线上日志+JVM指令

那么问题来了,有些项目,他不是我们debug就能解决的。

比如公司的推送项目,他都有很长的一个链路,有些项目你连代码权限都没有,你怎么在你本地跑起来,况且,要是像有些项目3、4个G,你确定你电脑吃得消吗?

线上日志+JVM指令

1、调试的时候 多打日志!多打日志!

如果没有日志 很多时候出个问题 你在那看多久都用,logger.info /log.warn.

2、不得不说Java语言能够发展这么好肯定是有他的原因的,你可以通过jstack定位出错的线程、通过jmap、jstat去排查内存问题,这些前面都介绍过。

三、业务问题排查利器-Arthas

arthas是一个Java开源诊断神器。

这是大牛介绍的,看上去真的挺香的,显示的数据也很详细。有些情况下他比看日志那些管用。

介绍一个命令arthas trace——方法内部调用路径,并输出方法路径上的每个节点上耗时

显示的日志大概这样:

线上故障排除思路

建议多了解~这个安装也不会很麻烦。

中间件层面

你总不能数据库出点问题,马上就去问DBA,怎么回事吧?

出问题 还是要靠自己排问题先

常用的linux命令

1、查看内存(指的是物理运行内存,不是硬盘内存)

free 可选参数 -m(以mb为单位) -g(以G为单位)

2、查看网络是否连通

ping www.baidu.com

3、查看端口是否开启

ping www.baidu.com -p 80

(面试题:ping命令底层——ICMP协议)

还有好多好多个 top、netstat、df -h -sh 等

 

另外 推荐一个特别强大的感觉:Perf

Perf是Linux自带的性能分析工具

eg:使用perf record记录一下在cpu运行的进程和相关的堆栈是什么

甚至可以,加一些辅助工具,生产火焰图,大概张这样

线上故障排除思路

横轴:cpu使用时间

纵轴:方法运行的堆栈

有了他,可以迅速定位哪个方法占用的时间长,分析问题~

网络、操作系统层面的问题

像我这种初级程序员一般没有用到那个层面,况且可能也没有这个场景,可能在IM这些用的比较多。

不过我相信每次招聘会上每次面试官问你操作系统、计算机网络都不是白问的,肯定有他的理由到你真正遇到的时候。能解决问题!!

 

这里介绍一个:tcpdump

用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。