有人的地方就有江湖,有代码的地方就有Bug!压测如同照妖镜 妖怪哪里逃! 业务代码、核心代码、机器配置通通无处遁形 藏得再深,藏得再久,也逃不出压测的猛烈攻击!压测实战分享

压测如同照妖镜 妖怪哪里逃! 业务代码、核心代码、机器配置通通无处遁形 藏得再深,藏得再久,也逃不出压测的猛烈攻击!压测实战分享是这阵子感触比较深的!压测在于暴力,在于并发,在于无情。一个铁的事实标准摆在面前,从配置到代码,从业务到核心,从cpu到硬盘,从网络到逻辑,方方面面,能争取一秒算一秒,能榨一毫秒算一毫秒!压测能把潜伏在系统里的深层Bug暴露出来,经典到格致,让人难以忘却所在所闻!下面从几个方面分享一下。

一、压测反推工程结构

压测与代码工程结构的千丝万缕关系。从压测的角度来看,代码至少要分成两部分,一是可控代码,简单的说,就是项目中的业务代码,因为是自己写的,所以可控性很强,压测的时候,可以针对性优化;二是不可控代码,像调用的第三方接口,这种没法自主控制。如图示,agent中存放与第三方交互的代理类。压测的时候,区分开可控代码与不可控代码。可控的代码就自己优化 ,不可控的代码,如果是公司团队提供的,就去沟通一下吧,对于外部公司的Agent,那真的是超级不可控了,直接忽略吧。在工程结构上来分析,建议Agent的异常要及时抓住并记一条神奇的【甩锅】日记,看看日志,就能快速定伴Agent对应的团队人员,找到快速处理问题。最好,把第三方的交互统一加上try-catch,记下异常。这样子,可控与不可控就划得很清楚了。

二、不要迷信核心代码

使用核心代码公共类库是一件很开心的事情,省下很多不必要的时候,省下的不仅是时间,更是一堆堆重复代码,可以让人关注业务。然后,千万不要迷信核心类库的代码,所谓有人的地方就有江湖,有代码的地方就有Bug。

这次压测,压到一个神奇的核心库Bug。具体表现为,controller捕获了2%左右的失败,有时候又没有错,这个错误一直在0%到2%的样子。为了查这个压测失败的问题。查看失败日志,能定位到Ip获取环节。但是不知道为什么会失败,断点调试,一切都是正常的,只是压测的时候,总能重现异常。

难道核心库有问题?这个简直不敢想,对于核心库,一直以来都是膜拜啊,拿来用,没有想过核心库会有Bug。但是面对压测的数据,又没法排除核心库的嫌疑,只能对核心库代码进行排查了。

如果构建核心库的时候,把源代码打进去,我觉得对于使用者来讲,绝对是一个福音。可惜我面对的这个核心库没有,还好之前把源代码打进去了。单个调试一切显示正常,压根调试不出任何问题。简单就是诡异到头了。

肿么办,抓掉几根头发后,突然灵光一闪。直接把代码Copy出来,将ip获取的代码逻辑加上步骤日志,从第一步到第六步,一一打出来,进行压测,日志显示,所ip获取的时候,步骤都是正常的。但是期间能出现还是出现了异常。看步骤的话,从request中取ip的代码逻辑并没有出现bug。面对诡异的压测结果,那就再想想。

看样子,从reqeust中取ip的逻辑没有问题,那就把取ip的地方加上try-catch抓一下日志。果真发现Bug了,使用ip的时候,出现了ip为空,导致异常了。

再往回看代码,发现static,发现new,一下子,抓到了Bug,这可是14年种下的bug,19年才来杀。这段代码的bug,可以描述为static误用。来来,展示一下bug的样子,希望你不要写出这种级别的bug,不好发现,不好杀,sonarqube查不出来,普通使用,一切正常,只有压测才会现形。花了8个小时才杀,不要问我为什么花了这么多时间。当核心代码在sonarqube的检查下,呈现出很多bug,很多坏外道。核心类库,想说爱你不容易~

static误用示范public class Ip{
 private string address; 
 private int ipNumber; 
 private Ip ip;  
private Ip(){   
 //sonarqube说禁止外面创建实例  
}  
public static getIp(Request reqeust){   
 ip = new Ip();   
 ....    ...    
//相信我,这里是复杂的ip识别与获取逻辑
...    
...  
}  
public String getIpString(){
     return ip.address;  
}}

压测的时候,不要迷信核心类库,把工程分成三大块,业务代码,核心类库,agent,对应三种不可控级别的代码。业务代码自己搞定,核心类库慎重的找人处理,并[AT]尽量多的人,Agent找人处理或者直接排除掉。

三、压测与机器配置

机器本身配置不行的话,压测就凉凉了。同事测试了机器硬盘读写性能,发现硬盘读写就把时间消耗没了,更不要谈压测业务代码了。提供一台标准的压测机器,是合理的前提。压测不过,不仅仅是代码,这一压,也得看机器本身性能。

压测就像一面照妖镜,英雄不问出处,是驴是马,拉出来溜溜就知道了。面对事实的标准,如何才能将压测做得更好呢?

1、压测环境与压测要匹配

在一个标准性能环境下,达到一个预期的压测值。这个标准环境,比如cpu,硬盘读写性能,可以是一个标准的。或者拿一个基准接口进行压测定值,先测算出环境本身适合的压测值。这样子,压测才能正常的进行。

2、压测环境最好有多个

接口多,接口要一个一个压,一个环境不好并行压。能有多个环境最好。不知道下次压测能不能实现,毕竟要有机器。

3、核心类库必过压测

核心类库都过不了压测的,放在核心类库里,这个有点点坑啦。又要用核心类库,又要过压测,没解。核心类库打上源代码,压测的时候,还可以用源代码进行压测调试。但是希望是通过压测的才放进核心类库,不要等业务代码进行压测的时候,再来找出核心类库的Bug.

4、核心类库必过sonarqube

为什么又扯到sonarqube,其实这个工具的强大之处在于,能分析出很多坏味道与bug,人不同于工具,工具在于将所有可性能全面覆盖分析,人没人注意到的地方,sonarqube可以注意到。这次压测就发现,核心库代码的规范性,并没有想像的美好。sonarqube找出了一堆坏味道,还有bug.

这次压测实战,感觉收获还是很大的。对于工程结果的理解,对于异常的捕获处理,对于核心库的优化改进,都有了新的认识,对于压测,也有了自己一套方案。希望你也能从中学到宝贵的经验!

关注公众号,我的经验就是你的经验!

图书云1.1.3.6小区精度优化版发布 1.1.3.7校园图书共享流程优化预告 图书云共享平台持续更新升级中 只为您更好的共享

图书云新版本发布

图书云1.1.3.6小区精度优化版发布 

本次图书云发布的小区共享功能精度优化,充分考虑了图书云用户反馈的小区位置识别体验,经过产品的探索与权衡,推出此版! 图书云共享平台持续更新升级中,只为您更好的共享图书!在此,也感谢为图书云提出建议的各位朋友,虽然未曾谋面,但是你们对图书云的每一个建议,都将让图书云做得更好。图书云也将不断聆听用户的心声,不断的完善图书云功能与流程。也希望越来越多的朋友能积极反馈自己的想法与建议。

精度优化背景

本次1.1.3.6优化背景是基于一位网名为【上官振宏】的网友建议,他提出了小区识别方面的不足,导致每次加入图书云小区共享都会被图书云拦截。本次通过优化精度,基本上不会出现被莫名拦截了。同时,也针对【上官振宏】反馈的通过小区分享码未能进入到小程序功能页问题,进行了优化。目前新版本1.1.3.6都能进行更好的玩转图书云小区共享了。

图书云小区共享攻略

书非借不可读也,组建一个小区读书俱乐部,定期约小区朋友一起看看书,成长就在点滴积累中!可以是读读古典小说,也可以是玄幻科幻,亦可是IT技术、学术研究,书中自有黄金屋!

上线速度

本次1.1.3.6的上线速度受限于有关部门的审核中,通常上线是1个工作日,本次上线花了15个工作日。感慨一下,人在江湖,身不由己!

图书云1.1.3.7校园图书共享流程优化预告

图书云1.1.3.7将重点放在了校园图书共享流程的优化上,虽然新版本还未上线,但是功能已经发布出去。现在校园图书共享流程更加简洁了,学生群体可以直接加入自己所在的学校进行图书共享。同时,图书云1.1.3.7优化了沟通消息通知,借阅状态的变化都会通知双方,引导双方进行沟通。预计1个工作日可发布,敬请期待。

图书云公众号二维码
图书云公众号二维码

图书云为共享图书平台,向附近的朋友借书、同事、群友、俱乐部好友借书!图书云让小伙伴们享受便捷的私人移动图书馆服务,每个人都能将自己的闲置图书分享给身边的小伙伴,打造自己的小小图书馆!同时,也能通过图书云发现附近自己喜欢看的图书!

感谢以下赞助商对图书云的支持:

光宇游戏大数据Java开发工程师岗位内推 ChinaHadoop大数据云计算邀请您进入游戏公司

内推流程:

  1. 进入识别约吗二维码,输入约口令光宇内推活动,填写姓名手机号
  2. 发送邮件至zhongdaiqi@gyyx.cn
  3. 等待面试机会

内推活动二维码:

职位列表:

Java开发工程师

岗位职责:

1. 负责搭建hadoop集群,解决海量数据不断增长面临的挑战;

2. 管理、优化并维护hadoop集群,保证集群规模持续、稳定地计算与存储扩容;

3. 预研、开发、测试hdfs/mapreduce/hive/hbase的功能、性能和扩展,解决并实现业务需求;

4. 辅导研发工程师跟进Hadoop的功能,及时了解新的特性和功能,并有选择地应用;

5. 熟悉hadoop、hbase、hive、cassandra等软件;

6. 参与部门 java web,以及java应用程序开发相关工作。

任职资格:

1. Java基础知识扎实,熟悉J2EE体系架构系统的开发;

2. 熟悉流行框架技术Struts,Hibernate,Spring,abtis ;

3. 掌握MYSQL,MSSQL等数据库 ;

4. 熟悉Tomcat,weblogic、websphere等主流应用服务器;

5. 熟悉JavaScript,Ajax,XML,dwr,JQuery等WEB技术 。

公司介绍:

光宇游戏是国内知名网络公司,拥有百万在线用户的游戏平台。自2004年进入游戏市场以来看,深获互联网游戏用户的喜爱和游戏业界的认可。

光宇旗下2D回合制网游—《问道》是国内少数同时在线超100万的网游之一。连续十年获得“最受网民欢迎的游戏”和“最受欢迎的民族网游”奖。在2D回合制网游中,《问道》凭借其优良的画风,和独具特色的各种系统,吸引了数千万玩家的青睐,成为国内2D回合制游戏的标杆。

经过10余年的发展,光宇游戏已成为中国网络游戏十大运营商,员工多达数千人,同时也是中国领先的研发、运营、发行一体化网游公司,是游戏研发及运营行业的高新技术企业,连续多年获得文化部、国家新闻出版广电总局、工信部颁发的“十佳游戏企业”、“十大运营商”、“优秀企业”、“优秀网络文化企业”等奖项。

2018年1月,光宇游戏旗舰产品《问道》单组服务器首日在线突破10万人,充值突破1300万元,再次创造行业新的业绩,缔造业界新的传奇。《问道》相关动漫、文学、影视作品均已经达成合作陆续推出,以网络游戏产品构建新的娱乐方式。

光宇游戏持续在PC客户端网游,PC页游,手机客户端网游,H5游戏,独立游戏,应用小程序游戏投入研发力量,现有深圳科诗特研发工作室,沈阳蓝火炬工作室,成都研发分公司,北京巨龙研发工作室,北京巫师研发工作室,北京游游研发工作室,北京云歌研发工作室和北京新游孵化中心等八个研发团队,涵盖全游戏生态链。

已推出《龙蛋三国》、《盗墓三番队》、《终极跑酷》、《海底大营救》等多款手机游戏产品,《樱都学园》等多款手机游戏即将上线,客户端游戏《创世》系列完成压力测试,即将上线,页游《绝世武神》,《逆天邪神》表现良好,H5游戏《蜀山剑侠传》、《萌兔送娃娃》、《王者钓娃娃》多款游戏上线,《灵魂筹码》独立游戏steam上线,光宇游戏在手机游戏、网页游戏、客户端游戏及独立游戏全方面持续发力,以优秀的游戏产品、强大的研发实力保持在中国游戏行业领先的地位。

2019年,我们将接续跨平台战略,在自有《资源成本决策系统》服务平台助力下,在研发及运营上覆盖端游、页游及手游等多平台服务,将陆续推出3D格斗类客户端游戏《天道三国》、二次元手机客户端网游《樱都学园》及H5游戏数款,光宇游戏正在集中力量投入研发基于虚幻4引擎的大型MMORPG顶级视觉体验的客户端游戏,同时将向其它国家及地区输出网络游戏产品,现已与越南、日韩、欧美等国家的多家网络游戏公司达成合作意向,面向Steam平台的多款生存竞技网络游戏产品也将正式对外发布。

用游戏,让生活更快乐——是光宇人的使命,带着创业的激情,每天快乐的工作,让用户体验我们的产品,感知我们的服务,享受快乐的过程,是无数光宇研发和运营人士的共识,脚踏实地,厚积薄发,光宇人带着信念在奔跑。