Langkah 1: Pendahuluan
- Pasang Cgroup
apt install cgroup-tools
- Mengetahui CPU
lscpu
misalnya keluar hasil:
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 1
Core(s) per socket: 2
Socket(s): 2
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 15
Model name: Intel(R) Xeon(R) CPU 5130 @ 2.00GHz
Stepping: 6
CPU MHz: 2000.120
BogoMIPS: 4000.24
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 4096K
NUMA node0 CPU(s): 0-3 - Contoh di atas, diketahui bahwa CPU berjumlah 4, maka prosentase CPU penuh adalah 400%. Strategi: CPU yang digunakan tidak lebih dari 4/5, maka contoh di atas, CPU akan diset menjadi 320%.
- RAM tidak disetting (mengikuti setting aplikasi dan server)
Langkah 2: Setting
- Salin cgred.conf
cp /usr/share/doc/cgroup-tools/examples/cgred.conf /etc/
- Buat file baru /etc/cgconfig.conf
nano /etc/cgconfig.conf
dengan isi:group webservice
{
cpu
{
cpu.cfs_quota_us=320000;
}
} - Buat file baru /etc/cgrules.conf untuk mendefinisikan aturan penggunaan resource oleh user, misalnya membatasi server PHP (user: www-data) dan anti virus Clam (user: clamav)
nano /etc/cgrules.conf
dengan isi:#<user> <controllers> <destination>
www-data cpu webservice
clamav cpu webservice
*:clamscan cpu webservice - Jalankan perintah untuk mencoba
/usr/sbin/cgconfigparser -l /etc/cgconfig.conf
/usr/sbin/cgrulesengd -vvv - Jalankan perintah untuk melihat proses
cat /sys/fs/cgroup/cpu/webservice/tasks
cat /sys/fs/cgroup/memory/webservice/tasks - Buat start up di systemd
- Buat file /etc/systemd/system/cgconfigparser.service
nano /etc/systemd/system/cgconfigparser.service
dengan isi:[Unit]
Description=cgroup config parser
After=network.target
[Service]
User=root
Group=root
ExecStart=/usr/sbin/cgconfigparser -l /etc/cgconfig.conf
Type=oneshot
[Install]
WantedBy=multi-user.target - Buat file /etc/systemd/system/cgrulesgend.service
nano /etc/systemd/system/cgrulesgend.service
dengan isi:[Unit]
Description=cgroup rules generator
After=network.target cgconfigparser.service
[Service]
User=root
Group=root
Type=forking
EnvironmentFile=-/etc/cgred.conf
ExecStart=/usr/sbin/cgrulesengd
Restart=on-failure
[Install]
WantedBy=multi-user.target - Aktifkan
systemctl daemon-reload
systemctl enable cgconfigparser
systemctl enable cgrulesgend
systemctl start cgconfigparser
systemctl start cgrulesgend
- Buat file /etc/systemd/system/cgconfigparser.service
Monitor
systemd-cgtop
Screenshot
Sumber:
- https://www.paranoids.at/cgroup-ubuntu-18-04-howto/
- https://medium.com/@benmorel/creating-a-linux-service-with-systemd-611b5c8b91d6
- https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/resource_management_guide/sec-cpu
- https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/resource_management_guide/sec-obtaining_information_about_control_groups