----- Original Message -----
> On Thu, May 1, 2014 at 4:28 PM, Gordon Sim <[email protected]> wrote:
> 
> > On 05/01/2014 08:55 PM, Rafael Schloming wrote:
> >
> >> On Thu, May 1, 2014 at 3:42 PM, Michael Goulish <[email protected]>
> >> wrote:
> >>
> >>> I tried firing up my messenger-based receivers, each subscribing to 100
> >>> addresses, then 200, 300, 400, 500.  The results are consistent across
> >>> that range, and show that each extra address costs 115 KB.  ( Looking
> >>> only at resident-set size. )
> >>>
> >>> So when I tried to do a total of 1,000,000 addrs on one box, I did
> >>> indeed overwhelm my memory.  That would come to 115 GB, which
> >>> would have been more than double my physical mem.
> >>>
> >>> Please note I did not actually send any messages.  A router was running
> >>> for these receivers to attach to, but no senders were running.
> >>>
> >>> Does 115 KB per subscribed addr seem fairly reasonable?
> >>>
> >>>
> >> No, that seems quite excessive. Can you trace where the memory is actually
> >> coming from?
> >>
> >
> > Just for comparison, a qpid::messaging process with 1000 subscriptions
> > over AMQP 1.0 uses 48MB on my laptop. A similar process using AMQP 0-10
> > uses 8MB.
> 
> 
> Did you also have 1000 sessions, or were all the subscriptions on a single
> session?
> 
> --Rafael
> 



How do I do multiple sessions?
I think I only have one.

here, look:



int
main(int argc, char** argv)
{
  size_t bufsize = BUFSIZE;
  char buffer [ BUFSIZE ];
  char addr [ 1000 ];
  pn_message_t   * message;
  pn_messenger_t * messenger;
  pn_data_t      * body;

  int const how_many_addrs = atoi(argv[4]);


  int my_first_addr = atoi ( argv[3] );
  char * addrs [ how_many_addrs ];

  for ( int i = 0; i < how_many_addrs; ++ i )
  {
    addrs[i] = (char *) malloc ( 100 );
    sprintf ( addrs[i],
              "amqp://%s:%s/mick/%d",
              argv[1],
              argv[2],
              my_first_addr + i
            );
  }


  message = pn_message();
  messenger = pn_messenger ( NULL );

  pn_messenger_start(messenger);

  for ( int i = 0; i < how_many_addrs; ++ i )
  {
    pn_messenger_subscribe ( messenger, addrs[i] );
  }
  fprintf ( stderr, "subscribed to %d addrs\n", how_many_addrs );

  #ifdef EXPLICITLY_ACCEPT
  pn_messenger_set_incoming_window ( messenger, 10 );
  #endif

  int message_count = 0;

  fprintf ( stderr, "receiver |%d| starting.\n", my_first_addr );

  #if 0
  // remove this code for mem testing.  no one is sending messages.
  while ( 1 )
  {
    pn_messenger_recv ( messenger, BUFSIZE );
    pn_messenger_get ( messenger, message );
    #ifdef EXPLICITLY_ACCEPT
    pn_tracker_t tracker = pn_messenger_incoming_tracker ( messenger );
    pn_messenger_accept ( messenger, tracker, 0 );
    #endif
    ++ message_count;

    // fprintf ( stderr, "receiver |%d| got msg %d.\n", my_first_addr, 
message_count );

    if ( message_count >= how_many_addrs )
    {
      break;
    }
  }
  #endif

  fprintf ( stderr, "receiver |%d| complete: %d messages.\n", my_first_addr, 
how_many_addrs );
  print_time ( );

  pn_messenger_stop(messenger);
  pn_messenger_free(messenger);

  return 0;
}




---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to