解Bug之路-NAT引发的性能瓶颈】的更多相关文章

解Bug之路-NAT引发的性能瓶颈 笔者最近解决了一个非常曲折的问题,从抓包开始一路排查到不同内核版本间的细微差异,最后才完美解释了所有的现象.在这里将整个过程写成博文记录下来,希望能够对读者有所帮助.(篇幅可能会有点长,耐心看完,绝对物有所值~) 环境介绍 先来介绍一下出问题的环境吧,调用拓扑如下图所示: 调用拓扑图 合作方的多台机器用NAT将多个源ip映射成同一个出口ip 20.1.1.1,而我们内网将多个Nginx映射成同一个目的ip 30.1.1.1.这样,在防火墙和LVS之间,所有的请…
解Bug之路-Nginx 502 Bad Gateway 前言 事实证明,读过Linux内核源码确实有很大的好处,尤其在处理问题的时刻.当你看到报错的那一瞬间,就能把现象/原因/以及解决方案一股脑的在脑中闪现.甚至一些边边角角的现象都能很快的反应过来是为何.笔者读过一些Linux TCP协议栈的源码,就在解决下面这个问题的时候有一种非常流畅的感觉. Bug现场 首先,这个问题其实并不难解决,但是这个问题引发的现象倒是挺有意思.先描述一下现象吧, 笔者要对自研的dubbo协议隧道网关进行压测(这个…
解Bug之路-记一次存储故障的排查过程 高可用真是一丝细节都不得马虎.平时跑的好好的系统,在相应硬件出现故障时就会引发出潜在的Bug.偏偏这些故障在应用层的表现稀奇古怪,很难让人联想到是硬件出了问题,特别是偶发性出现的问题更难排查.今天,笔者就给大家带来一个存储偶发性故障的排查过程. Bug现场 我们的积分应用由于量非常大,所以需要进行分库分表,所以接入了我们的中间件.一直稳定运行,但应用最近确经常偶发连接建立不上的报错.报错如下: GetConnectionTimeOutException 而…
解Bug之路-TCP粘包Bug - 无毁的湖光-Al的个人空间 - 开源中国 https://my.oschina.net/alchemystar/blog/880659 解Bug之路-TCP粘包Bug 前言 关于TCP流 TCP是流的概念,解释如下 TCP窗口的大小取决于当前的网络状况.对端的缓冲大小等等因素, TCP将这些都从底层屏蔽.开发者无法从应用层获取这些信息. 这就意味着,当你在接收TCP数据流的时候无法知道当前接收了 有多少数据流,数据可能在任意一个比特位(seq)上. 详情见笔者…
解Bug之路-记一次中间件导致的慢SQL排查过程 前言 最近发现线上出现一个奇葩的问题,这问题让笔者定位了好长时间,期间排查问题的过程还是挺有意思的,正好博客也好久不更新了,就以此为素材写出了本篇文章. Bug现场 我们的分库分表中间件在经过一年的沉淀之后,已经到了比较稳定的阶段.而且经过线上压测的检验,单台每秒能够执行1.7W条sql.但线上情况还是有出乎我们意料的情况.有一个业务线反映,每天有几条sql有长达十几秒的超时.而且sql是主键更新或主键查询,更奇怪的是出现超时的是不同的sql,似…
解Bug之路-记一次JVM堆外内存泄露Bug的查找 前言 JVM的堆外内存泄露的定位一直是个比较棘手的问题.此次的Bug查找从堆内内存的泄露反推出堆外内存,同时对物理内存的使用做了定量的分析,从而实锤了Bug的源头.笔者将此Bug分析的过程写成博客,以飨读者. 由于物理内存定量分析部分用到了linux kernel虚拟内存管理的知识,读者如果有兴趣了解请看ulk3(<深入理解linux内核第三版>) 内存泄露Bug现场 一个线上稳定运行了三年的系统,从物理机迁移到docker环境后,运行了一段…
解Bug之路-串包Bug 笔者很热衷于解决Bug,同时比较擅长(网络/协议)部分,所以经常被唤去解决一些网络IO方面的Bug.现在就挑一个案例出来,写出分析思路,以飨读者,希望读者在以后的工作中能够少踩点坑. 串包Bug现场 前置故障Redis超时 由于某个系统大量的hget.hset操作将Redis拖垮,通过监控发现Redis的CPU和IO有大量的尖刺,CPU示意图下图所示: CPU达到了100%,导致很多Redis请求处理不及时,其它业务系统都频繁爆出readTimeOut.此时,紧急将这个…
解Bug之路-记一次对端机器宕机后的tcp行为 前言 机器一般过质保之后,就会因为各种各样的问题而宕机.而这一次的宕机,让笔者观察到了平常观察不到的tcp在对端宕机情况下的行为.经过详细跟踪分析原因之后,发现可以通过调整内核tcp参数来减少宕机造成的影响. Bug现场 笔者所在的公司用某个中间件的古老版本做消息转发,此中间件在线上运行有些年头了,大约刚开始部署的时候机器还是全新的,现在都已经过保了.机器的宕机导致了一些诡异的现象.如下图所示: 在中间件所在机器宕机之后,出现了调用中间件超时的现象…
解Bug之路-记一次线上请求偶尔变慢的排查 前言 最近解决了个比较棘手的问题,由于排查过程挺有意思,于是就以此为素材写出了本篇文章. Bug现场 这是一个偶发的性能问题.在每天几百万比交易请求中,平均耗时大约为300ms,但总有那么100多笔会超过1s,让我们业务耗时监控的99.99线变得很尴尬.如下图所示: 为了精益求精,更为了消除这个尴尬的指标,笔者开始探寻起这100多慢请求笔的原因. 先找一笔看看 由于笔者写的框架预留了traceId,所以找到这笔请求的整个调用的链路还是非常简单的. 而且…
解Bug之路-主从切换"未成功"? 前言 数据库主从切换是个非常有意思的话题.能够稳定的处理主从切换是保证业务连续性的必要条件.今天笔者就来讲讲主从切换过程中一个小小的问题. 故障场景 最近线上进行主从切换,大部分应用都切过去了,但是某些应用的连接确还在老的主(新的从)上面. 这让对应应用的开发百思不得其解,于是求助了笔者一探究竟. 怎么发现的 应用开发收到Cat监控告警,发现这个应用(A)中的请求在好几台机器中一直稳定失败.联想到昨晚刚做过数据库主从切换演练,于是上机器netstat…
解Bug之路-ZooKeeper集群拒绝服务 前言 ZooKeeper作为dubbo的注册中心,可谓是重中之重,线上ZK的任何风吹草动都会牵动心弦.最近笔者就碰到线上ZK Leader宕机后,选主无法成功导致ZK集群拒绝服务的现象,于是把这个case写出来分享给大家(基于ZooKeeper 3.4.5). Bug现场 一天早上,突然接到电话,说是ZooKeeper物理机宕机了,而剩余几台机器状态都是 sh zkServer.sh status it is probably not running…
前言 和外部联调一直是令人困扰的问题,尤其是一些基础环境配置导致的问题.笔者在一次偶然情况下解决了一个调用外网服务概率性失败的问题.在此将排查过程发出来,希望读者遇到此问题的时候,能够知道如何入手. 起因 笔者的新系统上线,需要PE执行操作.但是负责操作的PE确和另一个开发在互相纠缠,让笔者等了半个小时之久.本着加速系统上线的想法,就想着能不能帮他们快速处理掉问题,好让笔者早点发完回去coding.一打听,这个问题竟然扯了3个月之久,问题现象如下: 每个client都会以将近1/2的概率失败,而…
前言 我们的分库分表中间件在线上运行了两年多,到目前为止还算稳定.在笔者将精力放在处理各种灾难性事件(例如中间件物理机宕机/数据库宕机/网络隔离等突发事件)时.竟然发现还有一些奇怪的corner case.现在就将排查思路写成文章分享出来. Bug现场 应用拓扑 应用通过中间件连后端多个数据库,sql会根据路由规则路由到指定的节点,如下图所示: 错误现象 应用在做某些数据库操作时,会发现有比较大的概率失败.他们的代码逻辑是这样: int count = updateSql(sql1); ...…
前言 dubbo是一个成熟且被广泛运用的框架.饶是如此,在某些极端条件下基于dubbo的应用还会出现无法重连zookeeper的问题.由于此问题容易导致比较大的故障,所以笔者费了一番功夫去定位,现将排查过程写成博文分享出来. Bug现场 这是一起在测试环境出现的故障.起因是网工做交换机切换演练,可能由于姿势不对,使得断网的时间从预估的秒级达到了分钟级.等网络恢复后,测试环境就炸开了锅,基本上所有应用再也无法提供服务,在dubbo控制台上也看不到任何提供者,他们和zk的连接都断开而且似乎完全没有重…
前言 笔者最近解决了一个困扰了业务系统很久的问题.这个问题只在发布时出现,每次只影响一两次调用,相较于其它的问题来说,这个问题有点不够受重视.由于种种原因,使得这个问题到了业务必须解决的程度,于是就到了笔者的手上. 问题现场 我们采用的是dubbo服务,这是个稳定成熟的RPC框架.但是我们在某些应用中会发现,只要这个应用一发布(或者重启),就会出现请求超时的问题,如下图所示: 而且都是第一笔请求会报错,之后就再也没有问题了. 排查日志 好了,现象我们知道了,于是开始排查那个时间点的日志.Serv…
千万不要当程序员面说有bug 对于新手程序员而言,在复杂代码中找BUG是一个难点.下面我们总结下老从程序员解Bug的通用套路,希望对大家有帮助. 1.IDE调试 根据项目特点和语言特点选择一个最合适的IDE,由于本人是做C++出身,最喜欢用的莫过于Visual Studio 了,这款微软开发的IDE,自从研发出来,就被称为宇宙第一编译器,能编译调试C/C++.C#.F#.Python.JavaScript.Qt.iOS等多种语言的开发.目前的VS2017还原生支持远程跨平台的软件开发,这无疑给我…
最近<宠物联萌>在三星App上发布遇到一个问题:如果用户在锁定屏幕时解锁解到一半时取消解锁,这时用cocos2d-x开发的游戏就会出现游戏Bgm会恢复播放,但手机屏幕仍然是锁屏状态的Bug. 简述情况: ·游戏运行平台:Android ·Cocos2d-x引擎版本:cocos2d-1.0.1-x-0.13.0-beta ·问题出现操作:Android手机在锁屏状态下,玩家解锁解到一半时取消解锁(用圆环锁比较容易重现) ·是否经过测试:已测试,暂无发现问题 遇到Bug后初步分析了原因,估计是因为…
1.Two Sum Given an array of integers, return indices of the two numbers such that they add up to a specific target. You may assume that each input would have exactly one solution, and you may not use the same element twice. 使用hash public int[] twoSum…
_使用开发环境:UAP:_ _框架:JQuery.MX:_ 最近的开发的页面中,有一处需要在提交的 datagrid里启用行编辑,就会发生奇怪的bug,编辑过程中如图所示不移开焦点直接点保存,那么已输入的信息就会立刻丢失,保存一个空条目, 为此我们几个同事开始研究问题的所在,大家尝试的办法都是使用on动作事件,让点击保存按钮动作生效之前移除鼠标焦点,可是无论是加事件还是直接修改目标状态class都没有效果,最后我想到之前看到的关于Javascript单线程的知识,复原出整个逻辑过程应该是这样的.…
虚拟机网络模式 无论是vmware,virtual box,virtual pc等虚拟机软件,一般来说,虚拟机有三种网络模式: 1.桥接 2.NAT 3.Host-Only 初学者看到虚拟机有三种网络,估计就慌了,笔者也是.哪一种网络是适合自己的虚拟机呢? 桥接 桥接网络是指本地物理网卡和虚拟网卡通过VMnet0虚拟交换机进行桥接,物理网卡和虚拟网卡在拓扑图上处于同等地位,那么物理网卡和虚拟网卡就相当于处于同一个网段,虚拟交换机就相当于一台现实网络中的交换机,所以两个网卡的IP地址也要设置为同一…
首先要知道不能跑最短路,因為只有整2^k才能一秒到達,和倍增有關 所以我們想知道任意兩點間能否存在一條2^k長度的路徑,數據很小,可以考慮floyd 把倍增和floyd結合起來考慮發現如果i到k,k到j各有一條2^(k-1長的路徑,那麼i,j之間存在一條2^k長度的路徑 於是在更新一下實際時間,對時間跑一遍floyd即可 #include<bits/stdc++.h> using namespace std; int n,m; ][]; ][][];//i,j是否存在長2^k長度的路徑 int…
从开始这就是一个新的坑,还好今天我们爬上了: 带着Ui界面的编程,最想感谢的是我的搭档乔美萱:此处我觉得需要掌声和尖叫,一路带我从走到飞: 一.结对编程项目:带UI的小初高数学学习软件 1.用户注册功能.用户提供手机号码,点击注册将收到一个注册码,用户可使用该注册码完成注册: 2.用户完成注册后,界面提示设置密码,用户输入两次密码匹配后设置密码成功.密码6-10位,必须含大小写字母和数字.用户在登录状态下可修改密码,输入正确的原密码,再输入两次相同的新密码后修改密码成功: 3.密码设置成功后,跳…
从Linux源码看TIME_WAIT状态的持续时间 前言 笔者一直以为在Linux下TIME_WAIT状态的Socket持续状态是60s左右.线上实际却存在TIME_WAIT超过100s的Socket.由于这牵涉到最近出现的一个复杂Bug的分析.所以,笔者就去Linux源码里面,一探究竟. 首先介绍下Linux环境 TIME_WAIT这个参数通常和五元组重用扯上关系.在这里,笔者先给出机器的内核参数设置,以免和其它问题相混淆. cat /proc/sys/net/ipv4/tcp_tw_reus…
人会慢慢变老,变老后精力,记忆力乃至身体会慢慢变差,这是无法逆转的自然规律.随之会产生的是对中年危机的忧虑乃至恐惧,比如担心能力精力不及年轻人,从而导致收入锐减乃至失业. 对此我有如下三点不解.第一,担心了以后,中年危机能否减轻或者干脆消失?不会.既然不会,何必担忧?第二,所谓中年危机的本质是竞争力落后从而导致被淘汰,这和年龄无关,那为什么要把“危机”和年龄相提并论?第三,随着年龄的增大,固然精力等因素会不及年轻时,但在社会上打拼久了.积累的技能,经验乃至人脉关系应该可以弥补岁月的流失.既然如此…
从Linux源码看Socket(TCP)的accept 前言 笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情. 今天笔者就从Linux源码的角度看下Server端的Socket在进行Accept的时候到底做了哪些事情(基于Linux 3.10内核). 一个最简单的Server端例子 众所周知,一个Server端Socket的建立,需要socket.bind.listen.accept四个步骤. 今天,笔者就聚焦于accept. 代码如下: void st…
我先讲一个小故事,以前在外企工作时的一个亲身经历. 当时我所在的team,负责手机上多媒体Library方面的开发.有一天,一个具有最高等级的bug被转到了我的手上.这个bug非常诡异,光是重现它就需要花很长时间.在公司内部的issue追踪系统上,测试人员描述了详尽的重现步骤,大概意思是说,用某个指定产品线的手机去播放一段<黑客帝国>的视频,大概播放到半个小时左右的时候,程序就会突然崩溃. 你可以想象,造成崩溃问题的可能原因实在太多了,比如某个局部算法的实现发生地址越界了,或者多线程执行的时序…
序言 提到LVS,就从章文嵩博士开始吧,反正也不知道如何下笔来写这一篇.章大博士,读博时候创建这个lvs软件项目,但是他提倡开源精神,在用户的建议和反馈中,这个花了他两周时间开发的开源软件不断得到改建和丰富.到1999年,该款软件已在负载均衡领域中比较出名,章文嵩仍旧坚持开源,将源代码分享给所有人.好人自有好归宿,章博士在2016年5月27日,去滴滴出任高级副总裁.负责CTO线基础平台部兼工程技术委员会主席.在来滴滴之前,章博士曾在阿里任职近七年,历任淘宝网资深技术总监.淘宝技术委员会主席.阿里…
序言 提到LVS,就从章文嵩博士开始吧,反正也不知道如何下笔来写这一篇.章大博士,读博时候创建这个lvs软件项目,但是他提倡开源精神,在用户的建议和反馈中,这个花了他两周时间开发的开源软件不断得到改建和丰富.到1999年,该款软件已在负载均衡领域中比较出名,章文嵩仍旧坚持开源,将源代码分享给所有人.好人自有好归宿,章博士在2016年5月27日,去滴滴出任高级副总裁.负责CTO线基础平台部兼工程技术委员会主席.在来滴滴之前,章博士曾在阿里任职近七年,历任淘宝网资深技术总监.淘宝技术委员会主席.阿里…
有一个应用场景:从网上得到大量的文字信息,保存到本地. 因为不停地获取文章,导致本地存储很快就变大.所以想到了简单地压缩. 网上找了一段压缩的代码: +(NSData*)zipContent:(NSString*)strContent { NSData* zippedData = nil; NSData* unzipData =[strContent dataUsingEncoding:NSUTF8StringEncoding]; int nSize =[unzipData length]; B…
今天的样式调的纠结,一会这边一会那么把jquery博客折腾的头大,浏览器兼容性.晚上闲着收集一些常见IE6中的BUG 3像素问题及解决办法 当使用float浮动容器后,在IE6下会产生3px的空隙,有意思的是右侧容器没设置高度时3px在右侧容器内部,当设定高度后又跑到容器的左侧了,所以对布局精度要求高. 当子元素浮动且未知高度时,怎么使父容器适应子元素的高度? 这种情况可在父窗口加上 overflow:auto;zoom:1;这两个样式属性,overflow:auto;是让父容器来自适应内部容器…