Instal cgconfig di Ubuntu 16.04

13

Saya ingin membuat beberapa grup kontrol menggunakan cgroup.

Sejauh ini saya telah melakukan hal berikut:

  1. Saya menginstal beberapa paket:

    sudo apt-get install cgroup-bin cgroup-lite cgroup-tools cgroupfs-mount libcgroup1
    
  2. Lalu saya membuat /etc/cgconfig.conffile dengan konten berikut:

    mount {
      cpuset  = /cgroup/cpuset;
      cpu     = /cgroup/cpu;
      cpuacct = /cgroup/cpuacct;
      memory  = /cgroup/memory;
      devices = /cgroup/devices;
      freezer = /cgroup/freezer;
      net_cls = /cgroup/net_cls;
      ns      = /cgroup/ns;
      blkio   = /cgroup/blkio;
    }
    
    group limitcpu{
      cpu {
        cpu.shares = 400;
      }
    }
    
    group limitmem{
      memory {
        memory.limit_in_bytes = 512m;
      }
    }
    
    group limitio{
      blkio {
        blkio.throttle.read_bps_device = "252:0         2097152";
      }
    }
    
    group browsers{
      cpu {
        cpu.shares = 200;
      }
      memory {
        memory.limit_in_bytes = 128m;
      }
    }
    

    menurut panduan di sini , dengan asumsi, bahwa file konfigurasi berada di lokasi yang sama dan menggunakan sintaksis yang sama pada Ubuntu, seperti yang digunakan pada CentOS.

  3. Kemudian menurut panduan itu saya perlu memulai cgconfig service. Saya mencoba dengan:

    sudo service cgconfig restart
    

    Tapi, oh tidak! File tidak ada !:

    Failed to restart cgconfig.service: Unit cgconfig.service not found.
    
  4. Setelah bertanya-tanya dan mencari-cari, saya mencoba:

    ● cgconfig.service
       Loaded: not-found (Reason: No such file or directory)
       Active: inactive (dead)
    

Jadi sepertinya saya sama sekali tidak memiliki layanan cgconfig di sistem saya!

Saya mencarinya menggunakan:

sudo aptitude search cgconfig

Namun, tidak cgconfigada yang ditemukan.

Bagaimana saya bisa menginstal cgconfigdi Ubuntu 16.04 saya?

Zelphir Kaltstahl
sumber

Jawaban:

15

OK, saya berhasil melakukan hal yang sama seperti yang Anda lakukan, tetapi dengan beberapa perubahan:

1) Saya menginstal utilitas yang sama:

sudo apt-get install cgroup-bin cgroup-lite cgroup-tools cgroupfs-mount libcgroup1

2) Saya mengedit file conf seperti ini:

/etc/init/cgroup-lite.conf

description "mount available cgroup filesystems"
author "Serge Hallyn <[email protected]>"

start on mounted MOUNTPOINT=/sys/fs/cgroup

pre-start script
test -x /bin/cgroups-mount || { stop; exit 0; }
test -d /sys/fs/cgroup || { stop; exit 0; }
/bin/cgroups-mount
cgconfigparser -l /etc/cgconfig.conf
end script

post-stop script
if [ -x /bin/cgroups-umount ]
then
    /bin/cgroups-umount
fi
end script

/etc/cgconfig.conf

# Since systemd is working well, this section may not be necessary.
# Uncomment if you need it
#
# mount {
# cpuacct = /cgroup/cpuacct;
# memory = /cgroup/memory;
# devices = /cgroup/devices;
# freezer = /cgroup/freezer;
# net_cls = /cgroup/net_cls;
# blkio = /cgroup/blkio;
# cpuset = /cgroup/cpuset;
# cpu = /cgroup/cpu;
# }

group limitcpu{
  cpu {
    cpu.shares = 400;
  }
}

group limitmem{
  memory {
    memory.limit_in_bytes = 512m;
  }
}

group limitio{
  blkio {
    blkio.throttle.read_bps_device = "252:0         2097152";
  }
}

group browsers {
    cpu {
#       Set the relative share of CPU resources equal to 25%
    cpu.shares = "256";
}
memory {
#       Allocate at most 512M of memory to tasks
        memory.limit_in_bytes = "512m";
#       Apply a soft limit of 512 MB to tasks
        memory.soft_limit_in_bytes = "384m";
    }
}

group media-players {
    cpu {
#       Set the relative share of CPU resources equal to 25%
        cpu.shares = "256";
    }
    memory {
#       Allocate at most 256M of memory to tasks
        memory.limit_in_bytes = "256m";
#       Apply a soft limit of 196 MB to tasks
        memory.soft_limit_in_bytes = "128m";
    }
}

cgconfigparser -l /etc/cgconfig.conf

Dan /etc/cgrules.conf

user:process                                         subsystems   group
[user]:/usr/lib/chromium-browser/chromium-browser   cpu,memory      browsers
[user]:/usr/bin/clementine                        cpu,memory     media-players

Itu adalah contoh, gunakan nama pengguna Anda, bukan [pengguna]. Anda dapat menambahkan aplikasi yang perlu Anda batasi dan menentukan apakah Anda ingin CPU, memori, atau keduanya terbatas.

Saya mengedit GRUB_CMDLINE_LINUX_DEFAULTbaris di /etc/default/grub:

GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=memory swapaccount=1"

Memperbarui itu:

sudo update-grub

3) Dan akhirnya me-reboot untuk menerapkan perubahan.

Dan begitulah cara saya menjalankannya. Sebelum ini saya sering mengalami OOM dengan multitasking - dengan chromium-browser, clementine, sublime-text dan aplikasi lain menggunakan banyak sumber daya -, sekarang mereka berjalan dengan lancar dan saya dapat melakukan multitask lebih baik.

Saya sangat berharap ini dapat membantu orang lain.

Saat ini menggunakan Ubuntu 16.04 LTS dengan Intel Dual Core 2.6 Ghz dan 4 Gb. RAM

Rdrk
sumber
1
Ini terasa seperti pendekatan yang tepat, tetapi alih-alih menggunakan cgrules.conf, saya menemukan cgexec menjadi lebih baik. Juga, saya pikir Anda bermaksud memberi nama file cgconfig.confdan tidak cgconf.conf. Jika systemd melakukan tugasnya, saya rasa Anda tidak perlu mountbagian dalam file ini.
Tandai
Saya mengedit balasan ini mengikuti rekomendasi Mark, mengujinya dan bekerja dengan baik.
Rdrk
@ Mark, saya akan tertarik dengan solusi Anda cgexec.
Jonathan
9

Saya menghadapi masalah yang sama. Sepertinya tidak ada layanan bawaan di distribusi Ubuntu saat ini untuk memuat file konfigurasi cgroup.

Anda akan menemukan beberapa (rusak?) Contoh skrip init di / usr / share / doc / cgroup-tools / example / cgconfig dan / usr / share / doc / cgroup-tools / example / cgred .

Untuk memuat file konfigurasi secara manual yang dapat Anda gunakan

# Loads /etc/cgconfig.conf 
cgconfigparser -l /etc/cgconfig.conf

# Loads /etc/cgrules.conf
cgrulesengd -vvv --logfile=/var/log/cgrulesengd.log

Sebagai solusi orang miskin, saya menulis sendiri skrip init yang memuat kedua file pada startup sistem.

#!/bin/sh
### BEGIN INIT INFO
# Provides:          cgconf
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Should-Start:
# Should-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Configures CGroups
### END INIT INFO

start_service() {
  if is_running; then
    echo "cgrulesengd is running already!"
    return 1
  else
    echo "Processing /etc/cgconfig.conf..."
    cgconfigparser -l /etc/cgconfig.conf
    echo "Processing /etc/cgrules.conf..."
    cgrulesengd -vvv --logfile=/var/log/cgrulesengd.log
    return 0
  fi
}

stop_service() {
  if is_running; then
    echo "Stopping cgrulesengd..."
    pkill cgrulesengd
  else
    echo "cgrulesengd is not running!"
    return 1
  fi
}

status() {
  if pgrep cgrulesengd > /dev/null; then
    echo "cgrulesengd is running"
    return 0
  else
    echo "cgrulesengd is not running!"
    return 3
  fi
}

is_running() {
  status >/dev/null 2>&1
}

case "${1:-}" in
  start)
    start_service
    ;;
  stop)
    stop_service
    ;;
  status)
    status
    ;;
  *)
    echo "Usage: /etc/init.d/cgconf {start|stop|restart|status}"
    exit 2
    ;;
esac

exit $?

Simpan file ini di /etc/init.d/cgconf dan instal menggunakan

# make the script executable
chmod 755 /etc/init.d/cgconf

# register the service
update-rc.d cgconf defaults

# start the service
service cgconf start

# check the status
service cgconf status
Sebastian T.
sumber