Wie überprüfe ich das ulimit für einen anderen Benutzer und ändere geöffnete Dateien?


18

Ich habe einen Prozess, der als Gearman-Benutzer ausgeführt wird, und ich möchte ihn ändern open files, um diesen unangenehmen Fehler zu vermeiden:

FEHLER 2014-09-12 17: 49: 14.000000 [main] accept (Zu viele offene Dateien) -> libgearman-server / gearmand.cc: 788

Wie kann ich ulimit unter Ubuntu als anderer Benutzer ausführen und geöffnete Dateien ändern? Ich melde mich derzeit nicht als Gearman an, habe aber Root-Zugriff. Ich habe versucht, dies zu tun:

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

wie hier empfohlen wird aber nix ausgegeben:

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

Antworten:


25

Dies noch einmal zu überprüfen, nur weil ich bei einer Google-Suche darauf gestoßen bin und Tonys Kommentar für nützlich befunden habe : Zwar werden Limits auf Prozessebene festgelegt, aber Sie würden die für einen bestimmten Benutzer geltenden Limits wie folgt bestimmen Finden Sie die Prozesse, die sie gestartet haben, und überprüfen Sie dann die proc/${id}/limits.

Speziell:

$ 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
Dies sollte die akzeptierte Antwort sein, mit der das aktuelle ulimit für den Benutzer redis unter Debian ermittelt wird.
13.

6

Wenn Sie den ulimitBefehl ausführen, wirkt sich dies nur auf den ausgeführten Prozess ulimit(die Shell) und alle Unterprozesse aus. Wenn Sie also ausführen bash --command "ulimit -n", wirkt sich dies nur auf die Anzahl der geöffneten Dateien für diese Bash-Instanz aus. Bash wird dann beendet, sodass zukünftige Prozesse nicht betroffen sind.

Um das zu erreichen, was Sie möchten (um das Limit für offene Dateien für Ihren tatsächlichen Prozess zu erhöhen), ist es wahrscheinlich sinnvoller, limits.confÄnderungen vorzunehmen, um das Limit für offene Dateien für Ihren speziellen Gearman-Benutzer zu erhöhen.

Beispiele für limits.conf finden Sie an anderer Stelle oder hier .


Das habe ich auch gefunden, aber ich würde gerne prüfen können, ob es "Wirkung gezeigt" hat. Ich verstehe das Problem nicht mehr, also bin ich sicher, dass es das tat
Tony

10
Dies ist, wie Sie überprüfen more /proc/<proc_id>/limits ... Vielleicht lohnt es sich, eine Antwort hinzuzufügen
Tony

5
Erwähnenswert ist auch der Ort der limits.conf:/etc/security/limits.conf
UpTheCreek

1

Versuchen Sie es mit su - <USERNAME> -c ulimit' -Hn'. Ich habe es gerade auf CEntOS 7 getestet und es funktioniert.


1
Dies funktioniert nicht, wenn Sie <USERNAME>sich nicht anmelden können (hat die Nologin-Shell).
dr01
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.