우분투 16.04에 cgconfig 설치


13

을 사용하여 일부 제어 그룹을 만들고 싶습니다 cgroup.

지금까지 나는 다음을 수행했다.

  1. 패키지를 설치했습니다.

    sudo apt-get install cgroup-bin cgroup-lite cgroup-tools cgroupfs-mount libcgroup1
    
  2. 그런 /etc/cgconfig.conf다음 다음 내용으로 파일을 만들었습니다 .

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

    여기 가이드에 따르면 구성 파일이 CentOS에서 사용하는 것과 동일한 위치에 있고 우분투에서 동일한 구문을 사용한다고 가정합니다.

  3. 그런 다음 해당 안내서에 따라 시작해야합니다 cgconfig service. 나는 시도했다 :

    sudo service cgconfig restart
    

    그러나, 아뇨! 파일이 없습니다! :

    Failed to restart cgconfig.service: Unit cgconfig.service not found.
    
  4. 궁금해하고 검색 한 후 시도했습니다.

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

따라서 시스템에 cgconfig 서비스가없는 것 같습니다!

나는 그것을 사용하여 그것을 찾았다 :

sudo aptitude search cgconfig

그러나 cgconfig찾을 수 없습니다 .

cgconfigUbuntu 16.04에 어떻게 설치 합니까?

답변:


15

좋아, 나는 너와 똑같은 일을했지만, 약간의 변화가 있었다.

1) 동일한 유틸리티를 설치했습니다.

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

2) conf 파일을 다음과 같이 편집했습니다.

/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

예를 들어 [user] 대신 사용자 이름을 사용하십시오. 제한해야하는 응용 프로그램을 추가하고 CPU, 메모리 또는 둘 다로 제한할지 여부를 정의 할 수 있습니다.

나는 GRUB_CMDLINE_LINUX_DEFAULT라인을 편집 했다 /etc/default/grub:

GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=memory swapaccount=1"

업데이트 중 :

sudo update-grub

3) 마지막으로 재부팅하여 변경 사항을 적용합니다.

그리고 이것이 제가 작동하는 방식입니다. 이 전에 크롬 브라우저, 클레멘 타인, 숭고한 텍스트 및 많은 리소스를 사용하는 기타 응용 프로그램을 사용하여 멀티 태스킹을 자주하는 OOM이 있었으므로 이제는 원활하게 실행되고 멀티 태스킹이 더 좋습니다.

나는 이것이 이것이 다른 사람들을 도울 수 있기를 바랍니다.

현재 Intel Dual Core 2.6 Ghz4 Gb 와 함께 Ubuntu 16.04 LTS 를 사용 하고 있습니다. 램.


1
이것은 올바른 접근법처럼 느껴지지만 cgrules.conf를 사용하는 대신 cgexec가 더 좋습니다. 또한 파일 이름을 지정 cgconfig.conf하지 말고 생각했습니다 cgconf.conf. systemd가 작업을 수행하고 있다면 mount이 파일 의 섹션이 필요하다고 생각하지 않습니다 .
Mark

Mark의 권장 사항에 따라이 답변을 편집하고 테스트하여 잘 작동했습니다.
Rdrk

@ Mark, 님의 솔루션에 관심이 있습니다 cgexec.
Jonathan

9

나는 같은 문제에 직면했다. 현재 Ubuntu 배포에 cgroup 구성 파일을로드하는 기본 제공 서비스가없는 것 같습니다.

/ usr / share / doc / cgroup-tools / examples / cgconfig/ usr / share / doc / cgroup-tools / examples / cgred에 일부 (깨진?) 예제 초기화 스크립트가 있습니다.

구성 파일을 수동으로로드하려면

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

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

가난한 사람의 솔루션으로 시스템 시작시 두 파일을 모두로드하는 init 스크립트를 작성했습니다.

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

이 파일을 /etc/init.d/cgconf에 저장하고 다음 을 사용하여 설치하십시오.

# 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.