Как проверить ulimit для другого пользователя и изменить открытые файлы?

18

У меня есть процесс, работающий от имени пользователя 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: 
$
Тони
источник

Ответы:

25

Пересматривая это только потому, что я наткнулся на него во время поиска в 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
phette23
источник
2
Это должен быть принятый ответ, он используется для определения текущего ulimit для пользователя redis в Debian.
tholu
6

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

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

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

BIOSCMOS
источник
Это также то, что я нашел, но я бы хотел иметь возможность проверить, «вступил ли он в силу». У меня больше нет проблем, так что я уверен, что это было так
Тони
10
Вот как вы проверяете more /proc/<proc_id>/limits ... возможно, стоит добавить, чтобы ответить
Тони
5
Стоит также упомянуть расположение limit.conf:/etc/security/limits.conf
UpTheCreek,
1

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

Кристиан Юргенс
источник
1
Это не будет работать, если <USERNAME>не удается войти (имеет оболочку nologin).
dr01