Эти файлы часто используются демонами, которые должны только быть выполнены однажды в системе. Файл PID обычно содержит Идентификационный номер процесса уже запущенной и запускающей программы, если Вы существуете. Кроме того, когда это запускает, это создает файл блокировки. Пока файл блокировки существует, он не запустит другой без вмешательства пользователя. Если файл блокировки существует, и идентификатор процесса, упомянутый в изодромном с предварением файле, не работает, демон считается в "мертвом" состоянии, подразумевая, что это, как предполагается, работает, но не происходит, вероятно, из-за катастрофического отказа или неподходящего завершения работы. Это могло бы инициировать специальный запуск / сценарий перезапуска для некоторых программ. Правильно завершение работы его удалит файл блокировки.
Можно, вероятно, достигнуть чего-то как этот при помощи cgroups с контроллером Ресурса памяти.
Я предполагаю, что Вы поместили все свои использующие ресурс задачи в ограниченное (CPU & RAM) cgroup
, и отпуск sshd
"снаружи" так, чтобы это не ограничивается.
(Добавляющий больше подкачки, даже в форме файла подкачки, мог бы быть хороший вариант все же.)
Использовать renice
получить более высокий приоритет для sshd
, или проверьте учет. (acct)-> с этим можно установить ресурсы для пользователей, таким образом, выполняет sshd с s
ionice
к этому также, и вероятно запускают sshd с хорошего не renicing это позже.
– xenoterracide
08.06.2011, 16:03
О, но cgroups легки :) Установите libcgroup пакет. Создайте/etc/cgconfig.conf:
mount {
cpu = /cgroup/cpu_and_mem;
cpuacct = /cgroup/cpu_and_mem;
memory = /cgroup/cpu_and_mem;
}
group sshd {
cpu {
cpu.shares="500";
}
cpuacct {
cpuacct.usage="0";
}
memory {
memory.limit_in_bytes="1G";
}
}
group nosshd {
cpu {
cpu.shares="500";
}
cpuacct {
cpuacct.usage="0";
}
memory {
memory.limit_in_bytes="1G";
}
}
Запустите cgconfig
процесс, который создаст иерархию, cgroups, и установит пределы. Если это успешно выполняется, у Вас есть два cgroups, оба из которых имеют 50% присвоенного ЦП и 1G доступной памяти (не знают, каков Ваш фактический объем доступной памяти; принятие это - 2G в этом примере). Теперь просто необходимо переместить все задачи (т.е. все процессы, работающие на системе) от корневой группы в nosshd cgroup:
cgroup]# cat tasks >> nosshd/tasks
cgroup]# echo > tasks
Затем просто необходимо получить PID sshd
процесс и перемещение это информация sshd файл задач:
cgroup]# echo $PID >> sshd/tasks
Ta-da, Вы сделаны. Можно теперь пребывать в уверенности, что sshd будет всегда иметь 50% ЦП и 1G памяти.
Более общим решением проблемы использования ресурсов приложения является запуск ваших приложений в контейнере с помощью Docker. Затем вы можете запускать контейнеры с ограничениями на использование процессора и памяти, аналогичными cgroups.
docker run -c=10 -m=1g my-container