性能问题定位及调优

性能问题定位思路java

原则:倒金字塔型,由表及里,逐步聚焦,大胆假设,当心求证web

顺序:硬件->操做系统->网络->中间件服务器->应用环境->性能脚本->测试数据->log->profiling(分模块打点监控,工具)算法

 

例:搜索线性能问题排查过程服务器

一、排除环境影响网络

环境主要的排查点为:并发

   1)虚拟内存的使用状况,若是使用超过1m则须要重启服务器;框架

   2)log级别jvm

   3)是否使用模板cache高并发

   4)jvm参数是否跟线上一致工具

   5)log文件的大小是否超过1G

   6)是否有其余服务干扰

二、响应时间和tps

   1)在分支中加入时间打点统计,searchweb按时间占用可大体分为:webx框架、业务逻辑java代码、二方库、数据源,对数据源的打点统计确认是否外部依赖的影响,再加上对二方库调用的打点统计,因为webx的耗时是固定的,这时就可确认java代码是否存在问题。一方面开发须要仔细检查代码,也能够结合单元性能测试对java代码的算法进行简单性能测试,还可使用visualvm等profiling工具对代码的方法进一步作检查。到这里searchweb整个耗时均可以被详细的剖析出来。目前国际站的打点方式为每隔10分钟采样一次,每隔1小时写1次log,因此不会由于打点而影响性能,若是以上打点都覆盖全面,那么跑完2小时就能够看出各模块的时间统计,就能够基本定位出哪一块耗时较多。若是再加上单元性能测试的覆盖,排除java代码算法的性能隐患的话,整个searchweb性能情况就能够比较好的把握了。在国际站推荐引擎的两个项目中,这个排查方法都获得充分的应用,对于缩小问题范围起到了很好的效果。

   2)经过调整并发和thinktime等压力参数获得tps拐点,若是仍然达不到预期,可经过上面的方法进一步优化响应时间

三、系统资源指标异常

    系统资源涉及到众多的因素,cpu,memory,io,network等,各个因素相互影响,可经过sar,glance plus(此工具可登陆10.20.133.167试用,登陆后运行glance便可)等工具进行定位

四、系统报错

    性能测试前必定要清空以前的log,保证每轮测试log的独立性,测试完成后要详细检查log中的各类ERROR级别的错误,好比

NullPointerException因为高并发致使的空指针错误必需要调查清楚

 

性能问题定位方法