很对不起你们,又是一篇乱序的文章,可是满满的干货,来源于实践,相信你们会有所收获。里面穿插一些感悟和生活故事,能够忽略不看。不过听你们广泛的反馈说这是其中最喜欢看的部分,好吧,就当学习以后轻松一下。git
Redis各类数据结构性能数据对比github
测试工具:perf4j面试
性能指标:平均值,最小值,最大值,方差redis
对比将814条数据按单条插入到哈希MAP和哈希SET:数据库
对比从814条数据的哈希MAP和哈希SET中判断一个元素是否存在(map的hasKey和set的isMember):数组
大量数据插入哈希MAP,运行一个多小时插入到2w多条的时候再也插入不进去了。想单个删除也很慢,跟插入差很少的慢。可是删除一整个key却很快。这和C语言的原理有关。删除key实际上是删除的对value的引用,内存空间不须要重置,只在须要的时候将其重写。写过一个C语言基础入门的程序:缓存
#include<stdio.h> main(){ int a[5]={1,2,3,4,5}; int b[5]={1,2,3}; int c[]={1,2,3,4,5}; static int d[5]; int e[5]; int f[0]; int i; for(i=0;i<5;i++)printf("%10d",a[i]);printf("\n"); for(i=0;i<5;i++)printf("%10d",b[i]);printf("\n"); for(i=0;i<5;i++)printf("%10d",c[i]);printf("\n"); for(i=0;i<5;i++)printf("%10d",d[i]);printf("\n"); for(i=0;i<5;i++)printf("%10d",e[i]);printf("\n"); for(i=0;i<5;i++)printf("%10d",f[i]);printf("\n"); }
运行结果:性能优化
最后两行出现这个结果的缘由是分配的地址空间原来是什么值就会显示什么值,因此是随机的。数据结构
性能优化实践并发
前段时间我改了并发量最大的媒资接口的JVM启动参数,修改以前栈空间是4G,新生代是1G,基本没有full gc。minor gc至关频繁,平时1秒1次,并发量上去以后每秒4,5次。我将栈空间设置为8G,新生代设置为5G,平时大概4,5秒一次,估计并发量上去以后仍是会达到1秒1次。固然有的机器会少些。由于咱们公司用的是SLB的7层负载均衡,采起的是轮询策略,负载不是很均匀。我如今在试图从根本上解决问题,找到minor gc频繁的缘由,最终要将minor gc口平时控制在12秒一次以上。12秒这个数据是怎么来的呢。
看我标出来的这两个差值,大致新生代的垃圾回收时间是18ms。若是12m一次,就是12000ms中垃圾回收时间占18m,千分之1.5的时间用于垃圾回收,这个比率对于总体性能的影响就没那么大了。固然各个数组会随调整变化,到时候要看状况。
以前我也参与过这个媒资接口的性能优化,一直没有成效是由于第一我对媒资接口不熟,我也不是最主要的负责人,不少事情作不了主。其实,通常解决这个问题的方式是横向扩展,其实咱们有不少空余设备,德伟不愿试试,我也没办法。另外,媒资接口虽然是咱们这边最重要的接口了,可是我总会被临时调到一些更紧急的项目中去,东一点西一点的。虽然说以为本身是个SMP(对称多核处理器),可是内核上下文切换也得保存现场吧,开销很大,作不深刻,时间片又到了。这都是本身当初没有想好,没有本身的负责区域,因此会被来回调。因此如今就作两件事情。现在设备复用先不考虑了,先从根本上改善程序。
我作了一夜的测试,凌晨4点才睡。得出来一个结论:咱们的定时加载本地缓存对性能有影响。次日我在地铁上就发消息到群里说找到性能上不去的根了。次日咱们开会讨论了,你们最后的决定是个人想法能够试一试。可是从统计图表上看,内存,CPU,499和响应时间关联不大。我说咱们系统目前的现状也不会是一个缘由形成的,定时加载本地缓存确实和内存按期的峰值很匹配,确实是问题。既然是问题,就要一点点解决。先抛开问题不谈,发现本身的另外一个问题:话说的太直,太满。
以前发生了一件事,我好好检讨了一下,不少方面。
有次照例中午和部门里一个小姑娘吃饭。她让我给她提提建议,怎样能去阿里。她说你看我人还挺可爱的,能不能靠点别的去阿里。我人实在是太直了,我就向她阐述了确实若是实力不够是去不了的。越聊到最后发现她并非在问个人意见,只是想让我带她去阿里。我发现这个仍是按照本身的思路说下去。结果人家小姑娘气的一下午没搭理我。确实我话说的太直太满,是我要解决的问题。也确实我认为只有实力到了才能去也只是个人想法,人家有人家的方法,只是我不知道,并且不肯意用而已。我总认为达到一个目标过程更重要,其实哪是人人都这么想的。思惟不够开放。我常常给别的公司推荐人才,若是以为这我的实力不够,我都不会给推。这倒没有错,可是对别人应该有更多的鼓励,遇到委婉的人说话要更委婉一点。
这个小姑娘聊天中提到你看我虽然有些问题本身解决不了,可是我能够找别人解决啊,最终问题都解决了。她是以为本身是能够干活的,那么去阿里是没问题的。其实据我了解,阿里不招这种要不要无所谓的。虽然我也没进阿里,我是这么想的。这个小姑娘虽然没去阿里,可是去的公司也均可以。但把这个归因于本身很可爱,很招人喜欢我有点不赞同。物有本末,事有始终。反思一下我本身,记得11年,换工做形式一片大好的时候,我虽然没有换工做,确实出去面过试。面试其实问题回答的都不是很好,可是都给了offer。其中面了华为的,面试官说咱俩一个学校的,我们东大的人基础不该该这么差啊。结果什么都不会,仍是要我了。究其缘由,要我是由于学校比较好,而后去的公司都比较好,人不笨,以为仍是有培养价值的,反正成本也不是很高。和可不可爱关系不是很大,额,我说话是否是又太直了。其实我当初若是遇到了更多的挫折,如今技术能力应该好很多。因此如今我很珍惜遇到的问题,时间许可的范围内,解决很差过程,不去追求结果。特别是作技术的,长远稳定性,前瞻性,很重要。还有一点,女孩子其实在技术工做中面对的劣势远远大于优点,我天然也遇到过,可是我本身不太清楚是哪些。由于这个劣势体如今根本不会给我面试的机会。能让我面试的,我相信面试的过程仍是很公平公正的。至少我经历过的过与不过都有理有据。
我声称本身是个技术吃货,也就是这半年的事情。以前,一直是个技术二货。上家公司在五道口清华科技园,是朋友在那边,把我挖过去的。去的时候我就很明确的说由于这边不是很忙,我家孩子小,我要先照顾好家。分清当前事情的主次是必要的。但是记得那时候天天11点就去吃饭了,吃完饭还要去买个肯德基套餐带着去旁边清华大学,到下午3点再回去上班。不少该作的没作,该学的没学。当初的时间利用起来,如今不至于这么时不时情不自禁的来一句:I am so stupid. 发现身边不少作技术的女孩子,包括本身在内,对技术现状,对各大公司的形势,各个方面摄取的信息太少。不知者无畏,反而会比较自大。前段时间本身也是很浮躁,其实技术基础都不是很扎实。我有个学弟,工做三年的时候就出去创业作CTO了。旁边也有不少人很年轻有为的,很早就不作技术了,直接转管理。我原来在想:我和他们走的路都不同。我要尽可能更多的时间活跃在底层一线,由于想要工做到60岁。提高的过早,之后会越早达到瓶颈。想法很符合自身的状况,可是实际上努力不够。行远自迩,登高自卑。时刻保持危机感,强化学习意识。
回到最初的问题。定时加载本地缓存。我试过,对这个服务来讲,已加载在本地缓存的数据获取速度比远程(其实这里测试集中缓存和数据库速度差很少)快几十倍,并且很稳定。可是最初加载的时候,咱们设定启动后50秒暴露服务,也仍是不能保证加载完,会致使服务重启发生短暂的链接池溢出。并且我感受咱们的dubbo链接池设置了700,太大了,反而致使响应慢。开会讨论将缓存全量更新时间由原本的一小时或者半小时设置为12小时试试结果。结果因为发生了一些非技术缘由如今正式环境尚未试,测试环境没有对比。可是开头介绍的redis缓存彻底能够派上用场。在key值1000个如下的小本地缓存能够第一次加载的时候从redis缓存里取,redis缓存由单独的后台服务控制更新,记录最后更新时间。其实更新服务我放到离线服务里了。若是最后更新时间发生变化才会再次取最新数据。我观察了一个星期,字典值,TV值,字典配置值一个星期就没变过。耗费那么大的性能去更新,好心疼。而后20几万占100M多栈内存的明星数据,定时全量和增量执行更新,启动都须要几十秒作这个事情,当初写这个代码的哥哥,你写的时候真的测试过这么作能够提升性能吗[汗]
epiphany框架改进
既然我要写文,就不得不提一下个人开源框架进展。这是一个离线数据推送的框架,支持全量,增量和手动发送。几个部分可分开和整合部署。用户能够灵活的选取所有部署,或者部分部署。或者在须要的状况下进行升级,降级处理。目前最新版本的改进是支持全量模式耗时长的数据优先运行的策略,以达到整体数据各个线程间耗时平均。固然用户能够本身决定是否使用此策略。在全量增量同时运行的状况下,支持both模式和yield模式。both模式即运行全量的状况下也运行增量,yield模式即全量运行时增量暂停,待全量运行完接暂停时间点继续运行。详情请参阅个人github代码:https://github.com/xiexiaojing/epiphany
我在写框架的时候,一定用到不少测试和性能监控的东西。其中JVM我打开了不少参数,发出来供你们参考,红框标出的是一些监控,测试时能够打开。
程序在跑,今晚够呛能睡觉。
生活点滴
前段时间坐公交车,上来一个2岁左右的小朋友,上车一下子后开始哭,声音特别大。我犹豫了一下,翻翻包,找到以前包上掉下的一个装饰,由于还挺好看的,我顺手就装包里了。我拿到小朋友的面前,让他猜猜这个饰品的两面是否是同样的。他不哭了,也不回答,愣愣的看着我。我就把饰品递到他手上,回到本身的位子。小朋友没有再哭。下车以后,小朋友在车窗那边跟我打了好几个飞吻,这招我儿子就不会。当初犹豫了一下子是在想万一哄了还哭,一车人看着我多尴尬。可是想一想别把本身当回事,你们谁有闲心看我。事实证实我错了,我看到全车人都在看我。可是想作什么就去作吧,作了就不后悔了。
男神说我长的难看
全世界我就认识一个当面说我长的难看的,就是我家男神。以为我应该跟他离婚。不过想一想就他嫌我难看,我当初还非要嫁他,看来我俩眼神儿都不咋地,不是一家人不进一家门,仍是将就过吧。
看看人家都怎么评价个人:
再看我家男神:
我和男神这几年来就吵过一次架,就是他说我长的难看。我生气了,他看我生气他也生气了。摔了好几瓶红酒而后摔出门去回北京了。两个小时后他打电话回来讲快到公司出差给租的房子那里了,让我别被玻璃碎片扎到。又过半小时打电话回来讲已经开始往回返了。好吧,次日他又2个多小时回到租的房子附近上班。而后我上班中午吃饭时跟女同事说我家男神说我长的难看。女同事是这么安慰个人:你就跟他说我长的好看还跟你啊,你长的好看啊。我在想在别的状况下我是否是该跟我女同事翻脸,竟敢说我家男神很差看。可是人家是好心,我也就只能低头喝粥。粥好凉好凉,心拔拔凉。
一家人相处
咱们家相处你们很自由。好比说我要是这段时间注重打扮,男神就会向我指出我哪里穿的很差看。若是我这段时间头也不梳,那就这样吧,也没人管,也没人说。我对我家男神也是,他喜欢干什么工做就什么工做,他说他想早退休我以为也很正常。我也就默默的想一想怎么解决他退休金不够花的问题。我和婆婆关系相处的特别好。首先一点,我婆婆家楼房是咱们有孩子了,可是本身还没买房子的时候先给他们买的。我家嫁女儿没要人家一分钱还倒赔了嫁妆。我家两套房子首付是我出的,贷款我还更多的那套。我也不傻,之因此这么作,老人都穷过,比较看重物质。因此我付出这么多,我内心是平衡的,老人也不会对儿媳太挑剔了。而后婆婆作饭我也历来不挑,好吃就多吃点很差吃就少吃点。孩子大了,婆婆平时没事儿喜欢捡瓶子卖钱,我也没意见,各人有各人的想法,开心就好。可是我本身喝的矿泉水瓶子都会拿回家。这是一种尊重。而后婆婆留长发,她用的扎头绳老是松,因此我要是出门,必然给婆婆买个素色头绳。谢天谢地,如今的东西都是看着好看不耐用,不然我就少了一个表现的机会。