Czy jest jakiś sposób, aby sprawdzić wykorzystanie ulimits dla danego użytkownika? Wiem, że możesz zmienić limity dla pojedynczego procesu podczas uruchamiania lub dla pojedynczej powłoki podczas działania, ale chcę być w stanie „monitorować”, jak blisko użytkownik osiąga swoje limity. bash
Planuję napisać skrypt, który zgłosi statsd bieżący procent wykorzystania. W szczególności chcę śledzić:
- otwórz pliki (
ulimit -n
) - maksymalna liczba procesów użytkownika (
ulimit -u
) - oczekujące sygnały (
ulimit -i
)
To, czego chcę, to procent użytkowania (0-100).
Odpowiedzi:
Może to pomaga w pierwszym pytaniu:
Jeśli znasz identyfikatory procesu (PID) konkretnego użytkownika, możesz uzyskać limity dla każdego procesu za pomocą:
Możesz uzyskać liczbę otwartych plików dla każdego PID za pomocą:
A następnie po prostu porównaj wartość
Max open files
z liczbą otwartych deskryptorów plików z drugiego polecenia, aby uzyskać wartość procentową.źródło
Wysyła procent bieżącego użytkownika do otwartych plików, proc i oczekujących sygnałów, za pomocą kilku niewygodnych metod i standardowych narzędzi:
Dane wyjściowe w moim systemie:
Zakładając, że te liczby są dobre, ta odpowiedź pokazuje, że można to zrobić w powłoce, ale prawdopodobnie nie powinno, chyba że istnieją znacznie lepsze metody powłoki. Przeciwnie, to Q lepiej byłoby zrobić z
gcc
, lubpython
, etc.źródło
Ograniczenia są właściwościami procesów i są dziedziczone po procesach potomnych.
Nie można uzyskać limitów dla innego procesu.
źródło
man lsof
,man ps
...lsof
opiekuna, jasne. Ale nie dotyczy użytkownika końcowego. Również niepoprawny w kontekście tego pytania, ponieważ pyta konkretnie o Linuksa, który ma udokumentowane interfejsy (man proc
).-1