Cài đặt cgconfig trong Ubuntu 16.04


13

Tôi muốn tạo một số nhóm kiểm soát bằng cách sử dụng cgroup.

Cho đến nay tôi đã làm như sau:

  1. Tôi đã cài đặt một số gói:

    sudo apt-get install cgroup-bin cgroup-lite cgroup-tools cgroupfs-mount libcgroup1
    
  2. Sau đó, tôi tạo /etc/cgconfig.conftập tin với nội dung sau:

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

    theo hướng dẫn ở đây , giả sử rằng tệp cấu hình nằm ở cùng một vị trí và sử dụng cùng một cú pháp trên Ubuntu, như nó sử dụng trên CentOS.

  3. Sau đó, theo hướng dẫn đó, tôi cần phải bắt đầu cgconfig service. Tôi đã thử với:

    sudo service cgconfig restart
    

    Nhưng, ôi không! Một tập tin bị thiếu!:

    Failed to restart cgconfig.service: Unit cgconfig.service not found.
    
  4. Sau một số thắc mắc và tìm kiếm xung quanh, tôi đã thử:

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

Vì vậy, có vẻ như tôi chỉ đơn giản là không có bất kỳ dịch vụ cgconfig nào trên hệ thống của mình!

Tôi đã tìm kiếm nó bằng cách sử dụng:

sudo aptitude search cgconfig

Tuy nhiên, không có cgconfigđược tìm thấy.

Làm cách nào để cài đặt cgconfigtrên Ubuntu 16.04?

Câu trả lời:


15

OK, tôi đã tự xoay sở để làm giống như bạn đã làm, nhưng với một số thay đổi:

1) Tôi đã cài đặt các tiện ích tương tự:

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

2) Tôi đã chỉnh sửa các tập tin conf như thế này:

/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

/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

Đó là một ví dụ, sử dụng tên người dùng của bạn thay vì [người dùng]. Bạn có thể thêm các ứng dụng bạn cần để giới hạn và xác định xem bạn muốn chúng là CPU-, bộ nhớ- hay cả hai giới hạn.

Tôi đã chỉnh sửa GRUB_CMDLINE_LINUX_DEFAULTdòng trong /etc/default/grub:

GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=memory swapaccount=1"

Cập nhật nó:

sudo update-grub

3) Và cuối cùng khởi động lại để áp dụng thay đổi.

Và đó là cách tôi đã làm việc này. Trước đây, tôi đã có các OOM thường xuyên với đa nhiệm - với trình duyệt crom, clementine, văn bản cao siêu và các ứng dụng khác sử dụng nhiều tài nguyên -, bây giờ chúng hoạt động trơn tru và tôi có thể đa nhiệm tốt hơn.

Tôi thực sự hy vọng điều này có thể giúp đỡ người khác.

Hiện đang sử dụng Ubuntu 16.04 LTS với Intel Dual Core 2.6 Ghz4 Gb. RAM.


1
Điều này cảm thấy giống như cách tiếp cận đúng, nhưng thay vì sử dụng cgrules.conf, tôi thấy cgexec sẽ tốt hơn. Ngoài ra, tôi nghĩ rằng bạn có nghĩa là để đặt tên cho các tập tin cgconfig.confvà không cgconf.conf. Nếu systemd đang thực hiện công việc của nó, tôi không nghĩ bạn cần mountphần trong tệp này.
Đánh dấu

Tôi đã chỉnh sửa câu trả lời này theo khuyến nghị của Mark, đã thử nghiệm và hoạt động tốt.
Rdrk

@Mark, tôi sẽ quan tâm đến giải pháp của bạn với cgexec.
Jonathan

9

Tôi phải đối mặt với cùng một vấn đề. Có vẻ như không có dịch vụ tích hợp trong các bản phân phối Ubuntu hiện tại để tải các tệp cấu hình cgroup.

Bạn sẽ tìm thấy một số tập lệnh init (bị hỏng?) Tại / usr / share / doc / cgroup-tools / example / cgconfig/ usr / share / doc / cgroup-tools / example / cgred .

Để tự tải các tệp cấu hình, bạn có thể sử dụng

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

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

Là một giải pháp của một người nghèo, tôi đã tự viết cho mình một tập lệnh init tải cả hai tập tin khi khởi động hệ thống.

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

Lưu tệp này tại /etc/init.d/cgconf và cài đặt nó bằng cách sử dụng

# 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.