线上问题排查的四类方法

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 这是排查问题的最常用的方法,需要预估自己每日日志量和需要存储的日志时间。申请磁盘空间时一般会留35%的冗余以备突发流量。

最正统的方法


日志


       这是排查问题的最常用的方法,需要预估自己每日日志量和需要存储的日志时间。申请磁盘空间时一般会留35%的冗余以备突发流量。


       一般需要打日志的有:每个对外提供方法的入口和出口,调用第三方的调用前和调用后。打印内容主要包括入参和出参。https://github.com/xiexiaojing/concise-logger 我在简明日志规范里定义:几种常用的类里用切面的形式注入日志。

 

监控


       传统的方法如果JVM出现gc等问题需要先打开gc日志,这会牺牲一些效率。但是现在业界已经普遍将这些数据上报到系统中,比如欧美常用的prometheus,国内用小米的falcon比较多。


       对于数据库、调用量、响应时长等监控系统也都有统计。美团点评的CAT不仅集成了这些,还集成了依赖分析、依赖分析、心跳报表、业务大盘等。挺方便的。

 

报警


       报警不仅可以发现问题,还可以将发生问题时已经执行到的阶段作为报警信息一起发出,便于快速定位。

 

linux命令


tcpdump


   如果收到不明数据,又不知道数据从哪里来的,最简单的方法就是tcpdump进行抓包分析,确定数据来源。


image.png


netstat


   通常用来监听连接端口的状态。常见的状态主要有:


  1. listen状态:正在监听来自远方的TCP端口的链接请求。


  1. syn-sent状态:在发送链接请求后等待匹配的连接请求。


  1. syn-received状态:在收到和发送一个链接请求后等待对方对链接请求的确认。


  1. established状态:代表一个打开的链接。


  1. fin-wait-1状态:等待远程tcp连接中断请求,或先前的链接中断请求的确认。


  1. fin-wait-2状态:从远程tcp等待链接中断请求。


  1. close-wait状态:等待从本地用户发来的链接中断请求。


  1. closing状态:等待远程tcp对链接中断的确认。


 9.last-ack状态:等待原来的发现远程tcp的链接中断请求的确认。


10.tie-wait状态:等待足够的时间以确保远程tcp接收到连接中断请求的确认。


11.closed状态:没有任何连接状态。

 

再现


我无数次的假装路过,只是为了与你一次偶然的邂逅……


这句话用到希望复现线上问题时,往往描述到位的想哭。


如果线上运行的程序遇到问题需要排查,建议优先使用最正统的方法,不行的话linux命令也可以接受。内存泄漏、并发问题等的再现成本很高。并且极其不利用快速恢复。

 

线上调试


如果再现之后还不不能确定问题的原因,还有最后一招不到万不得已不要用:线上调试。

工具:线上机器是linux系统,本地intelij


1112728-20190818210427852-1885123029.png


复制下面的信息


1112728-20190818210447858-1450235524.png


在线上启动参数中加上上面信息,重启。


sudo svc -du /service/XXXX/


看看监听端口有没有起来


lsof -i :8083


起来后,本地inteij开启远程debug即可。记得之前有次线上事故就是有个小哥在线上开启远程debug,请求打到断点卡在那里了。


总结


事实、数据、推论、猜测

相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
相关文章
|
监控 关系型数据库 数据库
《PostgreSQL性能大提升:实用优化技巧》
《PostgreSQL性能大提升:实用优化技巧》
997 0
|
SQL 监控 网络协议
线上故障如何快速排查?来看这套技巧大全
有哪些常见的线上故障?如何快速定位问题?本文详细总结工作中的经验,从服务器、Java应用、数据库、Redis、网络和业务六个层面分享线上故障排查的思路和技巧。较长,同学们可收藏后再看。
线上故障如何快速排查?来看这套技巧大全
|
传感器 Linux 数据处理
ARM Linux摄像头传感器数据处理全景视野:从板端编码视频到高级应用(二)
ARM Linux摄像头传感器数据处理全景视野:从板端编码视频到高级应用
200 1
|
7月前
|
存储 NoSQL Redis
Docker 部署 Redis
在使用 Docker 部署 Redis 时,为实现数据持久化,需正确挂载容器内的数据目录到宿主机。推荐命令如下: ``` docker run -d --name redis -v /mnt/data/redis:/data -p 6379:6379 redis ``` 该命令将宿主机的 `/mnt/data/redis` 目录挂载到容器的 `/data` 目录,确保 Redis 数据持久化。此路径更通用,适合大多数场景。避免使用不匹配的挂载路径,如 `/var/lib/redis` 或 `/mnt/data/redis` 到非默认目录,以防止数据无法正确持久化。
|
6月前
|
人工智能 自然语言处理 JavaScript
通义灵码上线 @workspace 新能力,结合当前代码仓库理解工程、代码查询与问答等
通义灵码上线 @workspace 新能力,结合当前代码仓库理解工程、代码查询与问答等
685 1
|
8月前
|
SQL Java Maven
docker部署apollo
docker部署apollo步骤
|
12月前
|
JSON 供应链 数据挖掘
抖音商品sku数据接口(Dy.item_sku)丨抖音平台API数据接口指南
抖音商品详情SKU数据接口(Dy.item_sku)由抖音开放平台提供,用于获取商品详细信息,包括名称、价格、图片等。开发者需注册并获取权限,遵循API限制,通过商品ID调用接口,解析JSON格式返回数据。该接口广泛应用于商品展示、库存管理、订单处理及数据分析,助力提升工作效率和用户体验。使用时需遵守平台规则,确保数据安全。
1262 3
|
数据库 开发者
使用版本号实现乐观锁
使用版本号实现乐观锁
|
Kubernetes 网络协议 网络安全
在K8S中,容器提供一个服务,外部访问慢,到底是容器网络问题?还是容器服务问题?这种怎么排查?
在K8S中,容器提供一个服务,外部访问慢,到底是容器网络问题?还是容器服务问题?这种怎么排查?
|
弹性计算 运维 负载均衡
构建高可用性的分布式系统:技术与策略
【7月更文挑战第1天】构建高可用分布式系统涉及负载均衡、容错处理和数据一致性等关键技术,遵循冗余、模块化及异步设计原则,并通过监控告警、自动化运维和弹性伸缩策略确保稳定性。