I have a usecase where we are storing byte array into one of the OFFHEAP
ATOMIC cache. Multiple threads keep on appending bytes to it using remote
operation (Entry processor / invoke call). 

Below is the logic for remote operation.

if (mutableEntry.exists()) {
        MyObject m = (MyObject)mutableEntry.getValue();
        byte[] bytes = new byte[m.getContent().length +
        System.arraycopy(m.getContent(), 0, bytes, 0, m.getContent().length);
        System.arraycopy(newContent.getContent(), 0, bytes,
} else {

We tested by adding about 25MB of content.

What we have seen is -
1. In 8 threads test we have seen average time for Invoke() is 36ms.
2. Out of total time taken to execute Invoke(), 50% time taken by above
remote logic. Where does other 50% spend? Probably just to invoke the

What can we tune here? We are considering InvokeAll(), any more ideas?

If we increase this to 250MB we have seen a very slow performance and after
hours it goes Out-of-memory, setOffHeapMaxMemory(0) does not help on 32GB

We are using Ignite 1.9, Java 1.8, Parallel GC and app JVM is 4GB.
Unfortunately, we can not upgrade Ignite version as of now.


Sent from: http://apache-ignite-users.70518.x6.nabble.com/

Reply via email to