Merge pull request #196 from infosiftr/total_memory_available_override_value
Utilize total_memory_available_override_value and duplicate less internal RabbitMQ math
This commit is contained in:
commit
ed9a656804
|
|
@ -269,55 +269,46 @@ if [ "$1" = 'rabbitmq-server' ] && [ "$shouldWriteConfig" ]; then
|
||||||
}
|
}
|
||||||
}' /sys/fs/cgroup/memory/memory.limit_in_bytes)"
|
}' /sys/fs/cgroup/memory/memory.limit_in_bytes)"
|
||||||
fi
|
fi
|
||||||
if [ -n "$memTotalKb" ] || [ -n "$memLimitB" ]; then
|
if [ -n "$memLimitB" ]; then
|
||||||
|
# if we have a cgroup memory limit, let's inform RabbitMQ of what it is (so it can calculate vm_memory_high_watermark properly)
|
||||||
|
# https://github.com/rabbitmq/rabbitmq-server/pull/1234
|
||||||
|
rabbitConfig+=( "{ total_memory_available_override_value, $memLimitB }" )
|
||||||
|
fi
|
||||||
|
if [ "${RABBITMQ_VM_MEMORY_HIGH_WATERMARK:-}" ]; then
|
||||||
# https://github.com/docker-library/rabbitmq/pull/105#issuecomment-242165822
|
# https://github.com/docker-library/rabbitmq/pull/105#issuecomment-242165822
|
||||||
vmMemoryHighWatermark=
|
vmMemoryHighWatermark="$(
|
||||||
if [ "${RABBITMQ_VM_MEMORY_HIGH_WATERMARK:-}" ]; then
|
awk '
|
||||||
vmMemoryHighWatermark="$(
|
/^[0-9]*[.][0-9]+$|^[0-9]+([.][0-9]+)?%$/ {
|
||||||
awk -v lim="$memLimitB" '
|
perc = $0;
|
||||||
/^[0-9]*[.][0-9]+$|^[0-9]+([.][0-9]+)?%$/ {
|
if (perc ~ /%$/) {
|
||||||
perc = $0;
|
gsub(/%$/, "", perc);
|
||||||
if (perc ~ /%$/) {
|
perc = perc / 100;
|
||||||
gsub(/%$/, "", perc);
|
|
||||||
perc = perc / 100;
|
|
||||||
}
|
|
||||||
if (perc > 1.0 || perc <= 0.0) {
|
|
||||||
printf "error: invalid percentage for vm_memory_high_watermark: %s (must be > 0%%, <= 100%%)\n", $0 > "/dev/stderr";
|
|
||||||
exit 1;
|
|
||||||
}
|
|
||||||
if (lim) {
|
|
||||||
printf "{ absolute, %d }\n", lim * perc;
|
|
||||||
} else {
|
|
||||||
printf "%0.03f\n", perc;
|
|
||||||
}
|
|
||||||
next;
|
|
||||||
}
|
}
|
||||||
/^[0-9]+$/ {
|
if (perc > 1.0 || perc <= 0.0) {
|
||||||
printf "{ absolute, %s }\n", $0;
|
printf "error: invalid percentage for vm_memory_high_watermark: %s (must be > 0%%, <= 100%%)\n", $0 > "/dev/stderr";
|
||||||
next;
|
|
||||||
}
|
|
||||||
/^[0-9]+([.][0-9]+)?[a-zA-Z]+$/ {
|
|
||||||
printf "{ absolute, \"%s\" }\n", $0;
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
printf "error: unexpected input for vm_memory_high_watermark: %s\n", $0;
|
|
||||||
exit 1;
|
exit 1;
|
||||||
}
|
}
|
||||||
' <(echo "$RABBITMQ_VM_MEMORY_HIGH_WATERMARK")
|
printf "%0.03f\n", perc;
|
||||||
)"
|
next;
|
||||||
elif [ -n "$memLimitB" ]; then
|
}
|
||||||
# if there is a cgroup limit, default to 40% of _that_ (as recommended by upstream)
|
/^[0-9]+$/ {
|
||||||
vmMemoryHighWatermark="{ absolute, $(awk -v lim="$memLimitB" 'BEGIN { printf "%.0f\n", lim * 0.4; exit }') }"
|
printf "{ absolute, %s }\n", $0;
|
||||||
# otherwise let the default behavior win (40% of the total available)
|
next;
|
||||||
fi
|
}
|
||||||
|
/^[0-9]+([.][0-9]+)?[a-zA-Z]+$/ {
|
||||||
|
printf "{ absolute, \"%s\" }\n", $0;
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
printf "error: unexpected input for vm_memory_high_watermark: %s\n", $0;
|
||||||
|
exit 1;
|
||||||
|
}
|
||||||
|
' <(echo "$RABBITMQ_VM_MEMORY_HIGH_WATERMARK")
|
||||||
|
)"
|
||||||
if [ "$vmMemoryHighWatermark" ]; then
|
if [ "$vmMemoryHighWatermark" ]; then
|
||||||
# https://www.rabbitmq.com/memory.html#memsup-usage
|
# https://www.rabbitmq.com/memory.html#memsup-usage
|
||||||
rabbitConfig+=( "{ vm_memory_high_watermark, $vmMemoryHighWatermark }" )
|
rabbitConfig+=( "{ vm_memory_high_watermark, $vmMemoryHighWatermark }" )
|
||||||
fi
|
fi
|
||||||
elif [ "${RABBITMQ_VM_MEMORY_HIGH_WATERMARK:-}" ]; then
|
|
||||||
echo >&2 'warning: RABBITMQ_VM_MEMORY_HIGH_WATERMARK was specified, but current system memory or cgroup memory limit cannot be determined'
|
|
||||||
echo >&2 ' (so "vm_memory_high_watermark" will not be set)'
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$haveSslConfig" ]; then
|
if [ "$haveSslConfig" ]; then
|
||||||
|
|
|
||||||
|
|
@ -269,55 +269,46 @@ if [ "$1" = 'rabbitmq-server' ] && [ "$shouldWriteConfig" ]; then
|
||||||
}
|
}
|
||||||
}' /sys/fs/cgroup/memory/memory.limit_in_bytes)"
|
}' /sys/fs/cgroup/memory/memory.limit_in_bytes)"
|
||||||
fi
|
fi
|
||||||
if [ -n "$memTotalKb" ] || [ -n "$memLimitB" ]; then
|
if [ -n "$memLimitB" ]; then
|
||||||
|
# if we have a cgroup memory limit, let's inform RabbitMQ of what it is (so it can calculate vm_memory_high_watermark properly)
|
||||||
|
# https://github.com/rabbitmq/rabbitmq-server/pull/1234
|
||||||
|
rabbitConfig+=( "{ total_memory_available_override_value, $memLimitB }" )
|
||||||
|
fi
|
||||||
|
if [ "${RABBITMQ_VM_MEMORY_HIGH_WATERMARK:-}" ]; then
|
||||||
# https://github.com/docker-library/rabbitmq/pull/105#issuecomment-242165822
|
# https://github.com/docker-library/rabbitmq/pull/105#issuecomment-242165822
|
||||||
vmMemoryHighWatermark=
|
vmMemoryHighWatermark="$(
|
||||||
if [ "${RABBITMQ_VM_MEMORY_HIGH_WATERMARK:-}" ]; then
|
awk '
|
||||||
vmMemoryHighWatermark="$(
|
/^[0-9]*[.][0-9]+$|^[0-9]+([.][0-9]+)?%$/ {
|
||||||
awk -v lim="$memLimitB" '
|
perc = $0;
|
||||||
/^[0-9]*[.][0-9]+$|^[0-9]+([.][0-9]+)?%$/ {
|
if (perc ~ /%$/) {
|
||||||
perc = $0;
|
gsub(/%$/, "", perc);
|
||||||
if (perc ~ /%$/) {
|
perc = perc / 100;
|
||||||
gsub(/%$/, "", perc);
|
|
||||||
perc = perc / 100;
|
|
||||||
}
|
|
||||||
if (perc > 1.0 || perc <= 0.0) {
|
|
||||||
printf "error: invalid percentage for vm_memory_high_watermark: %s (must be > 0%%, <= 100%%)\n", $0 > "/dev/stderr";
|
|
||||||
exit 1;
|
|
||||||
}
|
|
||||||
if (lim) {
|
|
||||||
printf "{ absolute, %d }\n", lim * perc;
|
|
||||||
} else {
|
|
||||||
printf "%0.03f\n", perc;
|
|
||||||
}
|
|
||||||
next;
|
|
||||||
}
|
}
|
||||||
/^[0-9]+$/ {
|
if (perc > 1.0 || perc <= 0.0) {
|
||||||
printf "{ absolute, %s }\n", $0;
|
printf "error: invalid percentage for vm_memory_high_watermark: %s (must be > 0%%, <= 100%%)\n", $0 > "/dev/stderr";
|
||||||
next;
|
|
||||||
}
|
|
||||||
/^[0-9]+([.][0-9]+)?[a-zA-Z]+$/ {
|
|
||||||
printf "{ absolute, \"%s\" }\n", $0;
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
printf "error: unexpected input for vm_memory_high_watermark: %s\n", $0;
|
|
||||||
exit 1;
|
exit 1;
|
||||||
}
|
}
|
||||||
' <(echo "$RABBITMQ_VM_MEMORY_HIGH_WATERMARK")
|
printf "%0.03f\n", perc;
|
||||||
)"
|
next;
|
||||||
elif [ -n "$memLimitB" ]; then
|
}
|
||||||
# if there is a cgroup limit, default to 40% of _that_ (as recommended by upstream)
|
/^[0-9]+$/ {
|
||||||
vmMemoryHighWatermark="{ absolute, $(awk -v lim="$memLimitB" 'BEGIN { printf "%.0f\n", lim * 0.4; exit }') }"
|
printf "{ absolute, %s }\n", $0;
|
||||||
# otherwise let the default behavior win (40% of the total available)
|
next;
|
||||||
fi
|
}
|
||||||
|
/^[0-9]+([.][0-9]+)?[a-zA-Z]+$/ {
|
||||||
|
printf "{ absolute, \"%s\" }\n", $0;
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
printf "error: unexpected input for vm_memory_high_watermark: %s\n", $0;
|
||||||
|
exit 1;
|
||||||
|
}
|
||||||
|
' <(echo "$RABBITMQ_VM_MEMORY_HIGH_WATERMARK")
|
||||||
|
)"
|
||||||
if [ "$vmMemoryHighWatermark" ]; then
|
if [ "$vmMemoryHighWatermark" ]; then
|
||||||
# https://www.rabbitmq.com/memory.html#memsup-usage
|
# https://www.rabbitmq.com/memory.html#memsup-usage
|
||||||
rabbitConfig+=( "{ vm_memory_high_watermark, $vmMemoryHighWatermark }" )
|
rabbitConfig+=( "{ vm_memory_high_watermark, $vmMemoryHighWatermark }" )
|
||||||
fi
|
fi
|
||||||
elif [ "${RABBITMQ_VM_MEMORY_HIGH_WATERMARK:-}" ]; then
|
|
||||||
echo >&2 'warning: RABBITMQ_VM_MEMORY_HIGH_WATERMARK was specified, but current system memory or cgroup memory limit cannot be determined'
|
|
||||||
echo >&2 ' (so "vm_memory_high_watermark" will not be set)'
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$haveSslConfig" ]; then
|
if [ "$haveSslConfig" ]; then
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue