
# Storm性能调优
#### 操作场景
通过调整Storm参数设置，可以提升特定业务场景下Storm的性能。
本章节适用于MRS 3.x及后续版本。
修改服务配置参数，请参考[修改集群服务配置参数](https://support.huaweicloud.com/cmpntguide-mrs/mrs_01_2125.html)。
#### 拓扑调优
当需要提升Storm数据量处理性能时，可以通过拓扑调优的操作提高效率。建议在可靠性要求不高的场景下进行优化。
表1调优参数 
| 配置参数                          | 默认值  | 调优场景                                                                                                                                                                 |
|:---|:---|:---|
| topology.acker.executors      | null | Acker的执行器数量。当业务应用对可靠性要求较低，允许不处理部分数据，可设置参数值为"null"或"0"，以关闭Acker的执行器，减少流控制，不统计消息时延，提高性能。                                                                               |
| topology.max.spout.pending    | null | Spout消息缓存数，仅在Acker不为0或者不为null的情况下生效。Spout将发送到下游Bolt的每条消息加入到pending队列，待下游Bolt处理完成并确认后，再从pending队列移除，当pending队列占满时Spout暂停消息发送。增加pending值可提高Spout的每秒消息吞吐量，提高性能，但延时同步增加。 |
| topology.transfer.buffer.size | 32   | 每个worker进程Distuptor消息队列大小，建议在4到32之间，增大消息队列可以提升吞吐量，但延时可能会增加。                                                                                                          |
| RES_CPUSET_PERCENTAGE         | 80   | 设置各个节点上的Supervisor角色实例（包含其启动并管理的Worker进程）所使用的物理CPU百分比。根据Supervisor所在节点业务量需求，适当调整参数值，优化CPU使用率。                                                                        |
   
#### JVM调优
当应用程序需要处理大量数据从而占用更多的内存时，存在worker内存大于2GB的情况，推荐使用G1垃圾回收算法。
表2调优参数 
| **配置参数**       | **缺省值**                                                                                                                                                                                                                                                            | **调优场景**                                                                              |
|:---|:---|:---|
| WORKER_GC_OPTS | -Xms1G -Xmx1G -XX:+UseG1GC -XX:+PrintGCDetails -Xloggc:artifacts/gc.log -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=1M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=artifacts/heapdump | 应用程序内存中需要保存大量数据，worker进程使用的内存大于2G，那么建议使用G1垃圾回收算法，可修改参数值为"-Xms2G -Xmx5G -XX:+UseG1GC"。 |
   
