[zeromq-dev] Memory leak in recv() in Java client

Jon Gifford jon at loggly.com
Tue May 11 19:22:09 CEST 2010


I've been testing the 0MQ java client, and think I've found a leak in the
recv() method. My test setup (on linux) was

message generator => zmq_streamer => message consumer

both the generator and consumer are java. What I saw was that the consumer
memory size was growing at the same rate at which I was sending it messages.
(I.e. I send 1GB of messages, and it grew by 1GB), which jconsole said the
java heap was behaving nicely (i.e. not growing). This suggested a native
leak (i.e. in the JNI or 0MQ code).

Taking a look at JNIEXPORT jbyteArray JNICALL
Java_org_zeromq_ZMQ_00024Socket_recv (JNIEnv *env, jobject obj, jlong flags)
in Socket.cpp, I noticed that the zmq_msg_t message was never cleaned up, so
I added a zmq_close_message(&message) right before returning, and now there
is no growth in the consumer memory size. Here is the change, with a bit of

346    env->SetByteArrayRegion (data, 0, sz, (jbyte*) pd);
348    zmq_msg_close(&message);
350    return data;

Since I've only just (in the last week) started playing with 0MQ, I'm not
100% confident that this is the right "fix", so would appreciate some
feedback from someone with a bit more knowledge.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.zeromq.org/pipermail/zeromq-dev/attachments/20100511/24db011d/attachment.htm>

More information about the zeromq-dev mailing list