Изменить ограничения ресурсов (ulimit / rlimit) запущенного процесса

Конвейер оболочки выполняет программы конвейера не одну за другой, а более или менее в одно и то же время (меньше, так как система становится все более загруженной ), как показано, когда первые три следующих dateвызывает выполнение:

$ date +%s; (date +%s >&2; sleep 3) | (date +%s >&2; sleep 5); date +%s
1502224035
1502224035
1502224035
1502224040
$ 

Следовательно, таймер timeoutуже ведет обратный отсчет, пока wgetзанят загрузкой данных, но до того, как displayуспел отобразить упомянутые данные.

Одним из обходных путей может быть загрузка данных заранее, чтобы был список файлов для отображения для работы; это уберет задержки, вызванные wget, из части display.

#!/bin/sh
...
get_the_files_here
for f in a_glob_that_matches_the_files_here; do
    timeout 10s display "$f"
done
0
15.08.2019, 13:05
1 ответ

Я понял.

На некоторых ядрах (например. 2.6.32+ ), по крайней мере, в CentOS/RHEL вы можете изменить ограничения ресурсов запущенного процесса, используя /proc/<pid>/limits, например.:

$ grep "open files" /proc/23052/limits
Limit                     Soft Limit           Hard Limit           Units     
Max open files            1024                 4096                 files     

Чтобы изменить максимальное количество открытых файлов на мягкое ограничение 4096, жесткое ограничение 8192:

echo -n "Max open files=4096:8192" > /proc/23052/limits

Это дает:

$ grep "open files" /proc/23052/limits
Limit                     Soft Limit           Hard Limit           Units     
Max open files            4096                 8192                 files

Обратите внимание на -nв echo -n-, без этого вы получите ошибку " invalid argument".

Описанное выше не всегда работает, поэтому

Другой вариант — команда prlimit, введенная вместе с util-linux 2.21, позволяет читать и изменять ограничения запущенных процессов.

Это продолжение доступного для записи /proc/<pid>/limits, которое не было интегрировано в основное ядро. Это решение должно работать.

$ prlimit  --nofile --output RESOURCE,SOFT,HARD --pid 23052
RESOURCE SOFT HARD
NOFILE   1024 4096

Установите пределы:

$ prlimit --nofile=4096:8192 --pid 23052

Подтвердить:

$ prlimit  --nofile --output RESOURCE,SOFT,HARD --pid 23052RESOURCE SOFT HARD
NOFILE   4096 8192
$ grep "open files" /proc/23052/limits
Limit                     Soft Limit           Hard Limit           Units     
Max open files            4096                 8192                 files     
4
28.01.2020, 02:39

Теги

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