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