性能问题解析及解决方案

在但基准的时候 响应时间超过预期时间  大概率是代码的逻辑处理需要进行优化  查询类的接口慢的话  就是SQL需要进行优化    负载测试的时候响应时间或TPS不达标   可能服务的线程数过小、数据库的连接数 ,服务器数量需要优化 。 负载的时候第一次正常 慢慢响应时间变长  这个就是线程数没有得到释放,线程堆积了,注意看后台的资源利用率,磁盘,等性能支票  。这种可以试着扩充服务器试一下看问题具体在哪里。混合的时候对于过大的TPS就要先进行限制,不达标的从代码、处理逻辑、进行优化。

压测中遇到的性能问题及解决办法:

一、容量测试过程中cpu过高

1、用vmstat实时监控cpu使用情况。很小的压力AP cpu却到了80%多,指标是不能超过60%。

2、分析是use cpu过高还是sys cpu过高,常见的是use cpu使用过高。

3、如果是sys cpu使用过高,先把消耗cpu最多的进程找出来(top命令),再找到该线程下消耗cpu过高的是哪几个线程,再把该线程转换成16进制,再用jstack命令来dump线程栈,看这个线程栈在调用什么东西导致use cpu过高。

二、内存溢出(堆溢出、栈溢出、持久代溢出)
1、堆内存溢出
1)稳定性压测一段时间后,LR报错,日志报java.lang.OutOfMemoryError.Java heap space。
2)用jmap -histo pid命令dump堆内存使用情况,查看堆内存排名前20个对象,看是否有自己应用程序的方法,从最高的查起,如果有则检查该方法是什么原因造成堆内存溢出。
3)如果前20里没有自己的方法,则用jmap -dump来dump堆内存,在用MAT分析dump下来的堆内存,分析导出内存溢出的方法。
4)如果应用程序的方法没有问题,则需要修改JVM参数,修改xms,xmx,调整堆内存参数,一般是增加堆内存。
2、栈内存溢出
1)稳定性压测一段时间后,LR报错,日志报Java.Lang.StackOverflowError。
2)修改jvm参数,将xss参数改大,增加栈内存。
3)栈溢出一定是做批量操作引起的,减少批处理数据量。
 
3、持久代溢出
1)稳定性压测一定时间后,日志报Java.Lang.OutOfMenoryError.PermGen Space。
2)这种原因是由于类、方法描述、字段描述、常量池、访问修饰符等一些静态变量太多,将持久代占满导致持久代溢出。
3)修改jvm配置,将XX:MaxPermSize=256参数调大。尽量减少静态变量。

三、线程死锁
1、容量测试压测一段时间后,LR报连接超时。
2、造成这种现象的原因很多,比如带宽不够,中间件线程池不够用,数据库连接池不够,连接数占满等都会造成连接不上而报超时错误。
3、jstack命令dump线程栈&#x

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值