Mencegah Server Hang dengan Cgroups Sederhana

Langkah 1: Pendahuluan

  1. Pasang Cgroup
    apt install cgroup-tools
  2. 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
  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%.
  4. RAM tidak disetting (mengikuti setting aplikasi dan server)

Langkah 2: Setting

  1. Salin cgred.conf
    cp /usr/share/doc/cgroup-tools/examples/cgred.conf /etc/
  2. Buat file baru /etc/cgconfig.conf
    nano /etc/cgconfig.conf
    dengan isi:
    group webservice
    {
    cpu
    {
    cpu.cfs_quota_us=320000;
    }
    }
  3. 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
  4. Jalankan perintah untuk mencoba
    /usr/sbin/cgconfigparser -l /etc/cgconfig.conf
    /usr/sbin/cgrulesengd -vvv
  5. Jalankan perintah untuk melihat proses
    cat /sys/fs/cgroup/cpu/webservice/tasks
    cat /sys/fs/cgroup/memory/webservice/tasks
  6. Buat start up di systemd
    1. 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
    2. 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
    3. Aktifkan
      systemctl daemon-reload
      systemctl enable cgconfigparser
      systemctl enable cgrulesgend
      systemctl start cgconfigparser
      systemctl start cgrulesgend

Monitor

systemd-cgtop

Screenshot

Sumber:

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.