----- 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]