You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@storm.apache.org by Indra Nath Bardhan <in...@gmail.com> on 2014/05/25 09:50:06 UTC
High CPU Usage while processing tuples
We have been using Storm to port over our legacy ingestion framework to
Storm.
However, we have been seeing a very high CPU usage (~ 95%) everytime tuples
are being processed. This happens even under a very low input to Spout (200
per/s) The idle CPU usage remains well below ~10%.
*Below are my m/c configuration: 24 core box, and we see almost all cores
max'ed out during high CPU*
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 24
On-line CPU(s) list: 0-23
Thread(s) per core: 2
Core(s) per socket: 6
CPU socket(s): 2
NUMA node(s): 2
Vendor ID: GenuineIntel
CPU family: 6
Model: 45
Both supervisor and workers run on the same m/c.
Running Java flight recorder indicates that it is spending a lot of time,
inside the BlockWaitingStrategy.waitFor() method. Below is a snapshot.Many
of the threads in "storm-user" also mention the same issue.
[image: Inline image 1]
Below are the configs with which I tried.
"topology.worker.childopts": "-Xmx2048m -Xms2048m",
"topology.executor.send.buffer.size": 1024,
"topology.executor.receive.buffer.size": 1024,
"topology.receiver.buffer.size": 8,
"topology.transfer.buffer.size": 32,
"topology.sleep.spout.wait.strategy.time.ms": 1000
- Already tried increasing number of workers, but the same CPU starving
occurs.
- Also tried a high executor buffer size i.e., 262144 assuming that the
executor buffers are getting filled up, due to which we have waitFor()
calls.
- Note that the bolts are processing intensive with a fair socket i/o,
but we ideally do not expect the CPU to spike so much for the processing,
and as indicated by the FlightRecorder graph almost 72% of method calls are
for the BlockWaitingStrategy.waitFor() call.
Please suggest how we can fix this.
Thanks,
Indra