| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
| |
rabbitmq-cli#207
[#149059849]
|
| |
|
|
|
| |
rabbitmq-cli#207
[#149059849]
|
| |
|
|
| |
rabbit_types:connection_name() is used elsewhere but was not exported.
|
| |\
| |
| | |
Bump Erlang versions in .travis.yml
|
| | |
| |
| |
| |
| | |
Part of #1305.
[#149563549]
|
| | |
| |
| |
| |
| |
| | |
The file included all variable queue code, which was changed
several times. It doesn't make sense to maintain two identical
files, so now all the callbacks are called from rabbit_variable_queue.
|
| | | |
|
| |\ \
| |/
|/| |
|
| | | |
|
| | | |
|
| |\ \
| |/
| |
| |
| | |
Conflicts:
rabbitmq-components.mk
|
| | | |
|
| |\ \
| | |
| | | |
Report vhost status on vhost info
|
| | |\ \
| |/ /
|/| | |
|
| |\ \ \
| | |/
| |/| |
|
| | |\ \
| | | |
| | | |
| | | |
| | | | |
rabbitmq/stable-gm-mem-usage-during-constant-redelivery
Stable GM memory usage during constant redelivery
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
In high throughput scenarios, e.g. `basic.reject` or `basic.nack`,
messages which belong to a mirrored queue and are replicated within a GM
group, are quickly promoted to the old heap. This means that garbage
collection happens only when the Erlang VM is under memory pressure,
which might be too late. When a process is under pressure, garbage
collection slows it down even further, to the point of RabbitMQ nodes
running out of memory and crashing. To avoid this scenario, We want the
GM process to garbage collect binaries regularly, i.e. every 250ms. The
variable queue does the same for a similar reason:
rabbitmq/rabbitmq-server#289
Initially, we wanted to use the number of messages as the trigger for
garbage collection, but we soon discovered that different workloads
(e.g. small vs large messages) would result in unpredictable and
sub-optimal GC schedules.
Before setting `fullsweep_after` to 0, memory usage was 2x higher (400MB
vs 200MB) and throughput was 0.1x lower (18k vs 20k). With this
`spawn_opt` setting, the general collection algorithm is disabled,
meaning that all live data is copied at every garbage collection:
http://erlang.org/doc/man/erlang.html#spawn_opt-3
The RabbitMQ deployment used for testing this change:
* AWS, c4.2xlarge, bosh-aws-xen-hvm-ubuntu-trusty-go_agent 3421.11
* 3 RabbitMQ nodes running OTP 20.0.1
* 3 durable & auto-delete queues with 3 replicas each
* each queue master was defined on a different RabbitMQ node
* every RabbitMQ node was running 1 queue master & 2 queue slaves
* 1 consumer per queue with QOS 100
* 100 durable messages @ 1KiB each
* `basic.reject` operations
```
| Node | Message throughput | Memory usage |
| ------ | -------------------- | -------------- |
| rmq0 | 12K - 20K msg/s | 400 - 900 MB |
| rmq1 | 12K - 20K msg/s | 500 - 1000 MB |
| rmq2 | 12K - 20K msg/s | 500 - 800 MB |
```
[#148892851]
Signed-off-by: Gerhard Lazu <gerhard@rabbitmq.com>
|
| | |/ /
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
We don't want to use the backoff/hibernate feature because we have
observed that the GM process is suspended half of the time.
We really wanted to replace gen_server2 with gen_server, but it was more
important to keep changes in 3.6 to a minimum. GM will eventually be
replaced, so switching it from gen_server2 to gen_server will be soon
redundant. We simply do not understand some of the gen_server2
trade-offs well enough to feel strongly about this change.
[#148892851]
Signed-off-by: Gerhard Lazu <gerhard@rabbitmq.com>
|
| | | | |
|
| | | | |
|
| |\ \ \
| | | |
| | | |
| | | |
| | | | |
rabbitmq/rabbitmq-server-close-connection-on-vhost-down
Close connections when vhost is unavailable (supervision tree is down)
|
| | | | | |
|
| | | | | |
|
| | |\ \ \
| |/ / /
|/| | | |
|
| | | | | |
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
When a node is starting or restarting it can fail to recover a vhost.
The `continue` vhost recovery strategy means that vhosts can ba down if cannot
be recovered. This behaviour should also work for node startup and it should
skip failing vhosts.
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Move non-limit tests from vhost limits suite to vhost suite.
Add tests for connection closure and refuse when vhost
supervisor is down.
[#145106713]
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
If a vhost supervision tree is not active, which can be
a result of an error in message store, refuse connections
to this vhost on the node.
This is a follow-up to [#140841611] [#1158]
[#145106713]
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
In order to be aware if vhost is alive or not, introduce
a rabbit_vhost_process gen_server, which manages recovery and
teardown of a vhost.
Also aliveness of the process can be used to determine a vhost state.
Vhost process termination emits an event to close all the vhost connections.
Addresses [#145106713]
|
| | |_|/
|/| |
| | |
| | |
| | | |
rabbitmq-management#446
[#149398495]
|
| |\ \ \
| | |/
| |/|
| | |
| | |
| | | |
Conflicts:
src/rabbit_amqqueue.erl
src/rabbit_vm.erl
|
| | | | |
|
| | |\ \
| | | |
| | | | |
Do not show queues with deleted vhost.
|
| | |/ /
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
When vhost does not exist for a queue, which reside on
a stopped node, the queue will not be displayed in the 'list_queues'
command output.
When a node goes back up, queues without vhost will be deleted.
[Fixes #1300]
[#149292743]
|
| | |\ \
| | | |
| | | | |
Report a difference between RSS and erlang total memory only if RSS is bigger.
|
| | |/ /
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
RSS can be either bigger than memory reported by `erlang:memory(total)`
or smaller. Make sure we only add positive difference to "other" fraction
in memory breakdown.
Related to 0872a15a050176ab7598bc3d1b21a2d5c5af3052
[addresses #1294]
[#149066379]
|
| |\ \ \
| |_|/
|/| | |
Add function to check if adding queues would exceed limit
|
| |/ / |
|
| |\ \
| | |
| | | |
Enable tracing of messages sent by default when using LG
|
| |/ / |
|
| |\ \
| |/ |
|
| | |
| |
| |
| |
| | |
This hopefully further improves commit
6f374fb48a5cc9972ce0bfcf747faa380e1d1e4d.
|
| | |
| |
| |
| |
| |
| |
| |
| |
| | |
How total amount of memory is computed is an important
piece of information: what the runtime reports and what tools
such as 'ps' report will differ.
http://erlang.org/pipermail/erlang-questions/2012-September/069337.html is
a good source of information on some of the discrepancies.
|
| |\ \
| |/ |
|
| | |
| |
| |
| |
| | |
To make it more likely to pass on resource constrained
environments.
|
| |\ \
| |/ |
|
| | |
| |
| |
| |
| | |
This code runs on server nodes, we can avoid
using ctl commands.
|
| |\ \
| |/
| |
| |
| | |
Conflicts:
test/unit_inbroker_parallel_SUITE.erl
|
| | |\
| | |
| | | |
Add test for set_vm_memory_high_watermark
|
| | | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
This is meant to add a missing integration test that wraps up #1285
It's not a unit test and it can't run in paralle, but
set_disk_free_limit does the same wrong thing. We should either remove
them both or leave them as they are.
[#148470947]
|