Ubuntu 16.04'te cgconfig kurulumu


13

Kullanarak bazı kontrol grupları oluşturmak istiyorum cgroup.

Şimdiye kadar aşağıdakileri yaptım:

  1. Bazı paketler yükledim:

    sudo apt-get install cgroup-bin cgroup-lite cgroup-tools cgroupfs-mount libcgroup1
    
  2. Sonra /etc/cgconfig.confdosyayı aşağıdaki içerikle oluşturdum:

    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;
      }
    }
    

    kılavuzuna göre burada o CentOS üzerinde kullandığı için, yapılandırma dosyası aynı yerde bulunduğu ve Ubuntu aynı sözdizimini kullanır farz.

  3. Sonra bu kılavuza göre başlatmam gerekiyor cgconfig service. İle denedim:

    sudo service cgconfig restart
    

    Ama, oh hayır! Bir dosya eksik !:

    Failed to restart cgconfig.service: Unit cgconfig.service not found.
    
  4. Biraz merak ettikten ve aradıktan sonra denedim:

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

Yani benim sistemimde herhangi bir cgconfig hizmeti yok gibi görünüyor!

Bunu kullanarak aradım:

sudo aptitude search cgconfig

Ancak, hayır cgconfigbulunacaktır.

cgconfigUbuntu 16.04'üme nasıl kurabilirim ?

Yanıtlar:


15

Tamam, kendimi senin yaptığın şeyi yapmayı başardım, ama bazı değişikliklerle:

1) Aynı yardımcı programları kurdum:

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

2) Bu gibi conf dosyalarını düzenledim:

/etc/init/cgroup-lite.conf

description "mount available cgroup filesystems"
author "Serge Hallyn <serge.hallyn@canonical.com>"

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

Ve /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

Bu bir örnektir, [kullanıcı] yerine kullanıcı adınızı kullanın. Sınırlamanız gereken uygulamaları ekleyebilir ve CPU, bellek veya her ikisinin de sınırlı olmasını isteyip istemediğinizi tanımlayabilirsiniz.

GRUB_CMDLINE_LINUX_DEFAULTSatırı şurada düzenledim /etc/default/grub:

GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=memory swapaccount=1"

Güncelleniyor:

sudo update-grub

3) Ve son olarak değişiklikleri uygulamak için yeniden başlatılır.

Ve işte böyle çalıştım. Bundan önce, krom tarayıcı, clementine, yüce metin ve çok fazla kaynak kullanan diğer uygulamalar ile çoklu görevlere sahip sık sık OOM'lara sahip oluyordum, şimdi sorunsuz çalışıyorlar ve daha iyi çoklu görev yapabilirim.

Umarım bu başkalarına yardımcı olabilir.

Şu anda Intel Dual Core 2.6 Ghz ve 4 Gb ile Ubuntu 16.04 LTS kullanıyor . VERİ DEPOSU.


1
Bu doğru bir yaklaşım gibi geliyor, ancak cgrules.conf kullanmak yerine cgexec'i daha iyi buluyorum. Ayrıca, dosyayı adlandırılması gerekiyordu düşünüyorum cgconfig.confdeğil cgconf.conf. Systemd işini yapıyorsa, mountbu dosyadaki bölüme ihtiyacınız olduğunu düşünmüyorum .
Mark

Bu cevabı Mark'ın tavsiyesi üzerine düzenledim, test ettim ve iyi çalışıyor.
Rdrk

@ Mark, çözümünüzle ilgilenirim cgexec.
Jonathan

10

Aynı sorunla karşılaştım. Görünüşe göre mevcut Ubuntu dağıtımlarında, cgroup yapılandırma dosyalarını yüklemek için yerleşik bir hizmet yok.

/ Usr / share / doc / cgroup-tools / samples / cgconfig ve / usr / share / doc / cgroup-tools / samples / cgred'de bazı (bozuk?) Örnek init komut dosyaları bulacaksınız .

Yapılandırma dosyalarını manuel olarak yüklemek için kullanabilirsiniz

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

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

Zavallı bir adamın çözümü olarak, sistem başlangıcında her iki dosyayı da yükleyen bir init betiği yazdım.

#!/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 $?

Bu dosyayı /etc/init.d/cgconf adresine kaydedin ve kullanarak yükleyin

# 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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.