хороший, ионизируйтесь, недостаточно

У меня есть сценарий, который запускается большой, ЦП и дерево потребления памяти процессов. Существует Python и исполняемые файлы там, но все запускается с единственных подпроцессов сценария и Python удара.

Во время выполнения отдых системы полностью подперт вниз. Я попытался сделать, смягчают $ nice -n10 ionice -c2 ./Script.sh, однако это не достаточно - использование компьютера является очень отстающим (acutally, это - рабочий стол разработки, но проблемой на обозначенном сервере будет аналогичное то же).

Я подозреваю, что проблема с использованием процессов к большой памяти - все заканчивается выгруженное и становится вялым.

Существует ли способ понизить приоритет процесса (и его рекурсивные дети) в доступе к physial памяти? Я предпочитаю, чтобы это было сделано медленнее в фоне с ограниченным влиянием на другие задачи.

6
задан 20 February 2015 в 15:53
2 ответа

Вы не можете ограничить «темп» потребления памяти, но вы можете ограничить его общее использование памяти с помощью различных механизмов.

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, что приводит к еще более медленному отклику системы. Только не ходи туда.

3
ответ дан 3 December 2019 в 00:35

Хотя следующий вариант не поможет вам при подкачке памяти, он должен помочь вам в оценке воздействия ввода-вывода вашего процесса.

Похоже, вам следует явно установить уровень .

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.

1
ответ дан 3 December 2019 в 00:35

Теги

Похожие вопросы