本方案出自《storm应用实践:实时事务处理之策略》,简略的写了一部分,详细的方法就看书吧
1)集群中工作进程冲突:
解决:通过查看stormUI cluster summary中的free slots是否为零(为零表示新拓扑无法部署,没有可用空进程)
2)拓扑停止或者不执行:
一般是因为没有可用空进程了,可以通过减少现存拓扑在用的工作进程数量或者增加集群总的进程数量(修改jvm默认内存配置/添加工作进程数量(添加端口)或者增加节点)
3)slot或者jvm内存冲突:
通过配置GC日志记录进行日志分析OOM(outofmemary)错误
4)节点间内存冲突
开启内存交换(不考虑传输延迟)
或者降低工作进程使用的总体内存量(减少整体工作进程的数量/降低jvm空间大小)
或者为每个节点增加内存
5)cpu资源冲突:
增强cpu
减少每个工作节点上的工作进程数量来分担jvm上的负载
6)节点间io冲突:
磁盘io
减少磁盘写入/换固态/不写入NFS类型的网络文件系统
网络io
换快网/减少每个节点上的工作进程/增加socket端口数量7)缓冲区溢出:(包括执行器的输入队列、输出队列、工作节点中的对外队列)
通过查看debug入职进行判断。
解决方法一般:
1、调整生产和消耗的比例
2、提升所有拓扑的缓冲区大小
3、提升特定拓扑的缓冲区大小
4、设置spout的最大待定数