Add cgroup memory limits to jenkins_slave.

Add cgroup memory limits to the jenkins_slave module. Nodes including
jenkins_slave::cgroups will have the jenkins user's processes limited
to use only 90% of the nodes available memory. There are two
exceptions to this. The jenkins process run by the jenkins user will
not have its memory capped. Also there is a soft memory limit of
total physical memory * 0.75. If there is memory contention the
jenkins user processes may get only 75% of available memory.

Change-Id: If4a6439b536df4003d74fd1a93686c1c2401ae20
This commit is contained in:
Clark Boylan 2012-06-27 13:32:51 -07:00
parent 2dd8ebe53b
commit 1467f69191
4 changed files with 84 additions and 0 deletions

View File

@ -0,0 +1,2 @@
jenkins:jenkins memory /jenkins
jenkins memory /jenkins/children

View File

@ -0,0 +1,7 @@
# memorytotalbytes.rb
Facter.add("memorytotalbytes") do
setcode do
Facter::Util::Resolution.exec('free -bo | sed -n \'s/^Mem:\W\+\([0-9]\+\).*$/\1/p\'')
end
end

View File

@ -0,0 +1,37 @@
class jenkins_slave::cgroups {
package { 'cgroup-bin':
ensure => present
}
file { '/etc/cgconfig.conf':
ensure => present,
replace => true,
owner => root,
mode => 0644,
content => template('jenkins_slave/cgconfig.erb')
}
file { '/etc/cgrules.conf':
ensure => present,
replace => true,
owner => root,
mode => 0644,
source => 'puppet:///modules/jenkins_slave/cgroups/cgrules.conf'
}
service { 'cgconfig':
enable => true,
ensure => running,
require => Package['cgroup-bin'],
subscribe => File['/etc/cgconfig.conf']
}
service { 'cgred':
enable => true,
ensure => running,
require => Package['cgroup-bin'],
subscribe => File['/etc/cgrules.conf']
}
}

View File

@ -0,0 +1,38 @@
mount {
cpu = /sys/fs/cgroup/cpu;
cpuacct = /sys/fs/cgroup/cpuacct;
devices = /sys/fs/cgroup/devices;
memory = /sys/fs/cgroup/memory;
freezer = /sys/fs/cgroup/freezer;
}
group jenkins {
perm {
task {
uid = jenkins;
gid = jenkins;
}
admin {
uid = root;
gid = root;
}
}
}
group jenkins/children {
perm {
task {
uid = jenkins;
gid = jenkins;
}
admin {
uid = root;
gid = root;
}
}
memory {
memory.soft_limit_in_bytes = <%= (memorytotalbytes.to_f * 0.75).to_i %>;
memory.limit_in_bytes = <%= (memorytotalbytes.to_f * 0.9).to_i %>;
memory.memsw.limit_in_bytes = <%= (memorytotalbytes.to_f * 0.9).to_i %>;
}
}