Jak mogę sprawdzić ulimit dla innego użytkownika i zmienić otwarte pliki?

17

Mam proces działający jako użytkownik przekładni i chcę to zmienić open files aby uniknąć tego paskudnego błędu:

BŁĄD 2014-09-12 17: 49: 14.000000 [main] accept (Zbyt wiele otwartych plików) - & gt; libgearman-server / gearmand.cc: 788

Jak mogę uruchomić ulimit jako inny użytkownik Ubuntu i zmienić otwarte pliki? Obecnie nie loguję się jako gearman, ale mam uprawnienia administratora. Próbowałem to zrobić:

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

zgodnie z zaleceniami tutaj ale nic nie wychodzi:

$ su gearman --shell /bin/bash --command "ulimit -n"
Password: 
$
Tony
źródło

Odpowiedzi:

21

Wracając do tego tylko dlatego, że natknąłem się na niego podczas wyszukiwania Google i znalazłem Tony komentarz, aby był użyteczny: chociaż prawdą jest, że limity są umieszczane na poziomie procesu, sposób, w jaki określiłbyś ograniczenia dla konkretnego użytkownika, to znalezienie procesów, które rozpoczęły, a następnie sprawdzenie proc/${id}/limits.

Konkretnie:

$ 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
źródło
2
Powinna to być zaakceptowana odpowiedź, używaj jej, aby znaleźć bieżącą ulimit dla użytkownika redis w Debianie.
tholu
5

Po uruchomieniu ulimit polecenie wpływa tylko na uruchomiony proces ulimit (powłoka) i wszystkie podprocesy. Więc kiedy uciekasz bash --command "ulimit -n", wpływa tylko na liczbę otwartych plików dla tej instancji bash, a następnie na wyjścia bash, a więc nie wpływa na przyszłe procesy.

Aby osiągnąć to, co chcesz (aby zwiększyć limit otwartego pliku dla prawdziwego procesu), prawdopodobnie bardziej sensowne jest edytowanie limits.conf zwiększyć limit otwartego pliku dla konkretnego użytkownika przekładni.

Zobacz przykłady limits.conf gdzie indziej lub tutaj .

BIOSCMOS
źródło
To jest również to, co znalazłem, ale chciałbym móc sprawdzić, czy „przyniosło efekt”. Nie mam problemu, który miałem, więc jestem pewien
Tony
8
W ten sposób sprawdzasz more /proc/<proc_id>/limits ... może warto dodać do odpowiedzi
Tony
4
Warto wspomnieć o lokalizacji limitów.conf też: /etc/security/limits.conf
UpTheCreek
1

Spróbuj użyć su - <USERNAME> -c ulimit' -Hn'. Właśnie przetestowałem go na CEntOS 7 i działa.

Christian Jürgens
źródło