настройка ulimit для запущенного процесса

Я запустил серверное приложение, и я хочу запустить его в течение длительного времени для тестирования. К сожалению, я забыл поставить перед ulimit -c unlimited, чтобы поймать возможный сбой и проверить его. Я могу что-нибудь сделать?

14
задан Lorenzo Pistone
18.12.2022 22:31 Количество просмотров материала 2488
Распечатать страницу

2 ответа

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

$ prlimit --core=unlimited: --pid $$
$ prlimit --core --pid $$
RESOURCE DESCRIPTION             SOFT      HARD UNITS
CORE     max core file size unlimited unlimited blocks

вам нужен util-linux-2.21 для команды prlimit, но вы должны быть в состоянии бросить вместе быструю программу для вызова prlimit системный вызов иначе:

int prlimit(pid_t pid, int resource, const struct rlimit *new_limit, struct rlimit *old_limit);

если у вас нет достаточно новой версии Linux (или другой ОС), то единственное исправление, о котором я знаю, - это подключение к процессу с помощью gdb и вопрос setrlimit из отладчика:

$ gdb -p $PID
...
(gdb) set $rlim = &{0ll, 0ll}
(gdb) print getrlimit(9, $rlim)
 = 0
(gdb) print *$rlim
 = {-1, -1}
(gdb) set *$rlim[0] = 1024*1024
(gdb) print setrlimit(9, $rlim)
 = 0

для установки ulimit -m,RLIMIT_AS = 9; то же самое относится и к ulimit -c (RLIMIT_CORE числовое значение 4 на Linux x86-64). Для "unlimited" используйте RLIM_INFINITY обычно -1. Вы должны зарегистрироваться /usr/include/bits/types.h размер rlim_t is; я предполагаю long long (на самом деле это unsigned, но использование подписанного типа делает" unlimited " -1 проще читать.)

37
отвечен ecatmur 2022-12-20 06:19

как Ubuntu 14.04 Trusty не имеет util-linux-2.21 (это 2.20), нет prlimit команда CLI для использования.

используя Питон3.4+ (который доступен на Ubuntu 14.04 и все более поздние версии) можно установить ограничение ресурсов для запущенного процесса. Запуск от имени root:

1-liner:

# PID=966
# grep 'open file' /proc/$PID/limits
Max open files            1024                 4096                 files     
# python3 -c "import resource; resource.prlimit($PID, resource.RLIMIT_NOFILE, (2048, 12345))"
# grep 'open file' /proc/$PID/limits
Max open files            2048                 12345                files   

или более многословен:

# python3
Python 3.4.3 (default, Nov 28 2017, 16:41:13) 
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import resource
>>> import os
>>> resource.prlimit(os.getpid(), resource.RLIMIT_NOFILE)
(1024, 4096)
>>> resource.prlimit(os.getpid(), resource.RLIMIT_NOFILE, (1369, 9999))
(1024, 4096)
>>> resource.prlimit(os.getpid(), resource.RLIMIT_NOFILE)
(1369, 9999)

убедитесь, что он работает:

# grep 'open file' /proc/1472/limits 
Max open files            1369                 9999                 files 

Примечание это работает с Linux 2.6.36 или более поздней версии с glibc 2.13 или более поздней версии.

1
отвечен HVNSweeting 2022-12-20 08:36

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх