系统性能问题分析流程
/*
1.业务出现大并发的访问,导致出现性能瓶颈
2.上线后的系统数据库数据日积月累,数据量增加后出现性能瓶颈
3.其它关键环境改变,比如我们常说的网络带宽影响
*/
性能问题影响因素分析
硬件环境
运行环境-数据库和应用中间件
数据库和应用中间件性能调优是另外一个经常出现性能问题的地方。
数据库性能调优
要调整首先就需要对数据库性能进行监控
应用中间件性能分析和调优
其中JVM启动的主要控制参数说明如下:
/*
-Xmx设置最大堆空间
-Xms设置最小堆空间
-XX:MaxNewSize设置最大新生代空间
-XX:NewSize设置最小新生代空间
-XX:MaxPermSize设置最大永久代空间(注:新内存模型已经替换为Metaspace)
-XX:PermSize设置最小永久代空间(注:新内存模型已经替换为Metaspace)
-Xss设置每个线程的堆栈大小
*/
那么这些值究竟设置多大合适,具体来讲:
/*
注意在新的JVM内存模型下已经没有PermSize而是变化为Metaspace,
因此需要考虑Heap内存和Metaspace大小的配比,同时还需要考虑相关的垃圾回收机制是采用哪种类型等。
*/
软件程序性能问题分析
业务系统性能问题扩展思考
对于业务系统的性能优化,除了上面谈到的标准分析流程和分析要素外,再谈下其它一些性能问题引发的关键思考。
上线前的性能测试是否有用
/*
硬件能否完全模拟真实环境?最好的性能测试往往是直接在搭建完成的生产环境进行。
数据量能否模拟实际场景?真实场景往往是多个业务表都已经存在大数据量的积累而非空表。
并发能否模拟真实场景?一个是需要录制复合业务场景,一个是需要多台压测机。
*/
系统本身水平弹性扩展是否完全解决性能问题
/*
单点访问性能正常的时候可以扩展集群来应对大并发状态下的同时访问
单点访问本身性能就有问题的时候,要优先优化单节点访问性能
*/
业务系统性能诊断的分类
/*
操作系统和存储层面
中间件层面(包括了数据库,应用服务器中间件)
软件层面(包括了数据库SQL和存储过程,逻辑层,前端展现层等)
*/
软件代码的问题往往是最不能忽视的一个性能问题点
/*
循环中初始化大的结构对象,数据库连接等
资源不释放导致的内存泄露等
没有基于场景需求来适度通过缓存等方式提升性能
长周期事务处理耗费资源
处理某一个业务场景或问题的时候,没有选择最优的数据结构或算法
*/
通过IT资源监控或APM应用工具来发现性能问题
资源池-》应用层-》业务层
/*
比如在我们最近的项目实施中,结合APM和服务链监控,我们可以快速的发现究竟是哪个服务调用出现了性能问题,
或者快速的定位出哪个SQL语句有验证的性能问题。这个都可以帮助我们快速的进行性能问题分析和诊断。
*/