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:
parent
2dd8ebe53b
commit
1467f69191
2
modules/jenkins_slave/files/cgroups/cgrules.conf
Normal file
2
modules/jenkins_slave/files/cgroups/cgrules.conf
Normal file
@ -0,0 +1,2 @@
|
||||
jenkins:jenkins memory /jenkins
|
||||
jenkins memory /jenkins/children
|
7
modules/jenkins_slave/lib/facter/memorytotalbytes.rb
Executable file
7
modules/jenkins_slave/lib/facter/memorytotalbytes.rb
Executable 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
|
37
modules/jenkins_slave/manifests/cgroups.pp
Normal file
37
modules/jenkins_slave/manifests/cgroups.pp
Normal 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']
|
||||
}
|
||||
|
||||
}
|
38
modules/jenkins_slave/templates/cgconfig.erb
Normal file
38
modules/jenkins_slave/templates/cgconfig.erb
Normal 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 %>;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user