Powiedzmy, że mam 20 użytkowników zalogowanych na moim Linux-ie. Skąd mam wiedzieć, ile pamięci zużywa każde z nich?
20
Możesz spróbować użyć smem ( więcej informacji znajdziesz w ELC2009: Wizualizacja użycia pamięci za pomocą smem ). W szczególności sudo smem -u
powinien dać ci potrzebne informacje.
--no-install-recommends
.Ignorując problemy z pamięcią współużytkowaną, oto krótki skrypt, który udostępnia RSS i VMEM wszystkim zalogowanym użytkownikom, posortowane według vmem i uporządkowane w urocze kolumny:
źródło
Aby uzyskać sumę RSS, myślę, że następujące prace. Byłoby to uzyskać sumę RSS dla użytkowników kbrandt i root.
źródło
To trudne pytanie. Możesz z łatwością zsumować całkowite kwoty wymiany + swap na wyjściu „ps”, ale co z pamięcią współdzieloną? Różni użytkownicy mogą łatwo udostępniać tę samą stronę kodową, jeśli uruchamiają ten sam proces. Komu to rozliczasz? Co z buforami i pamięcią podręczną? To zależy od dokładności wyników. Im dokładniej chcesz, tym trudniej będzie.
źródło
Nie jestem pewien, jak zgłosić zużycie pamięci przez użytkownika, ale jeśli martwisz się kontrolowaniem ich wykorzystania, powinieneś poszukać ulimit. Umożliwi to ustawienie twardych i miękkich limitów dla pamięci użytkownika i grupy w systemie.
źródło
Możesz spróbować czegoś takiego:
źródło
ps aux | grep mysql | awk '{memory +=$4}; END {print memory }'
, gdzie mysql można zastąpić nazwą użytkownika lub procesu.Szukając tego samego, doszedłem do tego
aby wydrukować procesy uporządkowane według mem, pogrupowane według użytkownika (kolumna 1, 1 $), możesz grupować według innych rzeczy i sumować inne rzeczy, zmieniając 1 i 4 $
Z przyjemnością znalazłem rozwiązanie, chciałem się tylko podzielić.
źródło
ps --no-headers -eo user,rss | awk '{arr[$1]+=$2}; END {for (i in arr) {print i,arr[i]}}' | sort -nk2
. Polecenie sortowania wymaga-n
flagi, aby parsować pamięć jako liczbę. Również w ten sposób możesz zastąpić słowo „użytkownik” słowem „polecenie”, aby zamiast tego pogrupować według nazwy aplikacji.Ten skrypt bashowy jest prawdopodobnie brzydki jak diabli, ale dziękuję za ćwiczenie, mój bash był zardzewiały!
Wynik:
Proszę skomentować / poprawić, a ja zaktualizuję odpowiedź. Używam również wyjścia pamięci rss z PS, ponieważ inni mówili, że używanie tej wartości ma zalety / wady.
źródło
smem nie był dostępny w moim systemie, a skrypt Dave'a z jakiegoś powodu nie działał, więc napisałem ten brzydki oneliner Perla do przetwarzania danych wyjściowych ps:
Pamiętaj, że niektórzy użytkownicy zostali zidentyfikowani przy użyciu swojego identyfikatora UID zamiast nazwy użytkownika. Można sobie z tym poradzić, analizując nazwy użytkowników z / etc / passwd, używając narzędzia brzydszego:
źródło
Korzystanie ze skryptu Bash
WYNIK
źródło
Możesz uzyskać identyfikatory UID,
/etc/passwd
aby zrobić to dla wszystkich użytkownikówźródło
Cóż, w tym stanie jądra Linuksa mogę wymyślić tylko jeden właściwy sposób na wykonanie tego zadania - użycie grup pamięci. Będziesz musiał umieścić użytkownika podczas logowania we własnej grupie, a to może wymagać opracowania własnego modułu pam lub (raczej) modyfikacji do tego celu istniejącego modułu.
Przydatnym dokumentem do przeczytania na ten temat jest: Przewodnik zarządzania zasobami firmy RedHat®.
źródło