Hi,
I'm using EMA Java from Scala 2.11.
I `registerClient()` 3,558 RICs at once by the following code:
val client = new MyClient() // sub-class of OmmConsumerClient
val rics = List("/1418.T", ...) // Ordinary stocks in Tokyo Stock Exchange, whose length is 3558
rics.map { ric =>
consumer.registerClient(reqMsg.serviceName("ELEKTRON_DD").name(ric), client)}
Although `MyClient#on*Msg()` have almost empty implementation, my program uses a lot of memory (memory usage of the process is around 6GB on 16GB-memory OSX).
It leads to the following runtime error:
19:17:15.024 [pool-2-thread-1] ERROR c.t.e.a.OmmConsumerImpl - loggerMsg
ClientName: EmaConsumer_1
Severity: Error
Text: Call to rsslReactorDispatchLoop() failed. Internal sysError='0' Error text='channel out of buffers errorId=-4 errorText=channel out of buffers'.
loggerMsgEnd
My questions are:
- Is it usual to consume such a large memory with 3,558 RICs registration?
- If it's unusual, I will use some heap profiler (no idea currently) to detect potential memory leak.
- If it's usual, could you tell me about how much memory would be required to get 3,558 RICs' feed? I appreciate if I can hear some reasonable tuning points.
Thank you.