性能优化是降低成本的手段之一,每年大促前业务平台都会组织核心链路上的应用做性能优化,一方面提升系统性能,另外一方面对腐化的代码进行清理。现结合业务平台性能优化的经验,探讨一下性能优化的思路及常用工具及手段。性能优化本质上是对资源的合理利用,将更珍贵的资源用在更重要的业务上,从而实现资源的充分利用,资源的合理利用。性能优化的对象包括业务运行的容器、业务依赖的中间件、业务依赖的数据库存储的优化,性能优化包括两部分:一、发现需要性能优化的点;二、改造代码设计实现性能优化;
-
-
CPU的开销,有限的cpu无法支撑更大的业务 (性能问题)
-
CPU利用不充分,有限的CPU,无法更好的支撑业务(RT问题)
-
一、发现需要性能优化的点
对于业务容器来说,需要性能优化的点,往往是对系统开销最大的业务方法,这部分代码功能上并没有任何问题,但在性能上并不是最优,在资源比较充足的情况下,这部分逻辑并不会导致性能问题,但当系统压力比较大,或者业务流量比较高的情况下,这部分就会成为压力最大的点。
1) 放大系统的流量
将流量在部分容器上做放大,利用工具采集系统中的堆栈及性能数据。放大系统流量的情况下,需要提前关闭应用及容器的限流,可以利用Sentinel脚本调整。
### 取消限流 2.X
curl http://localhost:8719/switchSet?value=false
### 取消限流 3.X
curl http://localhost:8718/setSwitch?value=false
一、Duct引流验证
Duct引流, duct调整某一台机器的CS权重,将其他容器的流量引流到对应的ip上,从而实现压力的放大。
二、Amazon构造压测数据验证
Amazon压测,根据特定的业务场景,构造压测压测数据,压测模型,在gray4环境中打一部分压测流量,利用压测流量将系统的负载打高。Amazon更适用于大促场景下的性能优化,能确定某些接口的比例,及场景的比例。
2) 利用工具采集系统热点
系统负载流量增加后,各个环节的系统性能消耗都会被放大,此时利用工具可以分析系统的性能情况。系统分析工具会带来系统压力增加,非必要情况下,尽量在隔离环境统计数据。
Arthas性能数据采集
Arthas提供了非常多的工具脚本,其中一部分数据组合起来使用,可以很方便的辅助做性能分析及线上问题排查,这里对其中常用的指令及使用场景做汇总。
安装方式:curl -sLk http://ops.jm.taobao.org:9999/pandora-web/arthas/install.sh | sh
图 1.1 Arthas指令集合列表
性能分析及问题分析工具说明
指令 |
说明 |
性能分析及问题排查的场景 |
classloader |
查看当前JVM下ClassLoader的列表及加载的实例统计信息 |
|
jad |
反编译 |
|
getstatic |
获取静态字段的值 |
|
stack |
从当前方法点打印堆栈 |
|
trace |
从当前方法下钻 |
|
watch |
查看方法调用的参数及返回值 |
|
options |
Arthas的一些选项 |
|
logger |
打印日志相关的信息 |
|
profiler |
内部使用了Async Profiler工具,可以用来采集内存、cpu、锁、cache miss等火焰图数据 |
|