- use baseruntime:latest as base image - reimplement cgroup-limits in shell - take real memory size into account for configuration - don't use nss_wrapper.so - don't reference separate shared-userspace repo - fix usage label - get rid of /var/lib/psql <-> .../data distinction - drop a few unused files from root/
99 lines
3.2 KiB
Bash
Executable file
99 lines
3.2 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# Script for parsing cgroup information
|
|
#
|
|
# This script will read some limits from the cgroup system and parse
|
|
# them, printing out "VARIABLE=VALUE" on each line for every limit that is
|
|
# successfully read. Output of this script can be directly fed into
|
|
# bash's export command. Recommended usage from a bash script:
|
|
#
|
|
# set -o errexit
|
|
# export_vars=$(cgroup-limits) ; export $export_vars
|
|
#
|
|
# Variables currently supported:
|
|
# MAX_MEMORY_LIMIT_IN_BYTES
|
|
# Maximum possible limit MEMORY_LIMIT_IN_BYTES can have. This is
|
|
# currently a constant value of 9223372036854775807.
|
|
# MEMORY_LIMIT_IN_BYTES
|
|
# Maximum amount of user memory in bytes. If this value is set
|
|
# to the same value as MAX_MEMORY_LIMIT_IN_BYTES, it means that
|
|
# there is no limit set. The value is taken from
|
|
# /sys/fs/cgroup/memory/memory.limit_in_bytes
|
|
# RAM_SIZE_IN_BYTES
|
|
# Available memory in bytes. The value is taken from /proc/meminfo.
|
|
# NUMBER_OF_CORES
|
|
# Number of detected CPU cores that can be used. This value is
|
|
# calculated from /sys/fs/cgroup/cpuset/cpuset.cpus
|
|
# NO_MEMORY_LIMIT
|
|
# Set to "true" if MEMORY_LIMIT_IN_BYTES is so high that the caller
|
|
# can act as if no memory limit was set. Undefined otherwise.
|
|
|
|
get_memory_limit() {
|
|
local limit="$(cat /sys/fs/cgroup/memory/memory.limit_in_bytes)"
|
|
if [ $? -eq 0 ]; then
|
|
echo "$limit"
|
|
else
|
|
echo "Warning: Can't detect memory limit from cgroups" >&2
|
|
fi
|
|
}
|
|
|
|
get_meminfo_ram_size() {
|
|
local limit="$(cat /proc/meminfo | while read key val unit rest; do if [ "$key" = "MemTotal:" ]; then echo "$val $unit"; break; fi; done)"
|
|
if [ $? -eq 0 ]; then
|
|
local val="${limit/ *}"
|
|
local unit="${limit/* }"
|
|
case "$unit" in
|
|
kB)
|
|
val=$(($val * 1024))
|
|
;;
|
|
MB)
|
|
val=$(($val * 1024 * 1024))
|
|
;;
|
|
GB)
|
|
val=$(($val * 1024 * 1024 * 1024))
|
|
;;
|
|
esac
|
|
echo "$val"
|
|
else
|
|
echo "Warning: Can't detect RAM site from /proc/meminfo." >&2
|
|
fi
|
|
}
|
|
|
|
get_number_of_cores() {
|
|
local core_count=0
|
|
local group
|
|
local sysfs_cpus="$(cat /sys/fs/cgroup/cpuset/cpuset.cpus)"
|
|
|
|
if [ $? -eq 0 ]; then
|
|
for group in ${sysfs_cpus//,/ }; do
|
|
local from="${group%-*}"
|
|
local to="${group#*-}"
|
|
core_count=$(($core_count + $to - $from + 1))
|
|
done
|
|
echo "$core_count"
|
|
else
|
|
echo "Warning: Can't detect number of CPU cores from cgroups" >&2
|
|
fi
|
|
}
|
|
|
|
MAX_MEMORY_LIMIT_IN_BYTES=9223372036854775807
|
|
MEMORY_LIMIT_IN_BYTES="$(get_memory_limit)"
|
|
RAM_SIZE_IN_BYTES="$(get_meminfo_ram_size)"
|
|
NUMBER_OF_CORES="$(get_number_of_cores)"
|
|
|
|
echo "MAX_MEMORY_LIMIT_IN_BYTES=$MAX_MEMORY_LIMIT_IN_BYTES"
|
|
|
|
if [ -n "$MEMORY_LIMIT_IN_BYTES" ]; then
|
|
echo "MEMORY_LIMIT_IN_BYTES=$MEMORY_LIMIT_IN_BYTES"
|
|
if [ "$MEMORY_LIMIT_IN_BYTES" -ge "$MAX_MEMORY_LIMIT_IN_BYTES" ]; then
|
|
echo "NO_MEMORY_LIMIT=true"
|
|
fi
|
|
fi
|
|
|
|
if [ -n "$RAM_SIZE_IN_BYTES" ]; then
|
|
echo "RAM_SIZE_IN_BYTES=$RAM_SIZE_IN_BYTES"
|
|
fi
|
|
|
|
if [ -n "$NUMBER_OF_CORES" ]; then
|
|
echo "NUMBER_OF_CORES=$NUMBER_OF_CORES"
|
|
fi
|