日常性能遇到的典型问题

日常性能遇到的典型问题

现象类别

典型问题现象描叙

问题类别

问题定位过程和描叙

解决方法或优化建议

内存

压测一定时间后,RabbitMQ内存过高。

涉及接口:充值接口

代码

定位问题:代码问题。RabbitMQ只有生产者队列,没有消费者队列,这就导致大量数据堆积,占用内存。

增加消费者,对生产者和消费者进行平衡,避免数据堆积。

CPU

压测一定时间后,Tomcat启动CUP超负载,最后提示内存溢出。

涉及接口:充值接口

代码

定位问题:代码问题。Tomacat启动时读取Redis中有大量压测数据导致Tomcat启动失败。

修改代码,Tomcat启动时不加载全部Redis中的数据。

CPU

数据库的CPU,接近满负荷运行

数据库

查看慢查询结果,发现SQL语句花费时间较长,且无索引

数据添加和优化索引

CPU

MySql服务器的多核CPU的iowait一直大于20%,并且都集中在CPU0这一个核上,发布不均匀。

数据库

进过DBA的检查,怀疑是数据库的版本问题,在另一台数据库服务器上做测试实验,正常

经过DBA的检查,后来重新安装了MySql版本,从原来的tar包安装5.6.22版本改为二进制安装的5.6.30版本

CPU

MySQL服务器的

CPU接近满负荷

配置

大部分语句在SELECT count

(*)FROM cardpIˉofile

开启MySQL的缓存功能

CPU

测试获取token业

务时’并发线程数

200, TPS低于10’

CPU消耗超过95%

代码

查看发现TPS过低,业务处理

时间久’主要消耗在登录加密

过程中

解决方法:

·将写操作改为异步;

·减小加密算法的强度’TPS

可达到300;

·添加用户信息缓存;

·减少存放Redjs的键值

数量

CPU

数据上报接□稳定

性测试过程中,CPU

利用率会持续升高

配置

定位问题: Sto∏nSpout没有

开启限速机制’导致CPU利

用率持续升高

开启StoImSpout限速机制

慢查询

数据库慢查询日志中频繁出现相同的几句SQL语句。

涉及接口:充值接口

数据库

定位问题:数据库问题。做数据插入操作时会同时进行3张表的查询,导致较多慢查询出现

将数据缓存到Redis中,增加了相关表的索引

内存

堆溢出

配置

java.lang.OutOfMemoryError:Java heap space

优化建议:通过ˉXmI1(最小

值)、—XmS(初始值)、ˉXmx

(最大值)参数手动设置堆的

大小

内存

PermGenSpace溢

出(永久代厩滞出、

运行时常量池溢出)

配置

java.lang.OutOfMemoryError:PermGen space

优化建议:通过MaxPe∏nSizc

参数设置PermGenspace大小

内存

栈溢出(虚拟机栈

溢出、本地方法栈

溢出)

配置

java.lang.StackOverflowError

优化建议:通过Xss参数调整

磁盘

交换区利用率过高

涉及接口:接口充值

配置

定位问题:系统配置问题。系统参数swapness为默认,当内存用到一定程度会自动利用交换区

修改了系统参数swapness=10

慢查询

测试邀请用户业务

时’数据库日志中查

看到慢查询语句′查

询时间超过lS

数据库

查看慢查询结果’发现SQL

语句花费时间较长

解决方法:

· 优化了邀请单人加入的逻

辑;

·异步处理发短信、推送通讯

录变更、同步系统群逻辑

慢查询

压测获取某列表业

务时,TPS低’数据

库存在慢查

数据库

数据库慢查询日志中输出慢

查询语句’查询时间超过2S

解决方法:

·增加查询缓存;

·优化查询语句,去除统计宇

段的计算,改为入库时统计

其他

10个并发情况下,响应时间过长。

涉及接口:留存用户趋势情况查询、回访用户趋势情况查询(查询接口)

数据库

定位问题:数据库SQL语句问题。

添加数据库慢查询后,发现SQL语句耗时并不是很久,但接口总体耗时就,打印日志发现SQL语句个数较多

合并SQL语句,把多次查询获取数据改成通过一个SQL语句来查询获得数据,减少数据库查询次数

其他

性能业务指标的TPS超级小,基本上只有0.8

配置

应用服务器内存使用到交换区,CPU满了,FGC频繁

_开始默认启动该jar包时,

没加参数°默认的永久代区为

98MB

解决万法: javaˉXX:Pe∏nSjze=

l28MˉXX:MaxPe【mSjze=5l2mˉ

Xmsl536MˉXmxl536MˉX∏m

l024M〕aL/release/otacmˉservlce

ˉjmplˉ0.0.1ˉSNAPSHOT」ar

其他

出现一定量的服务

器异常的请求

配置

发现MySQL很多连接处理

WAITⅡ‖G状态’导致Dubbo

的请求超时

增大MySQL的连接数

其他

测试获取我的列表

业务时, TPS小于

100’ CPU存在波

动’Redls内存不断

消耗完

代码

查看Redis内存不断消耗后,

定位到Rcdis中操作过多’键

值不断增加

减少Redjs操作’增加缓存’

TPS可达到500以上,接着将

未读数量、附件数量等放入统

一的Redjs键中’避免循环操

作Redis

其他

压测并发线程数200

注册业务时’用户信

息同步帅emire’错

误显示为主键冲突

代码

在批量同步用户信息至

Openhre时才发现此现象,

单个用户导入并没有问题,进

—步查看代码中错误输出’得

知为计算机编码问题引起

解决方法:问题主要是由于部

署多台服务器时’生成主键的

方法需做分布式同步’通过增

加计算机编码来解决

其他

压测并发线程数

200创建某业务’压

测lmin后请求无法

发送,服务器返回

500内部错误

配置

性能测试环境中网关配置为默

认配置’默认单个模块的最大

并发数量为I0

根据单台性能测试需求修改为

500’修改参数: eurekayqˉmodˉ

coIpsemaphoIe.maxSemaP

hoI℃←500

其他

Redis服务器上Ping操作频繁

配置

压测时Redjs服务器内存消耗

不断升高,使用命令jl]fo

commandstats查看cmdstat

-pmgc【dls=263354524, usec=

484208487’ usec-peLcall=l.84

中pj∏g操作频繁

修改应用服务器中Redis配

置项redispIopeITjes’将redjs

pooltestOnBorrow=Uue和redis,

pooltestOr1Retum=∏ue中的hue

改为false

其他

证书申请流程’达

到_定并发后, 3%

左石的pl0上行处

理异常’平台日志

打印空指针

代码

并发时’上行的4条pl0缓

存中可能还没放进去就

GET’导致GET不到

当GET不到时’添加等待时间

其他

行之后缓存会清理掉,而此

时平台侧还没处理完流程’

依赖缓仔数据’所以报错

签名认证流程’签

名认证响应上行推

送失败’报出异常

代码

模拟网关上行响应较快’上

行之后缓存会清理掉,而此

时平台侧还没处理完流程’

依赖缓仔数据’所以报错

不主动删除缓存’让缓存I0mm

后自动生效

其他

签名认证流程响应

时间平均在lS以上’

响应时间性能不达标

代码

签名短信发送完成之后等待

了ls’导致响应时间平均在lS

以上

去掉等待时间

其他

签名认证流程’压

测脚本执行几分钟

后’错误率l00%’

返回500错误’应

用服务器执行任何

命令都不能分配内

存,但是服务器内

存使用率并不高

代码

签名请求时’每个请求都启

动了_个TjmefIhsk’根据设

置的超时时间进行等侍响

应,使并发请求时间长了之

后’进程过多导致分配失败

将TimerTnsk去掉’让业务方

去判断超时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值