cgred / cgrulesengd - não move o novo usuário pid para o arquivo de tarefa

1

cgrulesengd não pode mover pid para arquivo de tarefas enquanto estiver executando como deamon, se eu reiniciar cgrulesengd todos os pids são movidos corretamente para o arquivo de tarefa, mas o novo pid não é.

Então, se eu fizer login como hello user e, em seguida, executar a partir do root cgrulesengd -n -d, o usuário hello e todos os seus processos serão movidos para o arquivo / cgrup / mem / hello / tasks. Mas quando faço logout e login, o usuário não é mais afetado pelo cgrulesengd.

Este é o meu arquivo de teste.

#!/bin/bash
USER='hello'
cgdelete memory:${USER}/

cgclear
/etc/rc.d/rc.cgred stop

umount /cgroup/mem
rm -fr /cgroup/mem/

mkdir /cgroup/mem
mount -t cgroup -o memory mem /cgroup/mem

mkdir /cgroup/mem/${USER}

chown root:root   /cgroup/mem/${USER}/*
chown ${USER}:root /cgroup/mem/${USER}/tasks

echo 100M > /cgroup/mem/${USER}/memory.limit_in_bytes
echo 100M > /cgroup/mem/${USER}/memory.memsw.limit_in_bytes

[ ! -f '/etc/cgrules.conf_orig' ] && cp -pa /etc/cgrules.conf /etc/cgrules.conf_orig
echo "${USER} memory ${USER}/" > /etc/cgrules.conf
#echo "*       *       system/" >> /etc/cgrules.conf

/etc/rc.d/rc.cgred start
#cgrulesengd -n -d

ls -all /cgroup/mem/${USER}/tasks
cat /cgroup/mem/${USER}/tasks

echo -n "memory.limit_in_bytes  "
cat /cgroup/mem/${USER}/memory.limit_in_bytes
echo -n "memory.max_usage_in_byte  "
cat /cgroup/mem/${USER}/memory.max_usage_in_bytes

echo -n "memory.memsw.limit_in_bytes  "
cat /cgroup/mem/${USER}/memory.memsw.limit_in_bytes
echo -n "memory.memsw.max_usage_in_bytes  "
cat /cgroup/mem/${USER}/memory.memsw.max_usage_in_bytes

Saída:

./test_cgred.sh 
Stopping CGroup Rules Engine Daemon...                     [  OK  ]
umount: /cgroup/mem: not mounted
Starting CGroup Rules Engine Daemon:                       [  OK  ]
-rw-r--r-- 1 hello root 0 Sep 26 00:46 /cgroup/mem/hello/tasks
memory.limit_in_bytes  104857600
memory.max_usage_in_byte  0
memory.memsw.limit_in_bytes  104857600
memory.memsw.max_usage_in_bytes  0

Acabei de descobrir que quando memory.max_usage_in_byte e memory.memsw.max_usage_in_bytes é! = 0, todos os novos pids são movidos corretamente.

Minha pergunta é:

  1. Por que recebo 0 em memory.max_usage_in_byte e memory.memsw.max_usage_in_bytes ?
  2. Por que o novo pid não é anexado automaticamente ao arquivo de tarefas?

Versão: libcgroup-0.41-x86_64-1

Solução temporária: adicionado echo $$ >> /cgroup/mem/$USER/tasks ao / etc / profile.

    
por Abc Xyz 26.09.2015 / 10:40

0 respostas

Tags