分布式系统 / Linux 内核 / 线上排障

苍天环绕的小世界

博客就是将自己的内心赋予形态!出现吧,苍天环绕的小世界!

71 篇文章 8 个分类
苍天环绕的小世界

全部文章

71
日常问题排查

日常问题排查-同应用同流量,为什么CPU.busy差了 5 倍?

日常问题排查系列都是一些简单Bug的排查。在分享的同时也积累素材,方便我的AI分身蒸馏^_^。 在容灾演练的时候,为了验证当前单元能够承载所有的线上流量,我们会将另一个互备单元的所有流量调拨过来过一个高峰期来验证。在收集验证数据的过程中,我们的虾反馈: A应用一共20台机器,有3台CPU明显偏高达到...

4 min read
日常问题排查
日常问题排查-同应用同流量,为什么CPU.busy差了 5 倍?
解Bug之路

解Bug之路-NAT引发的性能瓶颈

笔者最近解决了一个非常曲折的问题,从抓包开始一路排查到不同内核版本间的细微差异,最后才完美解释了所有的现象。在这里将整个过程写成博文记录下来,希望能够对读者有所帮助。(篇幅可能会有点长,耐心看完,绝对物有所值) 先来介绍一下出问题的环境吧,调用拓扑如下图所示: 合作方的多台机器用NAT将多个源ip映...

13 min read
解Bug之路
解Bug之路-NAT引发的性能瓶颈
高可用之路

高可用之路-闲聊监控指标的局限

在我和GPT探讨了很多天的人生之后,他终于说动了我,让我开启迟迟不想动笔的高可用系列。感谢GPT们让我从大量繁琐技术文档中解放出来,让我有时间进行真正的思考。写博客对我来说最大的收益是强制自己思考,如果连博客本身都被GPT代劳,那还不如不写。所以本文文字AI含量基本为0,纯手敲,顶多听取了一些AI在...

7 min read
高可用之路
高可用之路-闲聊监控指标的局限
日常问题排查

日常问题排查-空闲一段时间再请求就超时

最近买了台mac mini用来写博客,但迟迟没有动笔。虽然积累了非常多的素材,但写一篇《解Bug之路》系列的博客实在是太累人了。同时也很久没有那种让我感到兴奋的问题了。但总归不能让这台新买的mac mini成为摆设,于是就写一些平时遇到的小问题吧。 问题是喜闻乐见的调用超时。这个问题的显著特征是:

5 min read
日常问题排查
日常问题排查-空闲一段时间再请求就超时
日常问题排查

日常问题排查-奇怪的DNS

日常 Bug 排查系列都是一些简单 Bug 的排查。笔者将在这里介绍一些排查 Bug 的简单技巧,同时顺便积累素材。 国际化的兄弟团队向笔者反映了一个问题。我们在访问一个非洲的服务商提供服务的时候,根据DNS解析却是一个美国的IP。但通过登陆非洲节点的机器来看,还确实找到了相应的请求日志,如下图所示...

2 min read
日常问题排查
日常问题排查-奇怪的DNS
日常问题排查

日常问题排查-偶发性读数据不一致

日常问题排查系列都是一些简单Bug的排查。笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材。 先描述这个问题出现的业务场景。这是一个支付的场景,如果支付成功了,我们就把支付状态置为success(主单据更新)同时写入支付成功时间戳为t1(子单据更新)。支付成功之后,我们还需要做其它的动作,...

2 min read
日常问题排查
日常问题排查-偶发性读数据不一致
日常问题排查

日常问题排查-MVCC和for update混用导致读数据不一致

日常问题排查系列都是一些简单Bug的排查。笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材。 又是喜闻乐见的读数据不一致的问题。这次的问题是这样,业务在一个事务中更新A和B两个表的两个数据。但是在另一个事务中只看到了A的更新,而B依旧是更新之前的值。说好的原子性感觉又被打破了。如下图所示:

1 min read
日常问题排查
日常问题排查-MVCC和for update混用导致读数据不一致
日常问题排查

日常问题排查-改表时读数据不一致

日常问题排查系列都是一些简单Bug的排查。笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材。 线上连续两天出现NP异常,而且都是凌晨低峰期才出现,在凌晨的流量远没有白天高峰期大。而出问题的接口又是通常的业务请求。于是,很自然的,我们就想凌晨有什么特殊的运维动作,翻了下时间线。发现,每天凌晨...

3 min read
日常问题排查
日常问题排查-改表时读数据不一致
日常问题排查

日常问题排查-集群逐步失去响应

日常问题排查系列都是一些简单问题排查。笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材^_^ 最近碰到一个产线问题,表现为某个应用集群所有的节点全部下线了。导致上游调用全部报错。而且从时间线分析来看。这个应用的节点是逐步失去响应的。因为请求量较小,直到最后一台也失去响应后,才发现这个集群有...

5 min read
日常问题排查
日常问题排查-集群逐步失去响应
日常问题排查

日常问题排查-读从库没有原子性?

日常问题排查系列都是一些简单问题排查。问题虽小,但经常遇到,了解这些问题,会让我们少走点弯路,提升效率。说不定有些问题你遇到过哦:) 业务开发同学突然问了笔者一个问题,从库读会不会没有原子性?我下意识的反应怎么可能,只要是遵守MySQL主从Replication协议的原子性至少是能够保证的。但他们遇...

2 min read
日常问题排查
日常问题排查-读从库没有原子性?
linux源码分析

Linux上TCP的几个内核参数调优

Linux作为一个强大的操作系统,提供了一系列内核参数供我们进行调优。光TCP的调优参数就有50多个。在和线上问题斗智斗勇的过程中,笔者积累了一些在内网环境应该进行调优的参数。在此分享出来,希望对大家有所帮助。 好了,在这里先列出调优清单。请记住,这里只是笔者在内网进行TCP内核参数调优的经验,仅供...

6 min read
linux源码分析
Linux上TCP的几个内核参数调优
日常问题排查

日常问题排查-系统失去响应-Redis使用不当

日常问题排查系列都是一些简单问题排查,笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材^_^。 开发反应线上系统出现失去响应的现象,收到业务告警已经频繁MarkAndSweep(Full GC)告警。于是找到笔者进行排查。 首先呢,当然是看我们的监控了,找到对应失去响应的系统的ip,看下我...

3 min read
日常问题排查
日常问题排查-系统失去响应-Redis使用不当
日常问题排查

日常问题排查-请求偶尔超时-磁盘故障

磁盘故障是个非常常见的现象。而磁盘坏道便是其中最常见的问题。而当我们的应用做磁盘操作的时候 正巧落在坏道上面,就会导致卡住的现象。如果坏道比较小的话,会在一段时间内恢复响应。但是,如果下次操作又落到坏道上面,依旧会卡主-_-! 开发陆续收到服务器负载过高以及业务报错告警。表现为偶尔的调用超时。经排查...

1 min read
日常问题排查
日常问题排查-请求偶尔超时-磁盘故障
解Bug之路

解Bug之路-主从切换"未成功"?

数据库主从切换是个非常有意思的话题。能够稳定的处理主从切换是保证业务连续性的必要条件。今天笔者就来讲讲主从切换过程中一个小小的问题。 最近线上进行主从切换,大部分应用都切过去了,但是某些应用的连接确还在老的主(新的从)上面。 这让对应应用的开发百思不得其解,于是求助了笔者一探究竟。

5 min read
解Bug之路
解Bug之路-主从切换"未成功"?
解Bug之路

解Bug之路-记一次线上请求偶尔变慢的排查

最近解决了个比较棘手的问题,由于排查过程挺有意思,于是就以此为素材写出了本篇文章。 这是一个偶发的性能问题。在每天几百万比交易请求中,平均耗时大约为300ms,但总有那么100多笔会超过1s,让我们业务耗时监控的99.99线变得很尴尬。如下图所示: 为了精益求精,更为了消除这个尴尬的指标,笔者开始探...

5 min read
解Bug之路
解Bug之路-记一次线上请求偶尔变慢的排查
解Bug之路

解Bug之路-中间件"SQL重复执行"

我们的分库分表中间件在线上运行了两年多,到目前为止还算稳定。在笔者将精力放在处理各种灾难性事件(例如中间件物理机宕机/数据库宕机/网络隔离等突发事件)时。竟然发现还有一些奇怪的corner case。现在就将排查思路写成文章分享出来。 应用通过中间件连后端多个数据库,sql会根据路由规则路由到指定的...

5 min read
解Bug之路
解Bug之路-中间件"SQL重复执行"
解Bug之路

解Bug之路-记一次调用外网服务概率性失败问题的排查

和外部联调一直是令人困扰的问题,尤其是一些基础环境配置导致的问题。笔者在一次偶然情况下解决了一个调用外网服务概率性失败的问题。在此将排查过程发出来,希望读者遇到此问题的时候,能够知道如何入手。 笔者的新系统上线,需要PE执行操作。但是负责操作的PE确和另一个开发在互相纠缠,让笔者等了半个小时之久。本...

6 min read
解Bug之路
解Bug之路-记一次调用外网服务概率性失败问题的排查
解Bug之路

解Bug之路-记一次存储故障的排查过程

高可用真是一丝细节都不得马虎。平时跑的好好的系统,在相应硬件出现故障时就会引发出潜在的Bug。偏偏这些故障在应用层的表现稀奇古怪,很难让人联想到是硬件出了问题,特别是偶发性出现的问题更难排查。今天,笔者就给大家带来一个存储偶发性故障的排查过程。 我们的积分应用由于量非常大,所以需要进行分库分表,所以...

4 min read
解Bug之路
解Bug之路-记一次存储故障的排查过程
解Bug之路

解Bug之路-dubbo应用无法重连zookeeper

dubbo是一个成熟且被广泛运用的框架。饶是如此,在某些极端条件下基于dubbo的应用还会出现无法重连zookeeper的问题。由于此问题容易导致比较大的故障,所以笔者费了一番功夫去定位,现将排查过程写成博文分享出来。 这是一起在测试环境出现的故障。起因是网工做交换机切换演练,可能由于姿势不对,使得...

6 min read
解Bug之路
解Bug之路-dubbo应用无法重连zookeeper
解Bug之路

解Bug之路-dubbo流量上线时的非平滑问题

笔者最近解决了一个困扰了业务系统很久的问题。这个问题只在发布的出现,每次只影响一两次调用,相较于其它的问题来说,这个问题有点不够受重视。由于种种原因,使得这个问题到了业务必须解决的程度,于是就到了笔者的手上。 我们采用的是dubbo服务,这是个稳定成熟的RPC框架。但是我们在某些应用中会发现,只要这...

9 min read
解Bug之路
解Bug之路-dubbo流量上线时的非平滑问题
自己动手系列

分库分表中间件的高可用实践

分库分表中间件在我们一年多的锤炼下,基本解决了可用性和高性能的问题(只能说基本,肯定还有隐藏的坑要填),问题自然而然的就聚焦于高可用。本文就阐述了我们在这方面做出的一些工作。 作为一个无状态的中间件,高可用问题并没有那么困难。但是尽量减少不可用期间的流量损失,还是需要一定的工作的。这些流量损失主要分...

7 min read
自己动手系列
分库分表中间件的高可用实践
解Bug之路

解Bug之路-记一次中间件导致的慢SQL排查过程

最近发现线上出现一个奇葩的问题,这问题让笔者定位了好长时间,期间排查问题的过程还是挺有意思的,正好博客也好久不更新了,就以此为素材写出了本篇文章。 我们的分库分表中间件在经过一年的沉淀之后,已经到了比较稳定的阶段。而且经过线上压测的检验,单台每秒能够执行1.7W条sql。但线上情况还是有出乎我们意料...

7 min read
解Bug之路
解Bug之路-记一次中间件导致的慢SQL排查过程
解Bug之路

解Bug之路-记一次对端kernel宕机后的tcp行为

机器一般过质保之后,就会因为各种各样的问题而宕机。而这一次的宕机,让笔者观察到了平常观察不到的tcp在对端宕机情况下的行为。经过详细跟踪分析原因之后,发现可以通过调整内核tcp参数来减少宕机造成的影响。 笔者所在的公司用某个中间件的古老版本做消息转发,此中间件在线上运行有些年头了,大约刚开始部署的时...

7 min read
解Bug之路
解Bug之路-记一次对端kernel宕机后的tcp行为
解Bug之路

解Bug之路-记一次JVM堆外内存泄露Bug的查找

JVM的堆外内存泄露的定位一直是个比较棘手的问题。此次的Bug查找从堆内内存的泄露反推出堆外内存,同时对物理内存的使用做了定量的分析,从而实锤了Bug的源头。笔者将此Bug分析的过程写成博客,以飨读者。 由于物理内存定量分析部分用到了linux kernel虚拟内存管理的知识,读者如果有兴趣了解请看...

6 min read
解Bug之路
解Bug之路-记一次JVM堆外内存泄露Bug的查找
自己动手系列

自己动手写SQL查询引擎-总篇

本篇Blog在总体层面介绍了SQL查询引擎Rider的功能及设计,其细节部分将会在后面的篇章中一一道来。 笔者在实际工作中经常需要解析文件,每次文件稍有变化,都得拷贝粘贴一堆代码。 于是就想着能不能做一个通用的服务,通过配置的方式解析文件。 最通用的方法就是自己定义一个文件描述语言,用语言去描述文件...

2 min read
自己动手系列
自己动手写SQL查询引擎-总篇
自己动手系列

MySql之自动同步表结构

在开发过程中,由于频繁的修改数据库的字段,导致rd和qa环境的数据库表经常不一致。 而由于这些修改数据库的操作可能由多个rd操作,很难一次性收集全。人手工去和QA环境对字段又特别繁琐,容易遗漏。 于是笔者就写了一个能够自动比较两个数据库的表结构,并生成alter语句的程序。同时还可以进行配置从而自动...

1 min read
自己动手系列
MySql之自动同步表结构