关注「开源Linux」,选择“设为星标”

回复「学习」,有我为您特别筛选的学习资料~

定位问题

前阵子群里有个同学@我,让我分享下平时是怎么定位问题的,以及排查问题的思路。

甚至我还看到有的面试题也会问这种问题(是不是在校验真的做过线上项目?)

最近组内来了个新人实习生,正好我前几天也给他讲了我的排查问题步骤,今天来分享下我的经验。

这篇文章主要给还未参加工作的小白看的哈。

什么是日志

在初学的时候出现了些问题,要在网上提问,大多数网友都会让你把错误日志发出来看下,一起定位下原因。

但可能你还不知道什么是「日志」,因为平时写代码压根就不打日志,而排查问题try catch{e.printStackTrace();} 又不是不能用,平时运行代码就在本地环境下,写个锤子日志哟。

使不上,使不上...

所谓的「打日志」,按我的理解就是把系统运行过程中,你认为在关键的位置,记录些关键的信息。这些信息会写在运行程序的机器本地文件上。

(如果你是本地环境,那文件就写在本地的文件系统上)

(如果你是远程环境(一般Linux),那文件就写在Linux服务器上)

程序运行时错误或异常相关的信息,自然就是打日志的重点

但现在日志其实不止承载着排查问题的角色了,很多数据收集都来源于日志。基于这种「采集数据」的日志,又有人给它取了另一个高大上的名字「打点」。

这里就不细说了,水很深,这里对小白而言,是把握不住的。网络的东西都是虚拟的,你们要是感兴趣,我改天再细讲。

谨慎地记录日志。生产环境禁止输出 debug 日志;有选择地输出 info 日志;如果使用 warn 来记录刚上线时的业务行为信息,一定要注意日志输出量的问题,避免把服务器磁盘撑爆,并记得及时删除这些观察日志。

大量地输出无效日志,不利于系统性能提升,也不利于快速定位错误点。记录日志时请思考:这些日志真的有人看吗?看到这条日志你能做什么?能不能给问题排查带来好处?

回到问题本身

系统问题产生,很多时候都来源于改动

发现系统出现问题,大多数来自于告警或者业务方(客服)反馈

一般遇到线上问题,在排查的时候,我们就需要考虑:系统最近是否有过改动

如果发布过,那就很可能是近期的发布导致的。所以,出现问题时,首先回想下是不是自己最近的发布改动造成的。

较严重的问题,直接回滚,别想着要保留完整的现场,业务稳定优先

如果不太严重,去看看监控有没有异常突刺。监控无外乎:数据库监控、业务指标监控、接口调用监控。

如果较为明显的错误,一般监控就能看出端倪。

如果没看出端倪又或者说参数信息不全,那就得上服务器看日志(可能接了日志收集系统,在某个分布式日志系统平台上看)。但这不重要,反正有地方看请求链路信息就好了。

  • 如果是自己写的代码,那自己也大概能猜出是什么原因造成的了。

  • 如果不是自己写的代码,找到监控的入口,往上游追踪并看入参,一般也能定位到问题。

也有的情况下,自身对某个系统并不熟悉,代码都是前人写的,自己只是来维护的,业务只懂一点点。

这种硬着头皮也看不懂的,只能debug一步一步看。一般公司都有几套环境(线下->预发->线上),一般情况下我们是使用线下环境debug,但往往线下环境可能数据没那么全,所以有的时候也会到预发环境debug。

所谓的线下环境或者预发环境debug指的就是远程debug。无论是什么环境,跑的都是同一份代码,只是这份代码在不同的机器上跑,机器与机器之间分了隔离环境,正常的业务请求都会转发至线上环境上。

所以,远程debug实际上就是在远程机器上开放端口,本地直连端口进行debug。

首先在线下or预发环境下增加端口配置

JAVA_OPTS="${JAVA_OPTS} -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=1043,suspend=n"

idea配置remote链接,指明ip和端口即可

基础设施

有的时候出现了问题,明明try catch之后就能定位到问题了,结果在catch后没打异常信息,还要重新发布定位问题...

有的时候出现了问题,明明加个告警就能提前发现,结果等到业务方反馈时,背了个故障...

有的时候出现了问题,明明加个监控就能快速定位问题,结果看了半天日志,甚至还得人肉计算QPS和量级...

有的时候出现了问题,明明可以通过开发些小工具来提高定位问题的效率,结果每次都要查半天,一天都查问题去了...

写代码除了实现功能之外,监控告警稳定性也是非常重要的一环,在开发时必须要把稳定性和维护性考虑进去!

事前预警,事中快速定位和处理,事后优化加强!

往期推荐

郑州洪灾,通信网络的容灾机制,发挥作用了吗?

致运维:关于 Kubernetes 的架构,看完这篇你就明白了

Nginx如何限流?

Kafka 宕机后不再高可用?探究 Kafka 高可用实现

图解 Kafka

LVS系列教程08-LVS高级进阶

LVS系列教程07-LVS命令工具及实例

关注「开源Linux」加星标,提升IT技能

实战 | 我是怎么定位问题的?相关推荐

  1. 近期爬虫学习体会以及爬豆瓣Top250源码实战

    近期爬虫学习体会以及爬豆瓣Top250源码实战 我是在B站https://www.bilibili.com/video/BV12E411A7ZQ?p=25里学习的,至今已经可以手写爬豆瓣Top250代 ...

  2. 【YoLov5实战】记录一次不太成功的实战,足球场人物识别

    实战项目参考: yolov5实战 我是从打标签开始,一步一步的做的. 起因是想自己做点什么,而且觉得要从打标签这种比较"无聊乏味"的工作开始,对yolov5的整个流程好有个完整的认 ...

  3. NSURLSESSION使用实战教程

    我的前面两篇文章介绍了NSURLSession套件的使用和NSURLSession套件的主要类.今天我们使用NSURLSession来完成一个小的应用程序.在实战之前,我先补充一点,为什么苹果会主推N ...

  4. iOS学习笔记75-NSURLSession使用实战教程

    我的前面两篇文章介绍了NSURLSession套件的使用和NSURLSession套件的主要类.今天我们使用NSURLSession来完成一个小的应用程序.在实战之前,我先补充一点,为什么苹果会主推N ...

  5. go pprof:一次成功的定位与失败的复现

    背景: 一次大几万人的线上抢购活动,突然出现了问题,页面半天打不开,打开了半天下不了单,cpu涨了又跌跌了又涨,而内存使用又稳如老狗!不要慌,按照套路去分析问题,一切都不是问题! 阅读此文你将收获: ...

  6. 【Python】os.path.exists()的含义 及文件存在但os.path.exists()返回False的原因

    os.path.exists() 函数的功能是查看给定的文件/目录是否存在,存在返回True,不存在返回False. 如果给定的文件只有文件名,会在当前文件的目录下索引. 给定的文件/目录可以是绝对索 ...

  7. Java内存占用过高问题分析

    这里我们创建一个springboot项目, 然后随便写一个contoller, 在这个controller中定义一个List集合, 然后再初始化的时候让集合中10万个字符串, 然后部署并启动项目(这里 ...

  8. 学习JAVA8个月,成功跳槽,外包进阿里成功定级P7,太牛了!

    选择java这个行业的人,找到的工作就是两极分化,要不就是奔着大厂,也成功的进入大厂:另一类就是我这种奔着大厂,但是还在外包公司做底层开发-- 其实说到底就是自己的技术不牛逼,只会用框架,看不懂源码, ...

  9. 在北京做Java开发如何月薪达到两万,需要技术水平达到什么程度? 1

    觉得没有目标的时候看一看大家讨论到的技术点,就知道欠缺在哪了.共勉吧! 转载自:https://www.zhihu.com/question/39890405 在北京做Java开发如何月薪达到两万,需 ...

最新文章

  1. 为什么用IP无法访问网站,域名可以访问?
  2. webpack打包html里面img后src为“[object Module]”问题
  3. 曼哈顿距离和欧拉距离
  4. 深度思考 Spring Cloud + Alibaba Sentinel 源码原理
  5. django-分页的演示
  6. CPU Cache Line伪共享问题的总结和分析
  7. PyTorch 深度学习:34分钟快速入门——自动编码器
  8. DOS下文件操作命令
  9. word计算机基础知识试题及答案,计算机基础知识试题及答案(一)
  10. 蓝桥杯备考-python刷题之路-动态规划算法(DP算法)Part3【最终代码实现
  11. 面试过了复试机会大吗-面试通过,参加复试通过的几率有多大
  12. word中的方括号怎么删_Word如何批量删除习题括号内答案
  13. 安装gms 的拨号盘
  14. 读书的意义—献给第19个世界读书日
  15. html5页面中添加腾讯地图api
  16. python将两张图片拼接成一张图_python实现两张图片拼接为一张图片并保存
  17. 东信社保卡医保卡底层指令通讯协议(支持单片机、Linux、ARM等嵌入式系统使用)
  18. “已连接,但无法访问互联网”开机后wifi有感叹号, 时间无法同步解决办法
  19. 维基解密最新文件揭露CIA如何攻击Windows PC
  20. android string 过滤,Android 字符串过滤器InputFilter详解

热门文章

  1. 一个清华差生10年奋斗经历
  2. 「目前全网唯一2万字长文」从JS上下文到Chromium源码的极限拉扯!!兄弟姐妹们接好了!!...
  3. html动态图片怎么设背景,微信8.0状态背景视频怎么设置?状态视频动态背景图设置教程[多图]...
  4. php:php-fpm平滑重启为什么无效
  5. 程序猿的情怀 语录(三)
  6. 【视听盛宴】《高效能人士的七个习惯》分享会
  7. 雷锋网巴展见闻录:5G 手机也许会迟到,但不会缺席 | MWC 2019...
  8. linux bam文件格式介绍,Sam和bam文件说明
  9. 使用math.sin时报错only size-1 arrays can be converted to Python scalar
  10. Assigning Workstations