mirror of
https://github.com/zulip/zulip.git
synced 2025-11-03 13:33:24 +00:00
puppet: Use memory limits from cgroup, if set.
This fixes behaviour where a Docker image with a memory limit would
immediately OOM, as it would not detect the container's memory limit,
only the host's.
Fixes: #29794
(cherry picked from commit c75535a154)
This commit is contained in:
committed by
Alex Vandiver
parent
8650417cf1
commit
2e7f715c0d
25
puppet/zulip/lib/facter/container_memory_limit.rb
Normal file
25
puppet/zulip/lib/facter/container_memory_limit.rb
Normal file
@@ -0,0 +1,25 @@
|
||||
Facter.add(:container_memory_limit_mb) do
|
||||
confine kernel: 'Linux'
|
||||
|
||||
setcode do
|
||||
begin
|
||||
memory_limit_mb = nil
|
||||
|
||||
# Check for cgroup v2
|
||||
if File.exist?('/sys/fs/cgroup/memory.max')
|
||||
val = File.read('/sys/fs/cgroup/memory.max').strip
|
||||
memory_limit_mb = val.to_i / 1024 / 1024 unless val == 'max'
|
||||
|
||||
# Fallback to cgroup v1
|
||||
elsif File.exist?('/sys/fs/cgroup/memory/memory.limit_in_bytes')
|
||||
val = File.read('/sys/fs/cgroup/memory/memory.limit_in_bytes').strip.to_i
|
||||
memory_limit_mb = val / 1024 / 1024 if val < 9223372036854771712
|
||||
end
|
||||
|
||||
memory_limit_mb
|
||||
rescue => e
|
||||
Facter.debug("container_memory_limit_mb error: #{e}")
|
||||
nil
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -39,8 +39,11 @@ class zulip::common {
|
||||
}
|
||||
$supervisor_conf_dir = "${supervisor_system_conf_dir}/zulip"
|
||||
|
||||
$total_memory_bytes = $facts['memory']['system']['total_bytes']
|
||||
$total_memory_mb = $total_memory_bytes / 1024 / 1024
|
||||
if $facts['container_memory_limit_mb'] {
|
||||
$total_memory_mb = Integer($facts['container_memory_limit_mb'])
|
||||
} else {
|
||||
$total_memory_mb = Integer($facts['memory']['system']['total_bytes'] / 1024 / 1024)
|
||||
}
|
||||
|
||||
$goarch = $facts['os']['architecture'] ? {
|
||||
'amd64' => 'amd64',
|
||||
|
||||
Reference in New Issue
Block a user