Используйте оболочку для обеспечения этого. Например, создайте сценарий с чем-то как следующее:
#!/bin/sh
# Check to see if this is already running from some other day
mkdir /tmp/lock || exit 1
while ! command-to-execute-until-succeed; do
# Wait 30 seconds between successive runs of the command
sleep 30
done
rmdir /tmp/lock
После этого укажите на крон на сценарий.
В некоторых разбитых на страницы спросом системах виртуальной памяти операционная система отказывается выделять анонимные страницы (т.е. страницы, содержащие данные без источника файловой системы, такие как данные во время выполнения, стопка программы и т.д.), если нет достаточная область подкачки для выгрузки страниц для освобождения физической памяти. Этот строгий учет имеет преимущество, что каждому процессу гарантируют доступ к такой же виртуальной памяти, которую они выделяют, но также средства, что объем доступной виртуальной памяти по существу ограничен размером области подкачки.
На практике программы имеют тенденцию выделять больше памяти, чем они используют. Например, виртуальная машина Java выделяет большую виртуальную память на запуске, но сразу не использует его. Память, считающая в ядре Linux, пытается компенсировать это путем отслеживания объема памяти, на самом деле используемого процессами, и превышает возможности объема виртуальной памяти. Другими словами, объем виртуальной памяти, выделенной ядром, может превысить объем физической памяти и области подкачки, объединенной в системе. В то время как это приводит к лучшему использованию физической памяти и области подкачки, оборотная сторона - то, что, когда сумма используемой памяти превышает объем физической памяти и доступной области подкачки, ядро должно так или иначе освободить ресурсы памяти для выполнения обязательства по выделению памяти.
Механизм ядра, который используется для исправления памяти для заполнения чрезмерных обязательств, называют out-of-memory-killer (OOM-уничтожитель). Обычно механизм начнет избавляться от процессов "жулика" памяти-hogging к свободному память для других процессов. Однако, если vm.panic_on_oom
установка sysctl является ненулевой, ядро запаникует вместо этого, когда система исчерпает память.
Возможные значения для vm.panic_on_oom
установка следующие:
0
(значение по умолчанию), Когда ситуация из памяти возникнет, OOM-уничтожитель, уничтожит процесс жулика.
1
Ядро обычно паникует, но если процесс, который достиг его предельного набора выделения памяти с mbind(MPOL_BIND)
или cpuset
, процесс уничтожается вместо этого.
2
Ядро всегда паникует в ситуации из памяти.
Эвристика, используемая OOM-уничтожителем, может быть изменена через vm.oom_kill_allocating_task
установка sysctl. Возможные значения следующие:
0
(значение по умолчанию) OOM-уничтожитель просканирует через список задач и выберет задачу жулика задачи, использующую большую память для уничтожения.
1
(ненулевой) OOM-уничтожитель уничтожит задачу, которая инициировала условие из памяти.
Память ядра бухгалтерский алгоритм может быть настроена с vm.overcommit_memory
настройки sysctl. Возможные значения следующие:
0
Эвристика (по умолчанию) принимает на себя непосильные обязательства со слабыми проверками.
1
Всегда принимайте на себя непосильные обязательства, никакие проверки.
2
Строгий учет, в этом режиме предел виртуального адресного пространства определяется значением vm.overcommit_ratio
настройки согласно следующей формуле:
virtual memory = (swap + physical memory * (overcommit_ratio / 100))
Когда строгий учет памяти будет использоваться, ядро больше не будет выделять анонимные страницы, если это не имеет достаточно свободной физической памяти или области подкачки для хранения страниц. Это означает, что важно, чтобы система была настроена с достаточной областью подкачки.
sysctl настройки могут быть проверены или изменены во времени выполнения с sysctl
команда. Для внесения изменений постоянными, настройки могут быть записаны в /etc/sysctl.conf
. Вышеупомянутые настройки также доступны через /proc/sys/vm
интерфейс. Соответствующие файлы:
/proc/sys/vm/panic_on_oom
/proc/sys/vm/oom_kill_allocating_task
/proc/sys/vm/overcommit_memory
/proc/sys/vm/overcommit_ratio
/var/log/messages
файл. Я нахожу, что размер буфера растет и растет, никогда не спускайтесь! – jofox 23.08.2013, 05:16