Como verifico o ulimit para outro usuário e altero os arquivos abertos?

18

Eu tenho um processo em execução como usuário do gearman e quero mudar open filespara evitar esse erro grave:

ERRO 2014-09-12 17: 49: 14.000000 [main] accept (Muitos arquivos abertos) -> libgearman-server / gearmand.cc: 788

Como posso executar o ulimit como outro usuário no Ubuntu e alterar os arquivos abertos? No momento, não faço login como artesão, mas tenho acesso root. Eu tentei fazer isso:

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

como recomendado aqui, mas nada de saída:

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

Respostas:

25

Revisitando isso só porque me deparei com ele durante uma pesquisa no Google e achei o comentário de Tony útil: embora seja verdade que os limites são colocados no nível do processo, a maneira como você determinaria os limites para um usuário específico seria encontre os processos que eles iniciaram e verifique o proc/${id}/limits.

Especificamente:

$ 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
fonte
2
Esta deve ser a resposta aceita, usada para descobrir o ulimit atual para o usuário redis no Debian.
tholu
6

Quando você executa o ulimitcomando, ele afeta apenas o processo que está sendo executado ulimit(o shell) e todos os subprocessos. Portanto, quando você executa bash --command "ulimit -n", ele afeta apenas o número de arquivos abertos para essa instância do bash e, em seguida, o bash sai, portanto, processos futuros não são afetados.

Portanto, para realizar o que você deseja (aumentar o limite de arquivos abertos para o seu processo real), provavelmente faz mais sentido editar limits.confpara aumentar o limite de arquivos abertos para seu usuário específico do gearman.

Veja exemplos de limits.conf em outro lugar ou aqui .

BIOSCMOS
fonte
Foi também o que encontrei, mas adoraria poder verificar se "entrou em vigor". Eu não tenho mais o problema que estava tendo, por isso tenho certeza que sim #
Tony
10
É assim que você verifica more /proc/<proc_id>/limits ... talvez valha a pena adicionar uma resposta para a resposta #
Tony
5
Vale mencionar também a localização de limits.conf:/etc/security/limits.conf
UpTheCreek 4/14
1

Tente usar su - <USERNAME> -c ulimit' -Hn'. Acabei de o testar no CEntOS 7 e funciona.

Christian Jürgens
fonte
1
Isso não funcionará se <USERNAME>não for possível fazer o login (possui o shell nologin).
dr01