
cgrulesengd はデーモンとして実行中に pid をタスク ファイルに移動できません。cgrulesengd を再起動すると、すべての pid はタスク ファイルに正しく移動されますが、新しい pid は移動されません。
したがって、hello ユーザーとしてログインし、ルートから cgrulesengd -n -d を実行すると、ユーザー hello とそのすべてのプロセスが /cgrup/mem/hello/tasks ファイルに移動されます。ただし、ログアウトしてログインすると、ユーザー hello は cgrulesengd の影響を受けなくなります。
これは私のテストファイルです。
#!/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
出力:
./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
memory.max_usage_in_byte
とmemory.memsw.max_usage_in_bytes
!= 0 の場合、すべての新しい PID が正しく移動されることが分かりました。
私の質問は次のとおりです:
memory.max_usage_in_byte
とで 0 になるのはなぜですかmemory.memsw.max_usage_in_bytes
?- 新しい pid がタスク ファイルに自動的に添付されないのはなぜですか?
バージョン: libcgroup-0.41-x86_64-1
一時的な解決策: echo $$ >> /cgroup/mem/$USER/tasks
/etc/profile に追加します。