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: 
$

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

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 .


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.


1
Isso não funcionará se <USERNAME>não for possível fazer o login (possui o shell nologin).
dr01
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.