1、基于版本号为1.0.2
可以从UI观看当前的WORKER相关JVM配置 如图;
上面是jvm的大小设置
上面看到的是832M,是因为默认的768M+logwriter的64M
2、修改对应参数可以在storm.yaml中,但是需要重启supervisor
也可以在代码中用api设置,如下
/** 调整分配给每个 worker 的内存 */
conf.put(Config.WORKER_HEAP_MEMORY_MB, 1024);
conf.put(Config.TOPOLOGY_WORKER_MAX_HEAP_SIZE_MB, 4000);
说明worker是真正的分配是在执行 storm jar XXX 之后分配的.
默认worker.childopts配置了heapdump可供分析
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=artifacts/heapdump
当发生oom的时候去具体的supervisor的具体端口下载heapdump文件,再分析原因。
分析我直接使用的是jdk自带的visualvm
1、打开后选择文件-装载,类型为堆快照
2、 选择 类 类型,在下面输入类过滤器 com 等
可以看到里面具体的大量的是什么实例。
我这边看到的都是tupl中的数据,因为上游速度快,下游速度慢,导致大量的数据即实例在缓存中导致oom