常见性能问题分析及解决建议

CPU问题

1、现象

系统访问卡顿,QPS、TPS降低,响应时间延长,网络吞吐量降低;
应用服务器内存和IO正常,CPU利用率增高

2、原因

线程太多,上下文切换太频繁;
GC回收使用了过高的CPU资源;
某段代码陷入了死循环;
锁争用激烈

3、解决方法(主要解决CPU的问题)

考虑使用更高级的CPU代替当前的CPU
对于多CPU,考虑CPU之间的负载分配
考虑在其他体系上设计系统,例如增加前置机,设置并行服务器
定位耗时最高的线程,将需要的线程ID替换成16进制格式,并打印线程的堆栈信息,找到出现问题的代码

内存问题

1、现象

项目内存持续增加;
响应时间成规律性的先增加后回落;
查看应用日志,会出现OutOfMemoryError错误;
GC日志发出FULL GC警告;
系统长时间运行后出现访问错误或宕机

2、原因

启动参数内存值设定得过小;
代码中存在死循环或者循环产生过多重复的对象实体;
集合类中有对对象的引用,使用完后未清空,使JVM不能回收;
使用的第三方软件中有GUB

3、解决办法(主要解决内存的问题)

保证保留列表具有较大的邻接内存块
调整数据块缓冲区大小(用数据块的个数表示)
将最频繁使用的数据保存在存储区中

磁盘IO问题

1、现象

磁盘读写速率、IOPS过高,系统出现卡顿

2、原因

SQL写法、参数配置不合理;
交换机故障,网线老化;
存储针列条带宽不足,缓存不足,Qos限制,RAID级别设置不当

3、解决办法(主要解决磁盘IO的问题)

通过把日志和数据库对象分布在独立的设备上
把不同的数据库放在不同的硬盘上

数据库问题

1、现象

QPS、TPS降低,CPU使用率超高导致宕机;
磁盘IO过高,网卡IO被占满

2、原因

SQL查询速度慢,语句效率低下;
服务器硬件性能差;
表数据文件巨大,表单超过千万行;
资源锁定造成数据库事务超时,数据库死锁;

3、解决办法(主要解决数据库的问题)

定位资源占用较大的事务并做出必要的优化或调整
定位锁冲突,修改锁冲突发生严重的应用逻辑
对规模较大的数据或者无法通过一般优化解决的锁冲突进行分布
分表分库:减少表单的记录条数,减少数据查询所需的时间,提高数据库的吞吐;对数据库进行拆分,提高数据库的写入能力
考虑采用分布式的cache层
实现MySQL数据库异步查询,MySQL读写分离

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个双鱼座的测开

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值