Skip to content

Commit 5069300

Browse files
committed
Adjust "vm_memory_high_watermark" code to be more forgiving/strict about bad data (such as a memory limit of zero)
1 parent 2720de9 commit 5069300

File tree

2 files changed

+40
-24
lines changed

2 files changed

+40
-24
lines changed

3.6/alpine/docker-entrypoint.sh

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -253,17 +253,27 @@ if [ "$1" = 'rabbitmq-server' ] && [ "$shouldWriteConfig" ]; then
253253
)
254254

255255
# determine whether to set "vm_memory_high_watermark" (based on cgroups)
256-
if [ -r /sys/fs/cgroup/memory/memory.limit_in_bytes ] && [ -r /proc/meminfo ]; then
257-
memLimitB="$(< /sys/fs/cgroup/memory/memory.limit_in_bytes)"
258-
memLimitKb="$(( memLimitB / 1024 ))"
259-
256+
memTotalKb=
257+
if [ -r /proc/meminfo ]; then
260258
memTotalKb="$(awk -F ':? +' '$1 == "MemTotal" { print $2; exit }' /proc/meminfo)"
261-
262-
if [ "$memLimitKb" -gt "$memTotalKb" ]; then
259+
fi
260+
memLimitB=
261+
memLimitKb=
262+
if [ -r /sys/fs/cgroup/memory/memory.limit_in_bytes ]; then
263+
memLimitB="$(< /sys/fs/cgroup/memory/memory.limit_in_bytes)"
264+
if [ "$memLimitB" = '0' ]; then
265+
# it appears that "WARNING: No kernel memory limit support" leads to "/sys/fs/cgroup/memory/memory.limit_in_bytes" containing the value "0"
263266
memLimitB=
264-
memLimitKb=
265267
fi
266-
268+
if [ -n "$memLimitB" ]; then
269+
memLimitKb="$(( memLimitB / 1024 ))"
270+
if [ -n "$memTotalKb" ] && [ "$memLimitKb" -gt "$memTotalKb" ]; then
271+
memLimitB=
272+
memLimitKb=
273+
fi
274+
fi
275+
fi
276+
if [ -n "$memTotalKb" ] || [ -n "$memLimitB" ]; then
267277
# https://github.com/docker-library/rabbitmq/pull/105#issuecomment-242165822
268278
vmMemoryHighWatermark=
269279
if [ "${RABBITMQ_VM_MEMORY_HIGH_WATERMARK:-}" ]; then
@@ -310,10 +320,8 @@ if [ "$1" = 'rabbitmq-server' ] && [ "$shouldWriteConfig" ]; then
310320
rabbitConfig+=( "{ vm_memory_high_watermark, $vmMemoryHighWatermark }" )
311321
fi
312322
elif [ "${RABBITMQ_VM_MEMORY_HIGH_WATERMARK:-}" ]; then
313-
echo >&2 'warning: RABBITMQ_VM_MEMORY_HIGH_WATERMARK was specified, but one of the following is not readable:'
314-
echo >&2 ' - /sys/fs/cgroup/memory/memory.limit_in_bytes'
315-
echo >&2 ' - /proc/meminfo'
316-
echo >&2 '(so "vm_memory_high_watermark" will not be set)'
323+
echo >&2 'warning: RABBITMQ_VM_MEMORY_HIGH_WATERMARK was specified, but current system memory or cgroup memory limit cannot be determined'
324+
echo >&2 ' (so "vm_memory_high_watermark" will not be set)'
317325
fi
318326

319327
if [ "$haveSslConfig" ]; then

3.6/debian/docker-entrypoint.sh

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -253,17 +253,27 @@ if [ "$1" = 'rabbitmq-server' ] && [ "$shouldWriteConfig" ]; then
253253
)
254254

255255
# determine whether to set "vm_memory_high_watermark" (based on cgroups)
256-
if [ -r /sys/fs/cgroup/memory/memory.limit_in_bytes ] && [ -r /proc/meminfo ]; then
257-
memLimitB="$(< /sys/fs/cgroup/memory/memory.limit_in_bytes)"
258-
memLimitKb="$(( memLimitB / 1024 ))"
259-
256+
memTotalKb=
257+
if [ -r /proc/meminfo ]; then
260258
memTotalKb="$(awk -F ':? +' '$1 == "MemTotal" { print $2; exit }' /proc/meminfo)"
261-
262-
if [ "$memLimitKb" -gt "$memTotalKb" ]; then
259+
fi
260+
memLimitB=
261+
memLimitKb=
262+
if [ -r /sys/fs/cgroup/memory/memory.limit_in_bytes ]; then
263+
memLimitB="$(< /sys/fs/cgroup/memory/memory.limit_in_bytes)"
264+
if [ "$memLimitB" = '0' ]; then
265+
# it appears that "WARNING: No kernel memory limit support" leads to "/sys/fs/cgroup/memory/memory.limit_in_bytes" containing the value "0"
263266
memLimitB=
264-
memLimitKb=
265267
fi
266-
268+
if [ -n "$memLimitB" ]; then
269+
memLimitKb="$(( memLimitB / 1024 ))"
270+
if [ -n "$memTotalKb" ] && [ "$memLimitKb" -gt "$memTotalKb" ]; then
271+
memLimitB=
272+
memLimitKb=
273+
fi
274+
fi
275+
fi
276+
if [ -n "$memTotalKb" ] || [ -n "$memLimitB" ]; then
267277
# https://github.com/docker-library/rabbitmq/pull/105#issuecomment-242165822
268278
vmMemoryHighWatermark=
269279
if [ "${RABBITMQ_VM_MEMORY_HIGH_WATERMARK:-}" ]; then
@@ -310,10 +320,8 @@ if [ "$1" = 'rabbitmq-server' ] && [ "$shouldWriteConfig" ]; then
310320
rabbitConfig+=( "{ vm_memory_high_watermark, $vmMemoryHighWatermark }" )
311321
fi
312322
elif [ "${RABBITMQ_VM_MEMORY_HIGH_WATERMARK:-}" ]; then
313-
echo >&2 'warning: RABBITMQ_VM_MEMORY_HIGH_WATERMARK was specified, but one of the following is not readable:'
314-
echo >&2 ' - /sys/fs/cgroup/memory/memory.limit_in_bytes'
315-
echo >&2 ' - /proc/meminfo'
316-
echo >&2 '(so "vm_memory_high_watermark" will not be set)'
323+
echo >&2 'warning: RABBITMQ_VM_MEMORY_HIGH_WATERMARK was specified, but current system memory or cgroup memory limit cannot be determined'
324+
echo >&2 ' (so "vm_memory_high_watermark" will not be set)'
317325
fi
318326

319327
if [ "$haveSslConfig" ]; then

0 commit comments

Comments
 (0)