[zeromq-dev] High memory usage (memory leak?)

Martin Hurton hurtonm at gmail.com
Mon Jul 16 00:10:45 CEST 2012


You suggest there are more issues. What are they? Thanks!

- Martin

On Sun, Jul 15, 2012 at 8:00 PM, Stefan de Konink <stefan at konink.de> wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA512
>
> Hi,
>
> We are using ZeroMQ 2.2 and are quite happy about it. We wish we could
> move to ZeroMQ 3 but some outstanding bugs regarding the PubSub
> implementation prevent this.
>
> One of our current mysteries is the enormous high amount of memory our
> pubsub uses. The clients on the other hand consume a very high virtual
> memory amount. (Think in order of 500MB+)
>
> It seems that once in a few weeks we end up with a:
>
> FATAL ERROR: OUT OF MEMORY (yqueue.hpp:54)
>
>
> Our source code is pretty simple - no mallocs from our side what so
> ever and every init is closed; Still if I look to the virtual memory
> and real memory of one of my clients I see:
>
> 146MB virtual
> 56256 real
>
> ...where is this memory spend?
>
>
> Stefan
>
>
>
>
> #include <stdio.h>
> #include <stdlib.h>
> #include <assert.h>
> #include <zmq.h>
>
> int main (int argc, char *argv[]) {
>     if (argc != 3) {
>         printf("%s [receiver] [pubsub]\n\nEx.\n%s tcp://127.0.0.1:7807
> tcp://127.0.0.1:7817\n", argv[0], argv[0]);
>         exit(-1);
>     }
>
>         void *context  = zmq_init (1);
>         void *pubsub   = zmq_socket (context, ZMQ_PUB);
>         void *receiver = zmq_socket (context, ZMQ_PULL);
>
>         zmq_bind (pubsub,   argv[2]);
>         zmq_bind (receiver, argv[1]);
>
>         while (1) {
>                 int64_t more;
>                 size_t more_size = sizeof more;
>                 do {
>                         /* Create an empty 0MQ message to hold the
> message part */
>                         zmq_msg_t part;
>                         int rc = zmq_msg_init (&part);
>                         assert (rc == 0);
>                         /* Block until a message is available to be
> received from socket */
>                         rc = zmq_recv (receiver, &part, 0);
>                         assert (rc == 0);
>                         /* Determine if more message parts are to
> follow */
>                         rc = zmq_getsockopt (receiver, ZMQ_RCVMORE,
> &more, &more_size);
>                         assert (rc == 0);
>                         if (more) {
>                                 zmq_send (pubsub, &part, ZMQ_SNDMORE);
>                         } else {
>                                 zmq_send (pubsub, &part, 0);
>                         }
>                         zmq_msg_close (&part);
>                 } while (more);
>         }
> }
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v2.0.18 (GNU/Linux)
> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
>
> iEYEAREKAAYFAlADBU4ACgkQYH1+F2Rqwn3iVwCeLZGRgTRVVHXVAL9smKLYnEbC
> +LkAoIcWRhK1YylyLUlpkDEtoLgF0qiS
> =Hy+T
> -----END PGP SIGNATURE-----
> _______________________________________________
> zeromq-dev mailing list
> zeromq-dev at lists.zeromq.org
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev



More information about the zeromq-dev mailing list