性能宝典

性能宝典 / 年会

下载《性能宝典》…

资源分享

性能工程系列讲座 性能工程之美 讲义下载 性能工程之——CPU 篇 讲义下载 性能工程之——网络篇 讲义下载 性能工程之——内存篇 讲义下载 性能工程之——数据结构篇 性能工程之——IO篇 性能工程之——系统架构篇 性能工程之——应用服务器篇 性能工程之——缓存篇 性能工程之——MySQL 篇 性能工程之——Oracle 篇…

过抢(超单)问题解决方案

"抢购"是绝大部分电商项目很关注的一个环节,与抢不到商品相比,更容易出现的问题反而是“过抢”。所谓过抢,就是实际的订单数量大于商品数量。举个例子,100个商品供抢购,最后却生成了120个订单。 显然,这是变相的生产者-消费者问题,最直接的解决方案就是在相关业务逻辑上加“锁”。这一操作保证的是,同一时刻只能有一个买家对商品进行购买活动,也就保证了同一件商品只能卖给一个买家。 此外,也要保证商品数量的更新是实时的。当有买家成功购买商品后,该商品的数量相应的会减少,这就要求对商品数量的读写操作应保持同步,尤其是对“读”数据库操作的要求比较高。最直接的解决读写延时的方案,就是将对相关数据库表的读写操作放在同一个库下。 以后遇到此类问题时,可以考虑从以下两点入手: 1. 业务上“抢购”操作加排他锁。 2. 读写数据库保持同步。…

日志分析工具的性能调优总结

背景 某个异步项目在负载测试工具不能监控请求的情况下,只能通过应用的后台日志进行性能分析。该应用的一次性能测试的日志能够达到几百兆甚至几G。通过读取和分析日志获得service和function的一些统计结果,并将所有结果存入数据库。 在编写该后台日志分析工具的时候,遇到了自身代码的很多性能问题,通过调优使得工具的性能提高了十倍以上,在此做一个总结。 JVM内存溢出 调大JVM堆内存 在默认为512M堆内存的情况下出现OutOfMemoryError,调大-Xmx -Xms,降低GC的频率。设置-Xms与-Xmx相同,避免每次GC后都要调整虚拟机堆的大小。 使用字符串常量池 通过JVisualVM剖析观察发现内存中存在大量的字符串对象,而日志中应该是有大量相同的字符串存在。调用String.intern()方法使用字符串常量池,重用大量的字符串对象。 合适的数据类型 在定义变量的数据类型的时候需要充分考虑并选用适合的数据类型。部分统计的信息原先采用大量的double类型,其实根本没必要全部改为float类型。 多线程读取操作慢 我们的多线程读取大致过程是:有一个线程作为生成者不断地从日志中顺序读取begin与end关键字中之间的一段请求日志,将每一段日志塞入队列中,n个线程最为消费者不断从队列取日志块并分析。 合理的正则匹配 正则匹配导致生产者生产过慢。调优过程中发现生产者中输出的queue.size()基本接近于0,生产者中对字符串进行了正则匹配,通过正则匹配判断是否是我们需要分析的请求。取消生产者的正则匹配,而改为消费者进行正则匹配,从原先的1min48s时间缩短为1min4s。 消费者中有多处复杂正则表达式。有些正则表达式为了更加精确的匹配,还做了日志时间格式等匹配,增加了表达式的复杂度,尽量精简表达式只做关键字的匹配。 使用LinkedBlockingQueue…

初学性能测试心得

内容非技术

自己刚接触性能测试时,看到一些参数就像是刚进入幼儿园的小孩看到A、B、C…这些英文字母一样,感觉自己进入了一个完全陌生的世界。QPS是什么?TSP是什么?数据库连接数是什么?…啊,一头雾水。对于CPU使用率有点了解,虽然暂时还不会深入分析,另外给自己一点安慰的是:“平均响应时间”这个概念,哈哈,可以顾名思义。其他看不懂的概念只能找度娘了,不过看过之后暂时也只能是浅层面的认知。虽然目前自己在性能测试方面还是个新手,但是我还是想给大家分享下自己的学习经历,技术含量略低,勿喷。 自己最先接触的性能测试工具是Jmeter,早就听说过这个性能测试工具,但是百闻不如一用。第一次接触Jmeter,遇到的问题还是挺多的。曾经自己一直认为测试脚本是在Jmeter平台上用JAVA语言编写的,然而同事告诉我是先设置端口、添加线程等,然后直接在需要测试的IP上操作,这就是在录制脚本。哇塞,比自己想想的简单好多。在这里我就把自己犯过的愚蠢幼稚低级的错误总结一下。 1. 自己第一次录脚本时, 把鼠标停留在“结果树”上,然后另存为默认文件,最后一看这个文件用Jmeter根本打不开啊,原来是自己保存错了,应该是鼠标放在主目录下并报存为.jmx文件才是正确的。好吧,记住了下次绝对不会犯这样的错误了,太丢人了。…