17

У меня есть процесс, работающий от имени пользователя gearman, и я хочу изменить open files чтобы избежать этой неприятной ошибки:

ОШИБКА 2014-09-12 17:49:14.000000 [main] accept(слишком много открытых файлов) -> libgearman-server/gearmand.cc:788

Как я могу запустить ulimit от имени другого пользователя в Ubuntu и изменить открытые файлы? В настоящее время я не авторизируюсь в качестве gearman, но у меня есть root-доступ. Я пытался сделать это:

su gearman --shell /bin/bash --command "ulimit -n"

как рекомендуется здесь, но ничего не получится:

$ su gearman --shell /bin/bash --command "ulimit -n"
Password: 
$

3 ответа3

21

Пересматривая это просто потому, что я наткнулся на него во время поиска в Google и нашел комментарий Тони полезным: хотя это правда, что ограничения устанавливаются на уровне процесса, способ определения пределов для конкретного пользователя заключается в следующем: найдите процессы, которые они запустили, а затем проверьте proc/${id}/limits .

В частности:

$ ps -u username  # look up processes owned by user
$ sudo grep 'open files' /proc/${id}/limits  # find "Max open files" line for process ID
5

Когда вы запускаете команду ulimit это влияет только на процесс, на котором выполняется ulimit (оболочка), и на все подпроцессы. Поэтому, когда вы запускаете bash --command "ulimit -n" , это влияет только на количество открытых файлов для этого экземпляра bash, затем bash завершается, поэтому будущие процессы не затрагиваются.

Поэтому, чтобы выполнить то, что вы хотите (чтобы увеличить ограничение количества открытых файлов для вашего реального процесса), возможно, имеет больше смысла отредактировать limits.conf чтобы увеличить ограничение количества открытых файлов для вашего конкретного пользователя-механика.

Смотрите примеры limit.conf в другом месте или здесь.

1

Попробуйте использовать su - <USERNAME> -c ulimit' -Hn' . Я только что проверил его на CEntOS 7, и он работает.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .