日常性能遇到的典型问题 | ||||
现象类别 | 典型问题现象描叙 | 问题类别 | 问题定位过程和描叙 | 解决方法或优化建议 |
内存 | 压测一定时间后,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去掉’让业务方 去判断超时 |
日常性能遇到的典型问题
最新推荐文章于 2024-03-26 16:37:18 发布