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

61889
Tony

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

3 ответа на вопрос

21
phette23

Revisiting this just because I stumbled across it during a Google search and found Tony's comment to be useful: while it's true that limits are placed at the process level, the way you would determine the limits in place for a particular user would be to find the processes they've started and then check the proc/$/limits.

Specifically:

$ ps -u username # look up processes owned by user $ sudo grep 'open files' /proc/$/limits # find "Max open files" line for process ID 
Это должен быть принятый ответ, он используется для определения текущего ulimit для пользователя redis в Debian. tholu 8 лет назад 2
5
BIOSCMOS

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

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

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

Это также то, что я нашел, но я хотел бы иметь возможность проверить, «вступил ли он в силу». Я не понимаю, проблема у меня больше, так что я уверен, что это сделал Tony 9 лет назад 0
Вот как вы проверяете `more / proc // limit` ... возможно стоит добавить к ответу Tony 9 лет назад 8
Также стоит упомянуть расположение limit.conf: `/ etc / security / limit.conf` UpTheCreek 9 лет назад 4
1
Christian Jürgens

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

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