性能调优事例

 

1 脚本是优化的     
 1.1对于BS结构的脚本录制 尽量将一些图片请求 或者重复请求 或者是 动态刷新页面的请求全部干掉      
 1.2 函数使用 :正式跑场景的时候将调试函数屏蔽 lr_out_message   lr_log_message   lr_error_message 等  关联函数的参数选择 ---- to_date to_char    
2.客户端:压力机本身优化  其目的是别让压力机端口存在堵塞现象    
3.网络  看网络存不存在丢包    
4.应用服务器:sysconf   sysctl -a  > sysctl.txt   、与数据库连接配置文件     
  应用日志步骤: 看耗时情况    
5.中间件 :tuxedo (域服务器配置) weblogic  JDK   MQ  Congnos  nginx   F5 等      
      
6.数据库 :Oracle   DB2    infomix 等    
    
7.架构:    
    
--------------------------    
参数化策略:每次迭代、每次出现、只取一次    
        顺序、随机、唯一
    
#AIX系统:    
#1.判断内存不足:svmon -G:   virtual值大于size,则表明物理内存不足,换页不可避免,只能在硬件上升级物理内存或者配置用户应用,通过减小应用对内存的需求量来解决。    
                 vmstat:收集内存使用数据和换页数据;fre,avm:表示系统工作所需的页面数;avm > fre,表明换页。    
                 lsps:收集换页空间的使用情况。    
    
    
---------------------内存泄漏产生的原因-----------------------    
1、分配万内存后忘记了回收    
2、程序代码有问题,造成没有办法回收    
3、某些API函数操作不正确,造成内存泄漏    
    
---------------------------注意:-----------------------------    
如果重启机器后,cache没有被释放,可进入/proc/sys/vm中使用echo 2 >drop_caches命令释放cache。    
    
--------------------------------------------------------------    
HTTP录制协议关联:    
insert--->搜索web_reg_save_param进行关联,关联函数要放在参数字段语句上面,打印日志函数要放在参数字段语句的下面。    
登陆的关联最好是登陆的账号或密码    
    
--------------------------------------------------------------    
xml格式转换:    
1、视图中的选择XML格式    
2、格式中选择XML转换格式    
    
编写测试报告时问题分析:    
1、对问题分析要深入,排除自身的影响    
2、要注意格式的排版    
    
--------------------------------------------------------------    
统计当前目录下(包括子目录)所有文件个数    
ls -lR |grep "^d" |wc -l    
    
--------------------------------------------------------------    
java 程序的项目都需要监控VmRss、Vmsize    
VmRss:虚拟内存驻留集合大小。这是驻留在物理内存的一部分,它没有交换到硬盘。它包括代码、数据和栈。    
Vmsize:虚拟内存大小。整个进程使用虚拟内存大小,是VmLib、VmExe、Vmdata、Vmstk的总和。    
    
---------------------------------------------------------------    
Tuxedo脚本调试:    
1、了解服务器端Tuxedo版本,本地控制机安装Tuxedo客户端,配置环境变量    
2、了解WSL访问方式(IP:Port)    
3、了解研发使用的Tuxedo服务名、数据缓冲类型(如:CARRAY、FML32等)、缓冲区长度(如1024*1024*3)    
4、了解这个缓冲区类型的缓冲结构(包括哪些字段,这些字段的属性(数据类型、数据长度等),以及这些字段要放置什么数据,是任意数据还是指定的死数据)    
5、了解报文(报文长度、内容、详细信息;哪些数据需要做参数化;调研报文的格式,是否通过在脚本中组装报文,是否可以通过从报文文件中获取报文)    
6、了解报文发送后服务器返回的数据内容、长度等,用作在脚本中判断事物是否成功    
    
---------------------------------------------------------------    
三层架构:    
客户端(表现层) 中间件服务层(业务逻辑层)  数据库服务器层(数据层)    
应用weblogic中间件的系统一般采用的B/S架构,绝大部分采用HTTP协议,少量的系统用JAVA编写的客户端,使用的是RMI协议,或J2EE里的协议。    
    
-----------------------------------------------------------------    
配置host的路径: C:\windows\system32\drivers\etc    
    
----------------------------------------------------------------    
正则表达式:    
代码   说明    
.      匹配除换行符以外的任意字符    
\W     匹配字母或数字或下划线或汉字    
\S     匹配任意的空白符    
\d     匹配数字    
\b     匹配单词的开始或结束    
^      匹配字符串的开始    
$      匹配字符串的结束    
    
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------    
---------------------------------------------------------------项目调优事项------------------- -------------------------------------------------------------------------------    
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------    
    
一、ECIF    
    
1、问题描述:性能测试组在生产环境对ECIF系统进行性能测试,截止目前发现的问题主要是10并发过程中发现ESB应用服务器CPU资源消耗过高,在70%左右,并且当中sys%占比较高占资源消耗的50%。    
   问题分析:经分析一个是CPU资源不足,还有一个原因是应用日志输出过多引起的。    
   问题解决:应用服务器CPU增加至8C,减少了日志中冗余内容的输出。    
    
2、问题描述:ECIF高并发时出现交易大量报错现象。    
   问题分析:交易发送处理完,断开连接,但是未收到客户端的端口关闭动作,导致大量端口被占用,端口资源被耗尽。    
   问题解决:优化了tcp连接参数,调整了系统控制文件(sysctl.conf)里的端口复用和快速回收参数,增加配置参数详细如下:net.ipv4.tcp_syncookies = 1    
                                                                                                                  net.ipv4.tcp_tw_reuse = 1    
                                                                                                                  net.ipv4.tcp_tw_recycle = 1    
                                                                                                                  net.ipv4.tcp_fin_timeout = 30    
    
3、问题描述:性能测试组在生产环境对ESB系统进行性能测试,10并发过程中发现ESB应用服务器CPU资源消耗过高,在80%左右。    
   问题分析:经技术人员分析原因是应用日志输出内容过多,导致cpu资源被大量消耗引起的。    
   问题解决:1.优化异步写数据库日志线程池,将JMS队列线程数由20调至50个线程,同时修改了代码处理逻辑。    
             2.优化内部服务控制处理流程。    
             3.关闭非必要输出日志。    
    
二、财务    
    
1、问题描述:发票认证结果交易容量测试过程中,随着并发数的梯度增加,应用服务器CPU资源消耗和交易TPS无明显增长,交易响应时间明显变长。    
   问题分析:经与技术人员调试分析,该交易由于业务需要,凭证号码必须是按照顺序生成,凭证号生成过程中采用单线程方式,因此导致该问题和现象。    
   问题解决:  技术人员分析,要实现顺序生成凭证号的业务规则只能采用单线程方式,并且发票认证业务属于审批类交易,在生产上属于权限较高的业务,并不存在高并发高压力的问题,目前测试的结果,从响应时间和TPS以及资源消耗情况来看,都能满足今后生产需要,故经项目组同意该问题暂不处理。    
    
2、问题描述:在对F5可靠性测试过程中,当停掉一台应用服务和重启服务后,TPS未能恢复到最初水平,交易一直报错,错误提示:发票代码:XXXXXX,发票号码XXXXXX,数据已经被锁定,请等待;并且出现终止测试场景,曾被停掉服务的应用服务器cpu资源仍然占用100%现象。    
   问题分析:经与技术人员分析,交易在执行过程中,程序需要对该数据进行加锁处理,当交易完成后再释放锁,但未考虑执行交易过程中出现交易中断,释放锁的处理逻辑,因此造成死锁现象发生。    
   问题解决:取消了程序中加锁的代码。    
    
三、新柜面、无纸化    
    
1、问题描述:执行稳定性测试,在info级别下会记录大量的日志,无法支撑24小时,另外应用服务器的SWAP分区因内存不足被逐渐消耗。    
   问题分析:硬件资源内存不足导致。    
   问题解决:将日志级别修改为error级别,服务器的SWAP分区不在被占用。     
    
2、问题描述:执行单交易测试,场景在10用户并发下执行2小时30分钟,随着交易时间越来越长,TPS从最高91笔/s降到最低61笔/s,呈现明显下降的趋势;响应时间从最低0.108s上升到最高0.16s,呈现明显上升的趋势;发现数据库CPU资源使用率也越来越高,呈现明显上升趋势,CPU资源使用率从最低65.8%上升到最高91.5%;数据库磁盘I/O基本维持在30%左右,呈现逐步下降的趋势。    
   问题分析:通过awr报告分析其中一条sql:select ELECDOCDATE, ELECDOCNO from ab_elec_doclog where CHANELDATE = :1 and CHANELCODE = :2 and VOUTYPE = :3 and PRINTNO = :4 and STATUS = '1'占用65%以上的cpu时间,并且该sql执行了全表扫描。    
   问题解决:项目组优化了ab_elec_doclog表的索引字段,并将索引使用的表空间从系统表空间移到用户表空间。    
    
3、问题描述:执行单交易测试过程中,发现在10用户并发下,TPS150,数据库I/O仅7M/秒,但数据库服务器磁盘利用率高达50%以上,当加压到20并发时,磁盘利用率就超过80%。    
   问题分析:通过awr报告分析目前每成功一笔交易数据库需要commit 4次,当前10个并发tps为150,就意味着数据库一秒钟commit次数达到150*4=600次,因此导致磁盘利用率和cpu过高的现象出现。    
   问题解决:项目组调整了数据库Commit次数,由原来的4次调整为3次,数据库的磁盘繁忙率在一定程度上得到了缓解,但是当TPS超过300仍然会出现该情况。    
    
四、黑名单    
    
1、问题描述:执行负载测试,当并发用户数从50增加到100时,TPS未相应增加仍然保持在300左右,应用服务器和数据库服务器的cpu使用率也无明显变化,仅交易响应时间从0.15秒增长到0.3秒左右。    
   问题分析:经多次测试调试,发现日志对交易响应时间和TPS影响较大,当日志级别为error时,50并发tps可达2000;日志级别为info时,50并发tps仅300。    
   问题解决:优化应用程序中日志处理逻辑,去除了冗余日志的输出并把不必要的日志输出调成了debug,必要的日志调成info级别。    
    
五、统一回单    
    
1、问题描述:单交易基准测试从场景发现回单打印交易在1vu下执行100次迭代,平均响应时间达到4.5秒、回单预览交易平均响应时间达到2.7秒,超过性能指标2秒,且数据库CPU大于20%。    
   问题分析及解决:有执行效率过低的sql导致数据库CPU偏高,响应时间较长。优化sql,增加索引,问题得以解决。附优化后sql:    
    
2、问题描述:单交易负载测试20vu并发,数据库CPUwait%较高,磁盘占用率超过80%。    
   问题分析及解决:代码中有记录日志的操作,并发压力时数据库频繁写日志,导致磁盘IO过高。关闭数据库日志操作,问题得以解决。    
    
3、问题描述:单交易负载测试20vu并发,数据库CPUsys%较高,导致CPU利用率达到100%。    
   问题分析及解决:未找到原因。更换数据库后,问题得到解决    
    
4、问题描述:容量测试增加并发数后,系统交易平均响应时间逐渐上升,系统处理能力逐渐下降,应用及数据库各项资源指标无明显变化。    
   问题分析及解决:1.压力上不去:接收报文时将报文map转换成object这一步骤时,方法性能不高,压力卡在这一步。后改动mapToObject方法,提高该方法性能,压力提高。    
                   2.第二次压测时,发现明细账打印响应时间很长,发现是每次明细账打印时都编译模板,造成性能太低。修改打印方法,只编译一次,以后打印都不编译。性能提高,响应速度降低。    
    
5、问题描述:签约交易单交易并发测试过程中,数据库磁盘利用率较高超过80%。    
   问题分析及解决:签约交易每发生一笔就会对数据库进行两次insert操作和四次select操作,且每执行一次后都要完成一次commit操作,以上均为正常的业务逻辑操作,无法进一步优化;对压力测试场景增加1ms pacing后,20vu并发复测,数据库磁盘利用率下降到48.9%,平均响应时间为19ms,TPS为628.032笔/秒。    
    
六、外部数据管理平台    
    
1、问题描述: 20个并发执行个人客户信用报告查询申请、个人客户信用报告查询详细信息混合场景10分钟,报“接口运行时异常”错误,且响应时间比较长。    
   问题分析:性能测试环境未铺好,本次是对开发环境进行试压,版本稳定后打包至测试环境。项目组查看后台并经过分析发现,最大线程数是20 ,导致线程池堵塞;计费模块中费用统计同步,配额机制主要统计接口使用次数存在Update操作,导致响应时间比较高。    
   问题解决:项目组调整了如下内容:    
            1.最大线程数由20调为1000;    
            2.计费模块中费用统计由同步调为异步;    
            3.配额机制主要统计接口使用的次数取消了Upadate操作。    
    
2、问题描述:执行个人客户信息报告查询详细信息交易20并发单交易联调测试,报“接口运行时异常”。     
   问题分析:项目组查看后台发现费用流水表被删。    
   问题解决:项目组重建了费用流水表 。    
    
    
七、网联系统    
    
1、问题描述: 执行身份认证及签约交易40并发、60并发单交易试测,响应时间由0.4秒增长至0.55秒,TPS保持在70左右,应用服务器CPU使用率在45%左右,没有明显增加,最大TPS只能达到250左右TPS,资源使用率在60%左右。    
   问题分析:1、项目组分析日志查看日志打印时间间隔,发现日志打印的时间慢。    
             2、根据日志打印定位代码,查看代码块,对代码块进行分析,然后优化接收线程池。    
             3、根据日志情况进行打印日志输出,然后再进行压力测试,发现不打印日志tps能够达到正常值。    
             4、根据不打印日志情况优化日志输出方式,采用log4j输出日志。    
             5、再进压力测试发现单机tps能够达到350。然后再进行log4j版本升级。升级到log4j 2.0版本。     
             6、再进行压力测试,发现单机tps能够达到400以上。    
    
   问题解决:1、优化接收线程池;    
             2、采用log4j 2.0版本输出日志。    
    
2、问题描述: 进行容量测试压测,发现160并发,tps达到400左右,数据库磁盘IO达到70%左右,继续增加并发至180,tps还是维持在500左右,数据库磁盘IO达到80%左右。     
   问题分析:项目组查看后台发现是数据库的配置不足导致的,现在的配置是4C4G,生产上是8C16G,故配置提升至8C8G;数据库版本现在是11g,生产上版本是12C,故版本升级至12C,相关内核参数做了调整,问题得到解决。    
   问题解决:数据库配置由4C4G提升至8C8G,版本由11g升级至12C,数据库内核参数也做了调整,具体oracle 11g内核参数见附件一,oracle 12C 内核参数见附件二。    
    
3、问题描述:进行120并发400TPS的稳定性试压,执行到6小时左右时,数据库CPU达到100%,磁盘IO也达到100%,且数据库内存存在泄漏问题,执行至12小时时,报大量“系统异常错误”,后台报“【信息:表:【EPCC_MSGRGSTR】,数据入库失败,执行存储过程:PRO_EPCC_MSGRGSTR_01执行失败java.sql.SQLException: ORA-01653: 表 EPCC.EPCC_MSGRGSTR 无法通过 8192 (在表空间 EPCC 中) 扩展】”错误。    
   问题分析:1、项目组查看后台发现系统表空间不足,现有是100g磁盘,没有建立表空间,项目组重新建立表空间,磁盘空间扩至300G。    
             2、打印AWR报告发现SQL“select trxctgy from epcc_msgrgstr where rpflg=:1 and INSTGID=:2 and trxid=:3 ” 耗时比较长,项目组经过分析,发现索引“EPCC        ID1_EPCC_MSGRGSTR  Normal  RPFLG, INSTGID, TRXID  N  Y  N  N        tablespace epcc pctfree 10 initrans 2 maxtrans 255 storage ( initial 64k next 1m minextents 1 maxextents unlimited )” 在数据导入数据库时未及时生效。    
   问题解决:1、项目组重新建立表空间,表空间由32G扩充至160G;    
             2、重新建立了索引“EPCC   ID1_EPCC_MSGRGSTR     Normal      RPFLG, INSTGID, TRXID    N     Y     N     N      N     tablespace epcc pctfree 10 initrans 2 maxtrans 255 storage ( initial 64k next 1m minextents 1 maxextents unlimited )”。    
    
    
-------造成数据库繁忙的原因------    
1、对数据库的使用过于低效:错误的查询设计、糟糕的应用程序逻辑、对于数据访问框架的配置不正确    
2、糟糕的数据库设计与数据结构:表的关联、缓慢的存储视图、缺失的或错误的索引、过期的表统计信息    
3、不恰当的数据库配置,例如:内存、磁盘、表空间、连接池等    

转载于:https://www.cnblogs.com/910119yxf/p/10873411.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值