stormpy内存泄露问题分析

我们的项目中用到了storm,自9月26日起,我们的storm集群频繁出现集群宕掉甚至宕机的问题。

1、现象

storm集群的supervisor机器出现内存泄露,cpu打满,zk集群宕掉,storm nimbus宕掉的情况,严重的甚至出现服务器宕机。我们使用的是storm-0.9.2。

storm-cpu-mem

2、分析过程

2.1、定位出现问题的topology

通过修改python程序名称(我们使用了multilang)的方法,首先定位到出现mem增长的topology是oop,并且是python进程的mem、cpu占用很严重。

2.2、查看日志和增加内存主动回收代码

日志中并没有太多直接能表明mem和cpu增长的异常信息,通过搜索得知有人通过增加主动内存回收代码“解决”了问题,于是我们尝试相同的方法。然而这个方法并没有最终解决问题,反而造成了cpu消耗更多。比较有用的信息是pipe broken这个报错,表明可能是stdin或者stdout的问题。

2.3、转机

9月29日晚,借酒消愁。酒桌上我们再次讨论了这个问题,各自说了直觉中导致问题最可能的原因。我们提到了死循环中某个数据结构不断增长,提到了Java和python通信机制问题。

9月30日storm再次出现内存泄漏的问题,然而此次出现问题的topology是ssn,并且得知运行在线下的pts这个topology也曾出现过这个问题。我们意识到这是一个三个topology共有的问题,它们共有的部分是最可能有问题的——storm multilang python的官方库,storm.py——并且这部分代码中是有死循环的。

在猜想的同时,我们一边重新分析日志,希望能找到可能遗漏的线索,同时进行着另一些“尝试”。

2.4、出现曙光

十一期间storm再次出现问题,我们仍然没有找到问题的原因,之前的所有“尝试”都失败了。我们仍然严重怀疑问题出在storm.py。10月9日上午,我们查看了最新的storm.py代码,并同我们当前使用的storm.py进行diff,最新的代码发现有了不少改动,增加了一些异常处理等代码。我们把新代码上到了线下集群,期望它能有好的表现。下午,新topology抛出了和先前相同的异常,但是这次storm集群mem并没有出现泄漏,到这里我们更相信是storm.py出了问题,只是我们还没分析出内存泄漏点。

10月9日晚上,我们梳理了storm-0.9.3到storm-0.9.5的release log,将其修复的相关bug择了出来,对最有可能的STORM-351做了标记。

2.5、确定问题

10月10日上午,我们首先查看了STORM-351multilang python process fall into endless loop),在这个bug描述的提示下,内存泄漏问题的原因被我们找到了

stormpy

问题出现在readMsg()这个方法。Java进程退出后,python进程依然存在,此时sys.stdin关闭了。readline()返回NULL,line被赋值为空,不满足line == “end”的条件,循环没有退出,msg增加了一个字节”\n”,然后进入了死循环。msg不断增加,导致了内存泄漏。死循环同时导致了cpu被打满。

我们在测试中复现了这个现象。

2.6、其他问题解释

zk集群宕掉是因为zk和storm混布,内存被打满后,zk也挂掉,nimbus挂掉是因为zk挂掉了。

3、解决方案

STORM-351这个bug已经在storm-0.9.3中修复了,使用新的storm.py,并使用storm-0.9.3.jar或更新的jar包编译topology即可。

,

2 Comments

流量突降,升级rsyslog失败?

机房syslog日志服务器使用的rsyslog还在用v5,版本太低,需要升级到v8。

测试通过后先选了一个小机房进行升级,过程一切顺利,结果也正常。流量图很漂亮,两台syslog日志服务器做负载均衡,红线是升级了的服务器的流量。日志收发都正常。

 

今天下午继续升级,有三个机房没有负载均衡,单独拿出来处理。安装部署也没问题,该检查流量了。结果一看,IN流量掉了一截。没有负载均衡,按理应该升级瞬间流量掉为0,升级完成流量又恢复升级前的水平。等了一段时间,IN流量仍然没有恢复,进一步查看OUT流量也掉了一截,而且几乎降为0了,升级过的机房都表现成这样。

 

不应该啊,昨天晚上测的好好的,而且今天操作步骤又和昨天晚上一样,操作系统内核完全一样,为啥会出现这种情况!于是检查rsyslog进程和配置,都没有错。检查rsyslog接收日志情况,能接收日志,检查某一种日志的接收情况,没有数据丢失。去下游检查转发出去的某种日志,依然没有丢失。这时候IN和OUT流量依然没有恢复升级前水平,我认为升级失败了,于是回滚。回滚后IN和OUT流量恢复了。

至此有个问题不解:

为什么OUT流量陡降几乎为0了,去下游检查转发出去的某种日志却没有丢失的情况?这太矛盾了。

NO GHOST ONLINE!

以前从来没关注过OUT流量,为什么升级前OUT流量这么大?OUT流量主要就是转发到下游的日志,而且我确定这种日志非常少,绝不可能达到20Mbps。而且为什么升级后OUT流量陡降,回滚后立即复原?那一定是别的流量被干掉了,因为转发到下游的日志没有丢。

上机器抓包,发现出去的包绝大多数是dns请求,这是因为rsyslog配置了域名解析,所以升级后OUT流量被干掉的是dns流量!立马想到前些日子在读Rainer博客时读到的rsyslog v5的dns cache机制问题

Up until and including version 5 rsyslog does actually not implement a real DNS cache.
Starting with 6.3.1, I have now implemented a real, full-blown cache system which will resolve the issues with that use case.

v5的dns cache并不是一个真正的cache,所以仍然有大量的dns请求。然而从6.3.1开始,rsyslog实现了完整的dns cache,dns请求自然就少了。

这篇博客还提到v5的dns cache工作地很好,几乎没有用户抱怨。唯一不同的是udp流量,如果模板配置了域名解析而且有大量机器发送日志的话,就会有大量dns请求。——呵呵,no real pain.

They seem to work surprisingly well, as almost no real pain was reported by users in regard to this system. The big exception is UDP traffic, if combined with template options that require host resolution and a larger number of different hosts sendin messages.

这种问题只会在大流量时表现地很明显,所以昨天晚上升级的小流量机房没出现这个问题。其实再仔细看看那个流量图,小流量机房升级过后IN的流量也没有恢复到升级前的水平,只是差得不多,被忽略了。

那么IN的流量为什么也下降了呢?因为接收的dns应答包少了。

好吧,所以说升级没有失败,周一继续升完剩余的机房。

唔 = –

No Comments

:wq 2014

蓝天2
呵!今年的第一篇文章居然是“年鉴”。

工作第三年了,变化实在太大太快,以致我有些相当的不适应。今年上半年还在各种纷乱的杂事中苦苦挣扎,下半年开始通过各种途径摒弃那些杂七杂八的东西,专注SIEM平台建设。我感到特别幸运的是遇到了志同道合并且靠谱的小伙伴,一路上就不觉孤独。这是一件太难得的事情,我提醒自己一定得珍惜,再珍惜。外界的干扰丝毫没有减少,比如频繁变动的目标和产品定位,雨后春笋般的不明确的伪需求。但我自是坚持想做的事情不动摇,不管你外界的东西再怎么变,我一定是有个不变的东西。那些一时拍脑袋想出的东西都会被时间消磨殆尽。仍记得三年前签offer时候因职位问题坚持和hr交涉,后来每每再遇到那个hr,她都向我回忆当时的那一幕并且津津乐道。

离开了应急响应的岗位,开始接触日志系统,分布式,新技术学习充满挑战和乐趣。

开始带新人,逐渐培养团队意识,不过困难重重,外力通常来得太猛烈,以致你才经营好的氛围瞬间又需要重新来过。今年参加了2次业界的会议,认识了更多的人,有所收获。出差一次,成都的生活太惬意。迟到半年晋升一级。

每个人的需求随着时间和境况的变化也慢慢转变。周围的人来的来,走的走,留的留,各自有各自的理由,各自有各自的选择。或是为了理想奋不顾身,或是由于恐惧踌躇彷徨,我想大约有一点是共通的吧,大家都是朝着自认为的美好前程去的。机会,资源自己主动争取也很重要。

生活上一如既,没有太大变化。25岁了,依然一个人,差点突破。

帝都的空气更加糟糕,趁双十一入手净化器一台。从回龙观搬到了五道口,虽然房租多了好几百,但是心情愉快,只是地铁涨价略微蛋疼。住处旁新开了一条地铁,可以直达奥体,明年可以多去奥体了。休假一周去了张家界和凤凰,相比起来我还是喜欢张家界的自然,空气清新,远离喧嚣,住在山脚下的小木屋,除了享受自然什么也不想不求,就仿佛世外桃源。发了73条微博,删了好多条;在豆瓣听的歌已经积累到了将近6w。原本每周五晚上坚持的羽毛球今年断断续续,还打伤了一次腰。结束了1350天的素食,恢复食肉。

每年这时候总听到有人慨叹光阴荏苒,又是岁末。可时间不过是一个32bit整数,且不必在意数字的增长,岁月的轮角。真正让今天和明天不同的是明天会放假,而今天要上班。也不必在意人生的无常,放下那些节外的欲望和执念,思辨到底追求的是什么,所以放弃什么。多数事情无所谓对错,让自己生活的愉快,工作的愉快,就是这个标准了。

今天唯一一条新年祝贺的短信来自遥远的贵州,祝福身体健康,家庭幸福。虽只寥寥几字,但质朴,温暖。

不变的祝福,祝家人和朋友们身体健康,都有美好的前程。

2 Comments

:wq 2013

转眼就到了2013年的最后一天,翻了翻去年的文章,发现去年没有写“年鉴”。

自从去年年底公司大佬“效仿”huawei提出“狼性文化”以来,今年的工作中我确确实实感受到这种氛围。各种紧凑的排期,更大的工作量,更长的加班时间……我仍记得我在面试huawei的时候问过面试官他对于“狼性文化”的评价,他说huawei现在很少提,他们认为的“狼性”侧重团队层面的意义。而我不解的是为什么在一个互联网公司听到了几乎一边倒的特别是来自中层的对“狼性文化”的赞许和宣扬。

今年,特别是到了下半年之后,几乎每天都配合产品线做各种trouble shooting,甚至手头接着电话,hi上还在跟另一个人聊着。大量的case让我有更多的机会接触业务,接触一线RD/OP并了解他们是怎么做开发/运维的,同时也迫使我要更熟悉我们的安全体系,我们有哪些东西可以服务业务排查问题,解决问题。这是一个很好的循环,积累的经验可以在新的case中派上用场,而在新的case中又可以积累新的经验。

应急响应是我很喜欢的做的工作,虽然我希望最好不要有。我喜欢这种需要你在短时间内作出快速判断,给出解决方案,同时需要尽量全面地思考的感觉,这种考验和挑战性很刺激。每次遇到不同场景,我们看到一个表面的现象,然后通过各种手段抽丝剥茧,追根溯源,找出问题的根本。今年做的一个挺有意思的响应是7月17日struts2的0day,估计圈内很多人那天是通宵不眠的啊,而这次0day的后遗症在半年之后仍在发作。做应急响应当然也是要付出一些代价的,比如凌晨3点短信、电话报警一起响爬起来一看是误报。

另外一个让我记忆深刻的是上个月团队内在两天内一块儿做的一个家用路由器dns劫持检测的项目,我把在这次项目中的体会到的团队合作,激情和执行力定义为我心目中的“狼性”。现在回想起来感觉依然很棒,赞一下我们团队的小伙伴们。

今年参加了2次业界的会议,除了认识了一些人以外,收获不大。比较失败的是提职称晋升没有过。

生活上一如既,没有太大变化。24岁了,依然一个人,没有突破。

帝都的空气仍然很糟糕,糟糕透顶。房价继续上涨,似乎还是报复性的,六环的均价已经突破2w大关,可我想花几百万在帝都十年二十年之内很可能仍然是荒郊野岭的地方买套房子实在过于蛋疼了。虽然今年地铁开通了好几条新线,无奈帝都还是太大了,去哪儿都不方便。光这几点就足以让我不打算长留帝都发展。

通过一些途径认识了两位小朋友并支持他们的学业,这是今年做的最有意义的事情了。一位叫小Q的同学今年考上南航,我也趁着送他去报到的机会回南京。回到校园的感觉很棒,特别和小Q一起去报到被当作大一同学推销历年入学考试试题。恩,我还很年轻呢。我也去了解了比我生活在更底层的人的生活状态,他们的价值观和世界观,设法去给予他们一些力所能及的帮助,同时也丰富了自己的经历。在这座许多人向往的看上去鳞次栉比,灯红酒绿,光鲜亮丽,遍地财富和充满现代气息的大城市中,依然有住在井下几十年的,蜗居在几十人合住一套三居的群租房的,在从小就在北京读书却还是不符合在京参加异地高考的一群人。

在这之后邀请乐乐来帝都玩儿了几天。乐乐来的正是帝都天气最好的时候。我们重游了5年前去的大栅栏,北海,什刹海和恭王府。一个月后乐乐去了HK做RA。我还记得乐乐在保研前纠结选择哪个导师,我在一次去听宣讲会的地铁上跟他一起探讨了做出了现在的选择,而就是这个老师推荐了他去HK PolyU做RA。

花了有生以来最大金额的一笔钱,入手6d一台。一年拍了大概500张左右片子,自己比较满意的不到10张,大多发到weibo了。摄影技术还有待提高。

看了2部戏,南大同学的话剧巡演到北京,让我有机会延续大学时培养起的爱好,只是票价相比在学校里翻了好几番。本来还应该再加一场李宗盛的演唱会的,可惜太晚知道演出消息而票早已售罄。在豆瓣听的歌已经积累到了4w+;发了63条微博;遗憾GR关闭无法统计阅读RSS条目。每周五晚上坚持2小时羽毛球运动,这是个可以坚持下去的好习惯,其实最主要的是不用自己掏钱。开始尝试投资,定期储蓄,基金,贵金属都有涉猎,战果平平。

开始还房贷,也成了房奴。其实不是我买房。

更平和理性地看待目前的生活,虽然离距财务自由相去甚远,但这才是我工作的第二年,我告诫别在一开始就想着一蹴而就。我仍有大把的时间去为理想中的生活努力,而已经实现了自己梦想的人们,无不也是历经多年奋斗才达到的。

最后祝福也不变,祝家人和朋友们身体健康,都有美好的前程。

No Comments

图零夜读:28期

文 / mazhechao

【1】《What’s Up CAPTCHA? A CAPTCHA Based On Image Orientation
这是一篇Google关于新形式的验证码论文,主要阐述了通过辨认“正向”图片的方式实现验证码的原理,论证了这种验证码的可行性等。这种验证码不仅有趣,并且解决了在移动设备,特别是手机上,传统输入字符形式的验证码给用户带来的不便和体验差的问题,要知道,在手机上敲键盘输入很多么痛苦的事情。当然,在实际应用是还存在较多需要注意的地方,如选图类型,“正向”容忍误差的设置等等。目前我还没见过这种方式的验证码的实际应用。

【2】《FreebuF黑客专访系列之吴翰清(刺):接下来几年,有两样东西必定会火
一个是云计算,一个是移动互联网。似乎是老生常谈,但刺讲到的在云端厂商能为用户做什么很有价值,比如提供基础环境、网络,那么安全也一样,厂商提供云端的安全服务,防黑,防D,防劫持等等。这样看来云安全就更切实际。我们看到如安全宝、日志宝,360的网站卫士这类服务都已经做起来了,也预示了云安全的发展动向。

【3】《说说“史上最大规模的DNS劫持”
这个事情比较有意思。说起来,就是利用路由web管理的漏洞进行csrf攻击,但并不止于这一步。前几天我处理一起劫持事件正好遇到了,攻击者用这种手法打了用户的路由器,劫持用户访问某站点为另一站点引入流量而从中获利。再想想,我还可以分析被攻击的路由器下连接的用户的dns请求(只要他不是自己单独配置的),甚至可以作为DDoS溯源的手段

————————XX的分割线————————

想不出是什么词,所有就是XX的分割线。最近看了几期湖南卫视的《变形计》,大约是城市“问题少年”和乡村少年互换体验生活的节目。先不说真假,只觉得好惭愧,好心酸,又很幸运……一言难尽。不公平的事情太多,虽无力改变,但可以力所能及施以援手。

珍惜现在的生活!

No Comments

图零夜读:27期

文 / mazhechao

【1】《域名生死战 – 浅析域名安全
这篇文章回顾了多起著名的域名劫持事件,包括baidu、wooyun等,以案例谈有关域名的安全风险及应对措施。文末提到了腾讯自建的域名安全监控系统,有客户端的公司就是好啊!不久前,大众点评亦遭受域名指向篡改,看来这块的安全还是要重视啊。

【2】《知道创宇研发技能表v2.1
余弦写的一个对知道创宇研发人员技能要求的表格,可做参考,其实是可以看看自己哪些不知道的。还有,好多python啊。

【3】《IBM研究员开源同态加密库
10年从老大那儿听说“同态加密”,后面陆陆续续有关注。有时间要去研究下,只是还不了解这项技术在工业界是否已有应用,感觉在“云”那边应该有所作为的。

————————蓝天、GR的分割线————————

吃喝都还可以用高一点的代价去获得好一点的品质,只是这空气,难道买个净化机天天待在屋里?上周除了周末有五天的蓝天,都说让人感动了,早点逃离吧……GR还是关了,我已经用theoldreader好几个月了,挺习惯的,除了不支持tag很DT,其他都不错,follow me!

No Comments

图零夜读:26期

文 / mazhechao

【1】《暗时间
乐乐同学写的《暗时间》的读后感,这是乐乐写博以来我觉得他写得最好的一篇文章了。

【2】《利用python特性进行提权
xi4oyu大牛的文章,手法么,是猥琐了点儿,我咋觉得实战中这个办法很难成呢;倒是让我对python库的加载更了解了些。

【3】《我的第四年
小百合的一篇帖子,讲述她大学的第四年生活,笔法细腻,让我深深怀念在南京上学的时光。问乐乐说我们毕业时咋没人写这样的文章,乐乐说工科男不解风情。

————————春天的分割线———————-

在历经长达半年的冬季后,帝都今年的春天终于来了。只可惜刮风就是扬尘,不刮风就是雾霾,于是蓝天白云的日子就格外珍贵。

No Comments

三百元

某次周末和进儿、栋吃饭,花了297元。

每周五和同事去球馆打2小时羽毛球,场地费加球的费用大概是270元。购买的球拍和线等装备大概是330元。

去年买的一双运动鞋,打完7折是310元。

去年年底买的cherry青轴机械键盘600多元。

年初部门组织去滑雪,估计每人400多元。

——————————————————————————————

某个贫困地区初中学生一学期花费一千多元。希望得到的资助是每学期300元。这可能只是我们几个人在外面吃顿饭的钱,买一双鞋的钱,一次娱乐活动的钱,半个键盘的钱……需要的只是一条靠谱的途径和一点精力。孩子能继续学业,对他的家庭将有很大的意义。

2 Comments