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


    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读写分离
  • 相关阅读:
    小白学开发(iOS)OC_ 使用继承来扩充类(2015-08-07)
    UI组件之TextView及其子类(三)ToggleButton和Switch
    C++智能指针--shared_ptr
    HDU 1013 Digital Roots 题解
    对touch事件传递的简单理解
    【LeetCode-面试算法经典-Java实现】【096-Unique Binary Search Trees(唯一二叉搜索树)】
    Cocos2d-x 坐标系
    hdu1518 Square
    servlet3.0新特性
    OGNL表达式
  • 原文地址:https://www.cnblogs.com/zhangwangvip/p/13577780.html
Copyright © 2020-2023  润新知