@@ -269,55 +269,46 @@ if [ "$1" = 'rabbitmq-server' ] && [ "$shouldWriteConfig" ]; then
269
269
}
270
270
}' /sys/fs/cgroup/memory/memory.limit_in_bytes) "
271
271
fi
272
- if [ -n " $memTotalKb " ] || [ -n " $memLimitB " ]; then
272
+ if [ -n " $memLimitB " ]; then
273
+ # if we have a cgroup memory limit, let's inform RabbitMQ of what it is (so it can calculate vm_memory_high_watermark properly)
274
+ # https://github.com/rabbitmq/rabbitmq-server/pull/1234
275
+ rabbitConfig+=( " { total_memory_available_override_value, $memLimitB }" )
276
+ fi
277
+ if [ " ${RABBITMQ_VM_MEMORY_HIGH_WATERMARK:- } " ]; then
273
278
# https://github.com/docker-library/rabbitmq/pull/105#issuecomment-242165822
274
- vmMemoryHighWatermark=
275
- if [ " ${RABBITMQ_VM_MEMORY_HIGH_WATERMARK:- } " ]; then
276
- vmMemoryHighWatermark=" $(
277
- awk -v lim=" $memLimitB " '
278
- /^[0-9]*[.][0-9]+$|^[0-9]+([.][0-9]+)?%$/ {
279
- perc = $0;
280
- if (perc ~ /%$/) {
281
- gsub(/%$/, "", perc);
282
- perc = perc / 100;
283
- }
284
- if (perc > 1.0 || perc <= 0.0) {
285
- printf "error: invalid percentage for vm_memory_high_watermark: %s (must be > 0%%, <= 100%%)\n", $0 > "/dev/stderr";
286
- exit 1;
287
- }
288
- if (lim) {
289
- printf "{ absolute, %d }\n", lim * perc;
290
- } else {
291
- printf "%0.03f\n", perc;
292
- }
293
- next;
294
- }
295
- /^[0-9]+$/ {
296
- printf "{ absolute, %s }\n", $0;
297
- next;
279
+ vmMemoryHighWatermark=" $(
280
+ awk '
281
+ /^[0-9]*[.][0-9]+$|^[0-9]+([.][0-9]+)?%$/ {
282
+ perc = $0;
283
+ if (perc ~ /%$/) {
284
+ gsub(/%$/, "", perc);
285
+ perc = perc / 100;
298
286
}
299
- /^[0-9]+([.][0-9]+)?[a-zA-Z]+$/ {
300
- printf "{ absolute, \"%s\" }\n", $0;
301
- next;
302
- }
303
- {
304
- printf "error: unexpected input for vm_memory_high_watermark: %s\n", $0;
287
+ if (perc > 1.0 || perc <= 0.0) {
288
+ printf "error: invalid percentage for vm_memory_high_watermark: %s (must be > 0%%, <= 100%%)\n", $0 > "/dev/stderr";
305
289
exit 1;
306
290
}
307
- ' <( echo " $RABBITMQ_VM_MEMORY_HIGH_WATERMARK " )
308
- ) "
309
- elif [ -n " $memLimitB " ]; then
310
- # if there is a cgroup limit, default to 40% of _that_ (as recommended by upstream)
311
- vmMemoryHighWatermark=" { absolute, $( awk -v lim=" $memLimitB " ' BEGIN { printf "%.0f\n", lim * 0.4; exit }' ) }"
312
- # otherwise let the default behavior win (40% of the total available)
313
- fi
291
+ printf "%0.03f\n", perc;
292
+ next;
293
+ }
294
+ /^[0-9]+$/ {
295
+ printf "{ absolute, %s }\n", $0;
296
+ next;
297
+ }
298
+ /^[0-9]+([.][0-9]+)?[a-zA-Z]+$/ {
299
+ printf "{ absolute, \"%s\" }\n", $0;
300
+ next;
301
+ }
302
+ {
303
+ printf "error: unexpected input for vm_memory_high_watermark: %s\n", $0;
304
+ exit 1;
305
+ }
306
+ ' <( echo " $RABBITMQ_VM_MEMORY_HIGH_WATERMARK " )
307
+ ) "
314
308
if [ " $vmMemoryHighWatermark " ]; then
315
309
# https://www.rabbitmq.com/memory.html#memsup-usage
316
310
rabbitConfig+=( " { vm_memory_high_watermark, $vmMemoryHighWatermark }" )
317
311
fi
318
- elif [ " ${RABBITMQ_VM_MEMORY_HIGH_WATERMARK:- } " ]; then
319
- echo >&2 ' warning: RABBITMQ_VM_MEMORY_HIGH_WATERMARK was specified, but current system memory or cgroup memory limit cannot be determined'
320
- echo >&2 ' (so "vm_memory_high_watermark" will not be set)'
321
312
fi
322
313
323
314
if [ " $haveSslConfig " ]; then
0 commit comments