一、           问题调优跟踪

1.     事务数1/秒,调整后4 /秒(对单测一支交易)

2013/1/3,启动压力测试后,事务约:1个左右每秒,经修改调整weblogic启动 JVM 参数 JAVA_OPTIONS,事务数据能达到4个左右;调整项如下:

1.调整weblogic启动 JVM 参数,在 JAVA_OPTIONS中增加: -Dweblogic.threadpool.MinPoolSize=200-Dweblogic.threadpool.MaxPoolSize=500

2.修改weblogic jdbc:domain->服务->数据源->loan->连接池->(初始容量:100, 最大容量:200, 最小容量:100)

2.     事务平均数为4.78/秒,调整后15 /秒(对单测一支交易)

2013/2/4, 1.VU用户并发能到达5个,事务平均数为4.78左右,增加再多VU,事务数不会增加,跟踪jrockit飞行记录,发现有争用现象,

javacommon.struts2.interceptor.SharedRenderVariableInterceptor 经排查是strus中有同步记录事务数,导致线程等待。经调整后,能提升到每秒15个事务左右;修改项如下:

1)修改easyloan.war\WEB-INF\classes\struts.xml:把如下内容注释掉:
<!--
        <interceptors>
            <interceptorname="sharedRenderVariableInterceptor"
                        class="javacommon.struts2.interceptor.SharedRenderVariableInterceptor"/>
            <interceptor-stackname="customDefaultCrudStack">
                <interceptor-refname="paramsPrepareParamsStack"/>
                <interceptor-refname="sharedRenderVariableInterceptor"/>
            </interceptor-stack>
       </interceptors>
        <default-interceptor-refname="customDefaultCrudStack"/>
--!>
2) 把 easyloan.war\WEB-INF\classes\struts.xml修改:
<constant name="struts.devMode" value="false"/>    <!-- 开发模式设置为false--!>
3) 修改 easyloan.war\WEB-INF\classes\spring\applicationContext-service.xml如下:
default-autowire="byName" default-lazy-init="false"  <!-- 惰性加载,调整参数为false --!>
4).向 easyloan.war\WEB-INF\classes\configuration.xml 文件的 <configuration>中增加如下:
  <settings>
   <settingname="lazyLoadingEnabled" value="false"/>
   <settingname="aggressiveLazyLoading" value="fasle"/>
   <settingname="defaultExecutorType" value="REUSE"/>
  </settings>

3.     事务数40/秒,调整后600/秒(对单测一支交易)

2013/2/18, 前端LR显示只能达到并发用户约10个,tps到达40左右;服务器端经观察发现GC无法回收,并且后续tps下降到约5个左右;

Weblogic32位,JDK64位,经调整为weblogic32位和 weblogic 自带的32位JDK,内存为2G,性能提升约100倍(TPS:600,响应时间:0.37秒)

4.     事务数40/秒,调整后930/秒(对单测一支交易)

2013/2/20, 从开始执行性能测试以来,LR前端显示 tps最高到达40左右(除换成32位JDK), TPS无再增涨。

今天拷贝jrockit3364bit,和jrockit22 64bit,其中安装使用jrockit-jdk1.6.0_22-R28.1.1-4.0.1,性能明显提升,TPS最高到达930;

5.     事务数900/TPS,网络资源满(100M网络)(混合交易)

在测试过程中,由于网页存在图片文件传输,当有图片加载的页面过多,网络资源就占满。

解决方法:

1.      改变网络贷款为1000M网络

2.      对每个页面的图片能压缩就压缩;

3.      把很多页面加载原素放到首页加载,后续就不再加载资源;

6.     长时间压力测试后,服务主机报错:“cannot set user id: 资源暂时不可用,系统资源分配不够”(混合交易)

解决方法:

修所有应用主机参数,即解决问题,之后再无此现象:

[loanapp@gdap1 ~]$ cat/etc/security/limits.conf |grep loanapp

#loanapp soft nproc 2047

loanapp soft nproc 10240

loanapp hard nproc 16384

loanapp soft nofile 65535

loanapp hard nofile 65536

7.     集群环境中随着压力测试时间增长,主机资源利用率逐渐下降,调整后问题解决(混合交易)

2013/3/5,目前运行情况分析,并发 1200,每个 weblogic server 大约为 100 个并发。针对此情况,建议进行如下调整,然后进行对比测试。

-Xms4096m -Xmx4096m -Xns1024m

-Xgc:throughput

-XXgcthreads:32

-XX:+HeapDumpOnCtrlBreak-XX:+HeapDumpOnOutOfMemoryError

-Dweblogic.threadpool.MinPoolSize=100

相关参数解释,具体请参考 Jrockit参考手册:

针对内存消耗较大应用,增加Xns指定 Jrockit的Nursery区域,可以使存活时间短的

java对象回收完全。

针对于线程数较大情况,默认GC回收线程为 CPU核数(64) ,建议调小GC线程为32进行测试,这样可以降低进程的总线程数,降低线程数过大时的线程切换消耗。

在setDomainEnv.sh/中增加如下启动参数:

JAVA_OPTIONS="${JAVA_OPTIONS}-Xgc:throughput -XX:+HeapDumpOnCtrlBreak -XX:+HeapDumpOnOutOfMemoryError-XXgcthreads:32"

JAVA_OPTIONS="${JAVA_OPTIONS} -Dweblogic.threadpool.MinPoolSize=100"

8.     集群环境存在队列等待,集群管理通信出现队列stuck情况,经打补丁包后解决;(混合交易)

2013/3/5日Weblogic控制台的队列长度存在排队,数值只增加不会减少,无业务时,队列数值也不会减少。

分析发现这些排队请求不影响正常的业务请求,存在排队时,Weblogic控制台的“暂挂用户请求计数”数值一直为 0,表明正常业务请求都能正常处理。

检查Weblogic官方公布的补丁情况,发现此问题为Weblogic10.3.6的一个bug,这些排队请求为Weblogic内部的RMI请求,此BUG 信息如下:

Bug 15839280 : [WLS10.3.6] QUEUE LENGTH COUNT INCREASES OVER TIMEAND NEVER REDUCES

修复补丁为:Patch: 15839280

将Weblogic产品打上此补丁,压测观察,队列能够正常收回。

解决方法:

1.      Weblogic1036-Patches

2.      不使用weblogic集群模式,采用单域单sever模式,并在同一台物理机是部署多个;以充分利用服务器资源;

9.     演练环境出现coredump现象--外围引发

2013/3/11,今天约200人同时在线做操作演练环境出现coredump,应用主机出现线程挂起状态。

分析:

经跟踪,是我们在调用外围系统时,如果外围(出现异常或通信故障)长时间不返回,我们的应用就一直等待,当大量并发调用外围,会导致大量线程挂起,导致长时间GC无法回收,随后出现coredump;

解决方案:

1.      临时先屏蔽外围,此现象就不再出现;

2.      调整接口模块超时时间设置为15分钟,应用线程退出;

10.             演练环境出现GC无法回收资源现象--普元BPS服务器引发

2013/3/12,今天约400人同时在线做操作,在压力测试时(2013/3/9),BPS服务器已经存在瓶颈,当业务员登陆系统后,查待办;当并发量大时,会导致数据库资源过高,长时间不返回待办事项,最终导致GC长时间无法回收资源;而在演练时2013/3/12晚上,当大量人员查待办时,此现象又出现,而且页面长时时间无返回,业务人员上报也上报此问题。

分析:

经跟踪BPS应用和数据库发现一查待办的慢SQL,关键字段未加索引,且SQL写法需调整;

         解决方案:

1.  增加关键字段索引

2.  优化SQL写法,提高查询效率;

效果:

根据stuck线程跟踪,没有再发现此问题。

11.              演练环境出现coredump现象之XA事务引发

2013/3/13,今天约12000人左右同时在线做操作演练环境出现coredump,应用主机出现线程挂起状态。

         分析:

由于在我们的应用采用分库方式,分为贷前和贷后库,为了保证写事务一致性,采用了XA事务方法。而我们在写的过程中,把读数据库也启用了XA事务,最后引大大量事务未提交,占用大量JVM资源,最后出现coredump。

解决方案:

更改所有代码,去掉所有读数据库的事务,对于单资源库的,如果不需要事务则也去掉事务;

效果:

接下来几点再未出现coredump现象;

二、           Last 总结

(一)         架构

1.        Weblogic最好不要采用集群方式,而采用单域单sever模式,并在同一台物理机是部署多个,以充分利用服务器资源;。

a)        虽然集群可以减少部署工作量,降低参数修配置的工作量,方便统计计数等优点。

b)        缺点集群存在集群中节点同步信息的问题,如果集群节点多,主机管理各节点资源还会消耗一部份资源。根据以上经验,有可能会出现;

2.        Weblogic的下,如果在业务逻辑性上,为了要保证增、删、改的事务一致性,启用了XA事务,那么一定记得不要不是所有的事务都需要用到XA事务,不使用XA事务:

a)        查询不需要使用XA事务

b)        如果某些数据只存在于一个数据源中,同样也不需要使用XA事务

注:XA事务是等待所有的事务成功后再算成功,否则回退,那么就要保证过程的持续状态,资源就得不到释放,JVM内存中事务多了,协调各事务资源也就多了,从而引发粘滞线程,最终导致处理能力大幅度下降,最严重情况是导致JVMdown机,如第一章节的11个问题就是最好的例证;

3.        架构下的各组件的基本配置参数需要进行调整,那么就需要对各组件非常了解熟悉才能调整,如struts spring 等组件配置参数要知道详细配置组合,需求仔细研究各组件特性。

(二)         操作系统

操作系统与JDK的比配关系要经过不断测试才能找出最优的配合;

操作系统相应参数是否按管方进行了调整,但最好能懂得部份内核机制,如调整TCPbuffer大小,内存页大小等;

(三)         网络

网络贷款资源要注意监控,TPS上不去看是否存在带宽资源问题;

(四)         应用

注意应用程序内部算法是否存在某种同步机制等算法,一般在保证同步的情况下,并发性能都不是太好;

(五)         数据库

程序中是否存在Block现象,如事务同步算法等,此会导致在并发时出现队列等待现象,最终TPS上不去;

数据的存储IO,分库,SQL索引等优化方法,这需要单独的优化知识,必要时,找专业DBA配合;最好自己也学习一下Oracle 的体系结构,才知道大致出现在什么地方的问题;

(六)         其它

性能测试时,挑选的常用且较为复杂的交易进行性能测试,但无法cover所有的交易,那么可能存在这种现象:

1.  某个业务上,用得少,性能测试时没有挑选,但由于SQL写得有问题,长时间操作(读写)数据库,导致资源无法释放,就有可能导致JVM dump掉;

2.  某一程序,同样性能测试没有做,JAVA程序在处理业务逻辑时是正确的,但申请的对象总是没有释放,长时间下去,多人多次长时间操作涉及此程序模块,大量对象没有释放,JVM程度占满,最终出现coredump。

所以对于整个应用系统来说,不能完全相信性能测试结束了,调优也就结束了。根据许多项目印证,并非如此。后续还需要定期进行应用巡检,包括操作系统运行记录、应用运行记录、中间件运行记录、数据库运行记录,用以发现边角处那些致命的小问题。

三、           结束语

此文章并非讲每个细节如何调整,而只是个人习惯作个笔记而已。不喜勿喷,调优是个很大的工程,如JVM启动参数应该使用哪些特性、操作系统应该调整哪些系统参数、架构中组件的特性应该怎么调、数据库应该怎么调优,这些话题都太大,每个都要理解基本原理才能能给出调优意见;如我在没有考Oracle OCP 之前,以为Oracle调几个参数就叫优化了,现在理解完全不一样,磁盘特性、操作系统特性、Oracle相关特征,如它的日志、页、Buffer、SQL语法写法、索引如何建立,是否会产生分裂,这些都会影响到性能。而这些知识在网上都可以找到相应的文章,或是官方文档有详细说明。在某种架构下,哪些特性组合在一起才是最优的,需要不断的积累和前辈们的经验,多看看技术原理的书籍或是官方文档,才真正有利于调优;

四、           附

1.     jconsole 监控stuck 线程

保证Linux 服务器装有X window。

安装 MobaXterm PersonalEdition 软件。

1)  新建 session

2)  进入session 并执行相关命令

执行命令如下:

[root@localhost ~]# export DISPLAY=192.168.33.1:0.0

[root@localhost ~]# jconsole

2.     weblogic 监控stuck 线程

由于时间原因,当时记录的粘滞线程截图没有了,下次有机会我再补充上;

某大型银行某系统性能调优过程跟踪记录相关推荐

  1. html5调用系统声音1s响一次_记录一次系统性能调优过程

    在线上环境,由于业务场景需要,要求程序能够在普通的4G机器中依然正常运行. 而原来的环境配置为8核16G,微服务部署,一共有6个功能模块. 而现在要求在一台4核4G的设备上正常运行. 问题清单 模块合 ...

  2. 压测导致mysql数据库CPU很高_排查压测问题引发的系统性能调优过程

    前言:今天测试部门的小梦找到我,委屈巴巴的说我写的接口有问题,因为她对这个接口进行压力测试时,发现系统的吞吐量一直上不去,并且 应用服务器 (部署接口项目的服务器) 的CPU.内存等资源的使用率也一直 ...

  3. Android系统性能调优工具介绍

    经作者授权,发表Tieto某青年牛的一篇<程序员>大作. Android系统性能调优工具介绍 在软件开发过程中,想必很多读者都遇到过系统性能问题.而解决系统性能问题的几个主要步骤是: 测评 ...

  4. Perf -- Linux下的系统性能调优工具,第 2 部分

    https://www.ibm.com/developerworks/cn/linux/l-cn-perf2/ Perf -- Linux下的系统性能调优工具,第 2 部分 刘 明, 软件工程师, 上 ...

  5. 原理剖析(第 013 篇)应用系统性能调优

    原理剖析(第 013 篇)应用系统性能调优 - 一.大致介绍 1. 本人接手的一个打车系统,因为出现了一次响应十分缓慢的情况,因此才有了应用调优的篇章: 2.由于过程中可能没有阐述的太清楚,如想详细了 ...

  6. LAMP 系统性能调优

    1.LAMP 系统性能调优,第 1 部分: 理解 LAMP 架构 http://www.ibm.com/developerworks/cn/linux/l-tune-lamp-1/index.html ...

  7. oracle避免回表,请教大家: 经常在sql调优过程中提到避免“回表”,具体是指什么意思???3Q...

    你的位置: 问答吧 -> Oracle -> 问题详情 请教大家: 经常在sql调优过程中提到避免"回表",具体是指什么意思???3Q 如题,不甚感激!!!! [ 本帖 ...

  8. 压力机测试软件,一个典型的测试压力机的性能调优过程

    原标题:一个典型的测试压力机的性能调优过程 性能测试过程中,不仅仅是对被测系统的性能问题定位.分析.优化,很多时候负责批量请求发起的压力机也存在各类性能瓶颈.毕竟用几千块钱的机器就想把几个亿的机器压瘫 ...

  9. 系统性能调优必知必会(脑图更新。。)

    系统性能调优必知必会 CPU缓存 CPU多级缓存,单核心会有自己的一级二级缓存,所有核心会共享三级缓存 一级缓存包括数据缓存 .指令缓存. 数据的读取是以缓存行进行读取的,缓存行一般为64字节. 缓存 ...

  10. 浅谈高并发系统性能调优

    女主宣言 今天带来的是一个篇长文,主要讲解高并发系统架构指标及调优测试经验,希望能对您的研究有所帮助.本文最先发布于 OpsDev,转载已获取作者授权. PS:丰富的一线技术.多元化的表现形式,尽在& ...

最新文章

  1. 让老鼠迷上玩《毁灭战士2》?这个匈牙利神经科学家做到了
  2. Hibernate 中的DetachedCriteria。
  3. 面向对象封装之无参无返,无参有返
  4. Hadoop学习笔记(一)从官网下载安装包
  5. LeetCode--265. 粉刷房子Ⅱ(动态规划)
  6. excel导入到mysql
  7. c语言给定一个单链表输入k,C语言实现单链表(不带头结点)的基本操作
  8. PHP curl函数制 exec_ch和get_headers
  9. 看_那人好像一个产品狗_对_这就是产品狗
  10. php cms下载地址,phpcms将下载地址替换为图片显示
  11. 教你如何给小米5续命
  12. 把linux当无线路由器用,基于树莓派的无线路由器改造
  13. 基于Python实现的PageRank算法
  14. 华为虚拟防火墙互通和访问外网
  15. Linux--管理LVM的逻辑卷--原理+命令实操(LVM扩容+磁盘配额)
  16. 国内PLM用户满意度调研完整版
  17. go每日新闻--2020-12-23
  18. QT信号槽与connect的常见写法
  19. google AdSense广告不显示的原因
  20. 蓝桥杯真题 19省Ca3-最大降雨量 由于沙之国长年干旱,法师小明准备施展自己的一个神秘法术来求雨。 这个法术需要用到他手中的 49 张法术符,上面分别写着 1 至 49 这 49 个数字。法术一

热门文章

  1. 开发者必备的6款源码搜索引擎
  2. SQL中char、varchar、nvarchar、text 的区别
  3. SQL Server SQL语句调优技巧
  4. Python多人聊天室
  5. 什么是dispatchEvent?
  6. 将输入中的制表符替换成适当数目的空格,使空格充满到下一个制表符终止位的地方...
  7. 英语语法总结--动词的时态
  8. Java开发笔记(一百五十一)Druid连接池的用法
  9. oracle 中 cursor 与refcursor及sys_refcursor的区别 (转载)
  10. 模拟百度搜索框,输入时显示历史记录