0

0

排查线上问题的9种方式

蓮花仙者

蓮花仙者

发布时间:2025-07-21 11:12:46

|

239人浏览过

|

来源于php中文网

原创

德国科技管理专家斯坦门茨早年移居美国,以其卓越才能在美国企业界崭露头角。有一次,福特公司的一组电机发生故障,公司在束手无策时请来了斯坦门茨。

斯坦门茨仔细观察电机,经过一番计算后,用粉笔在电机外壳上画了一条线,说:“从这里打开,把里面的线圈减少16圈。”工人们按照他的指示操作,电机果然恢复正常。福特公司支付酬金时,斯坦门茨索要了一万美元。

公司老板认为一条线要价一万美元太过昂贵。斯坦门茨回应:“用粉笔画一条线只需一美元,而知道在哪里画需要9999美元。”老板认为有理,最终支付了一万美元。

这个励志故事告诉我们,排查问题的重要价值不容小觑。今天我们就来总结一下排查问题的9种方法:

基础方法

监控告警

排查线上问题的9种方式问题发生时常用的手段包括生产测试、监控告警和人工客诉。人工客诉是我们最不愿意看到的,因此需要在业务受影响前及早发现。监控告警是发现问题的有效手段,具体可参考《通知&告警治理(降噪)的7种方法》这篇文章。

日志埋点

埋点是了解用户行为的重要步骤,但更重要的目的是识别用户的关键路径。通过注入特定的代码来记录关键指标,是提升应用性能的重要步骤。

日志和埋点之间存在细微差别。埋点可以看作是日志的子集,任何被埋点的数据都应该记录在日志中。

埋点负责发布关键性能数据以进行聚合分析,日志则提供了用户在不同级别跟踪应用的细节信息,从低到高依次为:

Verbose:几乎提供了所有细节,主要用于跟踪执行过程中的控制流 Debug:表示数据主要用于调试 Info:表示非错误信息 Warning:表示可恢复的错误 Error:表示不可恢复的错误 日志的记录会贯穿应用的整个生命周期,而埋点只应在开发的特定阶段使用。通过埋点,可以收集特定类型或有价值的信息素材,基于这些素材可以进行许多有价值的分析和追踪。

问题复现

这个无需多解释,我们来聊聊复现的步骤:

● 确保所有步骤都被记录。记录下所做的每一件事、每一个步骤、每一个停顿。无意间丢失一个步骤或增加一个多余步骤,可能导致无法再现软件缺陷。在尝试运行测试用例时,可以利用录制工具准确记录执行步骤。所有目标是确保导致软件缺陷所需的全部细节是可见的。● 特定条件和时间。软件缺陷仅在特定时刻出现吗?软件缺陷在特定条件下产生吗?产生软件缺陷时网络是否繁忙?在较差和较好的硬件设备上运行测试用例会有不同的结果吗?● 压力和负荷、内存和数据溢出相关的边界条件。执行某个测试能导致产生缺陷的数据被覆盖,而只有在试图使用脏数据时才会再现。在重启BUG复现方法总结机器后,软件缺陷消失,当执行其他测试之后又出现这类软件缺陷,需要注意某些软件缺陷可能是在无意中产生的。

● 考虑资源依赖性,包括内存、网络和硬件共享的相互作用等。软件缺陷是否仅在运行其他软件并与其他硬件通信的“繁忙”系统上出现?软件缺陷可能最终证实与硬件资源、网络资源有相互作用,审视这些影响有利于分离和再现软件缺陷。● 不能忽视硬件。与软件不同,硬件按预定方式工作。板卡松动、内存条损坏或CPU过热都可能导致像是软件缺陷的失败。设法在不同硬件上再现软件缺陷。在执行配置或兼容性测试时特别重要。判定软件缺陷是在一个系统上还是在多个系统上产生。

抓包分析

tcpdump命令配合Wireshark等解析工具可对网络问题进行初步排查。比如http请求是明文传输,可以抓到完整的请求内容。但如果是加密的,至少可以看到有没有RST等异常。或者原本应该观察到的返回包有没有,判断是哪个链路出的问题。

排查线上问题的9种方式这需要对网络知识有较深的了解。可通过《网络通信知识地图》进行学习,特别是《白话TCP/IP原理》要了解。

高危方法

linux命令

有些命令危险性不高,比如TOP,使用方法可参考:《时刻掌握系统运行状态-深度理解top命令》。但是在线上不能随便使用。比如程序正在写一个文件,这时用命令行执行vim,可能导致fd文件描述符失效。关于文件描述符可参考《白话linux操作系统原理》或《趣谈IO多路复用的本质》。

感兴趣的朋友甚至可以自己实现一下fd文件描述符失效:

第一步:进程打开日志文件,使用lsof -p pid

Shopxp购物系统Html版
Shopxp购物系统Html版

一个经过完善设计的经典网上购物系统,适用于各种服务器环境的高效网上购物系统解决方案,shopxp购物系统Html版是我们首次推出的免费购物系统源码,完整可用。我们的系统是免费的不需要购买,该系统经过全面测试完整可用,如果碰到问题,先检查一下本地的配置或到官方网站提交问题求助。 网站管理地址:http://你的网址/admin/login.asp 用户名:admin 密 码:admin 提示:如果您

下载

第二步:vim没打开文件前(或者打开vim没进行wq保存)

第三步:当vim修改文件后wq时,会提示

排查线上问题的9种方式提示文件在读期间被修改了,我们选择yes

第四步:此时再使用lsof -p pid命令来查看打开的文件描述符,进程打开的文件描述符的状态变为了deleted状态。

linux命令可以作为排查问题的利器,比如我在《懂得三境界-使用dubbo时请求超过问题》里提到的netstat -s,但要注意不要对线上造成影响。

下面用图来总结常用命令使用场景,图小需要手工放大看:

排查线上问题的9种方式排查线上问题的9种方式排查线上问题的9种方式留后门法

很久之前我们使用Redis,但管理端做的不太好,我就在程序里留了后门:可以通过http接口对Redis进行增删改查操作。但是用http接口做管理,意味着没有标准的权限控制和操作标准流程,很容易受到攻击或误操作。

更正统的方法是使用标准的运维工具代替这些后门。

线上调试

举个例子,有次我们在进行测试环境演练,出现了个怪异的问题。后来有同事说另一个同事也在用这个环境做调试,所以才会调用那个接口的地方卡住,出现问题。这种问题要是出现在线上,就是故障了。

高级方法

代码走查

排查问题的最高境界是只通过review代码来发现问题。

逻辑推理

但很多大神的解决步骤是:第一,听别人讲述问题现象;第二,提出问题以求证;第三,推理出大致原因并给出可选方案及方案的注意点;第四,自己、更多情况下是他人进行验证。为啥是他人,能达到这种境界多是领导或帮别人排查问题的救火队长,问题发生和自己并没有直接关系。

想达到这种境界还是需要平时的积累和深入理解和深耕。源码和网络知识学起来~~

总结

一张图总结今天介绍的方法:

排查线上问题的9种方式

相关专题

更多
dubbo和zookeeper有什么区别
dubbo和zookeeper有什么区别

dubbo和zookeeper的区别:1、功能定位;2、使用场景;3、数据存储与协调;4、集成与关系;5、性能与可靠性;6、扩展性与灵活性;7、社区与生态系统。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

225

2024.02.23

springcloud和dubbo有哪些区别
springcloud和dubbo有哪些区别

springcloud和dubbo的区别:1、定位与关注点;2、生态环境与集成性;3、调用方式与性能;4、组件与功能;5、定制性与灵活性;6、学习曲线与上手难度;7、社区支持与维护。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

123

2024.02.23

dubbo原理和机制是什么
dubbo原理和机制是什么

dubbo原理和机制的解释:1、核心组件;2、通信原理;3、集群容错;4、自动发现与注册;5、负载均衡与路由;6、序列化与传输;7、监控与日志;8、扩展性;9、安全性;10、与spring集成等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

97

2024.02.23

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

188

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

288

2023.10.25

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1027

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

66

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

455

2025.12.29

Java编译相关教程合集
Java编译相关教程合集

本专题整合了Java编译相关教程,阅读专题下面的文章了解更多详细内容。

7

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
搭建web网站开发环境
搭建web网站开发环境

共6课时 | 0.9万人学习

PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.5万人学习

Git 教程
Git 教程

共21课时 | 2.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号