Comment vérifier l'ulimit pour un autre utilisateur et modifier les fichiers ouverts?

18

J'ai un processus en cours en tant qu'utilisateur gearman et je souhaite le modifier open filespour éviter d'obtenir cette méchante erreur:

ERREUR 2014-09-12 17: 49: 14.000000 [principal] accepte (Trop de fichiers ouverts) -> libgearman-server / gearmand.cc: 788

Comment puis-je exécuter ulimit en tant qu'autre utilisateur sur Ubuntu et modifier les fichiers ouverts? Je ne me connecte pas actuellement en tant que gearman mais j'ai un accès root. J'ai essayé de faire ça:

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

comme recommandé ici mais rien de la sortie de get:

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

Réponses:

25

Revisiter cela simplement parce que je suis tombé dessus lors d'une recherche sur Google et j'ai trouvé le commentaire de Tony utile: bien qu'il soit vrai que les limites sont placées au niveau du processus, la façon dont vous détermineriez les limites en place pour un utilisateur particulier serait de recherchez les processus qu'ils ont démarrés, puis vérifiez le proc/${id}/limits.

Plus précisément:

$ 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
la source
2
Ceci devrait être la réponse acceptée, l'a utilisée pour trouver l'ulimit actuel pour l'utilisateur redis sur Debian.
tholu
6

Lorsque vous exécutez la ulimitcommande, elle affecte uniquement le processus en cours d'exécution ulimit(le shell) et tous les sous-processus. Ainsi, lorsque vous exécutez bash --command "ulimit -n", cela n'affecte que le nombre de fichiers ouverts pour cette instance de bash, puis les sorties de bash, ainsi les processus futurs ne sont pas affectés.

Donc, pour accomplir ce que vous voulez (pour augmenter la limite de fichiers ouverts pour votre processus réel), il est probablement plus logique de modifier limits.confpour augmenter la limite de fichiers ouverts pour votre utilisateur Gearman spécifique.

Voir des exemples de limits.conf ailleurs ou ici .

BIOSCMOS
la source
C'est aussi ce que j'ai trouvé mais j'aimerais pouvoir vérifier si cela "a pris effet". Je ne comprends plus le problème que je rencontrais, donc je suis sûr que c'est le cas
Tony
10
Voici comment vous vérifiez more /proc/<proc_id>/limits ... peut-être la peine d'ajouter à la réponse
Tony
5
Il convient également de mentionner l'emplacement de limits.conf:/etc/security/limits.conf
UpTheCreek
1

Essayez d'utiliser su - <USERNAME> -c ulimit' -Hn'. Je viens de le tester sur CEntOS 7, et cela fonctionne.

Christian Jürgens
la source
1
Cela ne fonctionnera pas si <USERNAME>est incapable de se connecter (a le shell nologin).
dr01