cgred / cgrulesengd – verschiebt neue Benutzer-PID nicht in die Taskdatei

cgred / cgrulesengd – verschiebt neue Benutzer-PID nicht in die Taskdatei

cgrulesengd kann die PID nicht in die Taskdatei verschieben, während es als Daemon ausgeführt wird. Wenn ich cgrulesengd neu starte, werden alle PIDs korrekt in die Taskdatei verschoben, die neuen PIDs jedoch nicht.

Wenn ich mich also als Benutzer „Hello“ anmelde und dann von root aus cgrulesengd -n -d ausführe, werden der Benutzer „Hello“ und alle seine Prozesse in die Datei /cgrup/mem/hello/tasks verschoben. Wenn ich mich jedoch ab- und wieder anmelde, wird der Benutzer „Hello“ nicht mehr von cgrulesengd beeinflusst.

Dies ist meine Testdatei.

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

Ausgabe:

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

Ich habe gerade festgestellt, dass alle neuen PIDs korrekt verschoben werden, wenn memory.max_usage_in_byteund != 0 ist.memory.memsw.max_usage_in_bytes

Meine Fragen sind:

  1. Warum bekomme ich 0 in memory.max_usage_in_byteund memory.memsw.max_usage_in_bytes?
  2. Warum wird die neue PID nicht automatisch an die Taskdatei angehängt?

Version: libcgroup-0.41-x86_64-1

Temporäre Lösung: echo $$ >> /cgroup/mem/$USER/taskszu /etc/profile hinzugefügt.

verwandte Informationen