У меня есть сценарий, который запускается большой, ЦП и дерево потребления памяти процессов. Существует Python и исполняемые файлы там, но все запускается с единственных подпроцессов сценария и Python удара.
Во время выполнения отдых системы полностью подперт вниз. Я попытался сделать, смягчают $ nice -n10 ionice -c2 ./Script.sh
, однако это не достаточно - использование компьютера является очень отстающим (acutally, это - рабочий стол разработки, но проблемой на обозначенном сервере будет аналогичное то же).
Я подозреваю, что проблема с использованием процессов к большой памяти - все заканчивается выгруженное и становится вялым.
Существует ли способ понизить приоритет процесса (и его рекурсивные дети) в доступе к physial памяти? Я предпочитаю, чтобы это было сделано медленнее в фоне с ограниченным влиянием на другие задачи.
Вы не можете ограничить «темп» потребления памяти, но вы можете ограничить его общее использование памяти с помощью различных механизмов.
1) ограничения безопасности Ограничьте использование памяти для пользователя, выполняющего процесс, через /etc/security/limits.conf. Это может не сработать в вашем случае, если вы запускаете этот процесс как один и тот же пользователь, работающий с разными материалами.
Пример:
username hard as 1000000
2) Группы управления Вы можете - с помощью cgroups, создать группу, а также ограничить использование памяти. Просто создайте контрольную группу, например:
# cat >> /etc/cgconfig.conf << EOF
group memlimit {
memory {
memory.limit_in_bytes = 1073741824;
}
}
EOF
# cat >> /etc/cgrules.conf <<EOF
username memory memlimit/
EOF
Offcourse - в обоих случаях вам нужно разработать свою программу так, чтобы она могла восстанавливаться после невозможности выделить больше памяти.
Если это не удается, вам просто нужно добавить больше память в вашей системе, чтобы вы могли избежать подкачки. Как только начинается обмен, он находится в руках ядра, и вы не можете, например, снизить приоритет kswapd, и даже если бы вы могли, это не гарантирует, что некоторые из используемых вами программ все равно не будут заменены out, что приводит к еще более медленному отклику системы. Только не ходи туда.
Хотя следующий вариант не поможет вам при подкачке памяти, он должен помочь вам в оценке воздействия ввода-вывода вашего процесса.
Похоже, вам следует явно установить уровень
.
ionice -c2 -n5 ./slowscript.sh
Одного C2 может быть недостаточно, в зависимости от вашего ядра.
Qoute из справочной страницы ( man ionice
)
Note that before kernel 2.6.26 a process that has not asked for an I/O priority formally uses "none" as scheduling class, but the I/O scheduler will treat such
processes as if it were in the best-effort class. The priority within the best-effort class will be dynamically derived from the CPU nice level of the process:
io_priority = (cpu_nice + 20) / 5.
For kernels after 2.6.26 with the CFQ I/O scheduler, a process that has not asked for an I/O priority inherits its CPU scheduling class. The I/O priority is
derived from the CPU nice level of the process (same as before kernel 2.6.26).
В основном: каждый новый запущенный процесс получит C2 N4, поэтому, если вы хотите уменьшить количество операций ввода-вывода до минимально возможного, либо переходите только в режим ожидания (C3), либо C2 N7.