You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@qpid.apache.org by "Alan Conway (JIRA)" <ji...@apache.org> on 2017/02/23 18:52:44 UTC

[jira] [Comment Edited] (QPID-7677) [C++ broker] broker requires much more memory for AMQP1.0 subscription than for 0-10 one

    [ https://issues.apache.org/jira/browse/QPID-7677?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15881009#comment-15881009 ] 

Alan Conway edited comment on QPID-7677 at 2/23/17 6:52 PM:
------------------------------------------------------------

Attached shell script [#memdiff.sh] used to calculate the memory differences for various settings of --session-max-unacked. Running repeatedly gives quite consistent results. The VSIZE results are not very consistent as they depend a lot more on the detailed state of the process heap, but it they don't contradict the RSS results.


was (Author: aconway):
Attached shell script used to calculate the memory differences for various settings of --session-max-unacked. Running repeatedly gives quite consistent results. The VSIZE results are not very consistent as they depend a lot more on the detailed state of the process heap, but it they don't contradict the RSS results.

> [C++ broker] broker requires much more memory for AMQP1.0 subscription than for 0-10 one
> ----------------------------------------------------------------------------------------
>
>                 Key: QPID-7677
>                 URL: https://issues.apache.org/jira/browse/QPID-7677
>             Project: Qpid
>          Issue Type: Improvement
>          Components: C++ Broker
>    Affects Versions: 0.32
>            Reporter: Pavel Moravec
>              Labels: memory
>         Attachments: memdiff.sh
>
>
> Having an AMQP 1.0 consumer of a queue increases memory usage of qpidd by much more than having an AMQP 0-10 consumer - the difference is approx. 0.5MB.
> This affects scalable usage of the broker, where having thousands of 1.0 consumers require gigabytes of memory.
> Trivial test:
> {code}
> qpid-config add queue qqq
> for i in $(seq 1 10); do qpid-receive -a qqq -f & sleep 0.1; done
> # this added small 26kB VSZ and 75kB RSS per one consumer/receiver
> for i in $(seq 1 10); do qpid-receive -a qqq -f --connection-options "{protocol:'amqp1.0'}" & sleep 0.1; done
> # this added 640kB VSZ and 805kB RSS per one consumer/receiver
> {code}
> Better test: have multiple consumers on the same AMQP connection (I can provide such program in case of interest).
> Running such scenario under valgrind/massif showed the extra memory is consumed by:
> ->91.90% (143,361,792B) 0x5D544F1: qpid::broker::amqp::OutgoingFromQueue::OutgoingFromQueue(qpid::broker::Broker&, std::string const&, std::string const&, boost::shared_ptr<qpid::broker::Queue>, pn_link_t*, qpid::broker::amqp::Session&, qpid::sys::OutputControl&, qpid::broker::SubscriptionType, bool, bool) (Outgoing.h:57)
> And really, when I changed in:
> https://github.com/apache/qpid-cpp/blob/master/src/qpid/broker/amqp/Outgoing.cpp#L68
> the "deliveries(5000)" to "deliveries(50)", memory consumption dramatically decreased.
> I don't understand this part of code, but please make the "CircularArray<Record> deliveries(5000)" more memory efficient.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@qpid.apache.org
For additional commands, e-mail: dev-help@qpid.apache.org