Ile pamięci RAM używa ta aplikacja?

10

Jeśli uruchomię top -club htopdostanę procesy związane z ich zużyciem pamięci, ale nie chcę tego widzieć.

Czy istnieje wiersz poleceń, który pozwala zobaczyć zużycie pamięci RAM przez aplikację?

Na przykład chcę zobaczyć zużycie pamięci RAM przez serwer Apache (zamiast sprawdzania wszystkich uruchomionych procesów)


źródło
Dzięki. Najlepsze, co mogę w nim znaleźć, to zużycie pamięci przez proces, co daje mi top-c

Odpowiedzi:

4

Istnieje bardzo dobre szczegółowe wyjaśnienie tutaj: https://blogs.kde.org/2005/09/15/measuring-memory-usage

Ale w gruncie rzeczy: musisz się naprawdę zagłębić i zrozumieć, jak skonfigurowana jest aplikacja.

Na przykład patrząc na mysql:

  PID  PPID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                    
 6004 16116 composit  20   0 37900  27m 2908 S    0  0.2   0:40.33 mysqld                                                                                                                                            
16115 16085 composit  20   0 37900  27m 2908 S    0  0.2   0:00.37 mysqld                                                                                                                                            
16116 16115 composit  20   0 37900  27m 2908 S    0  0.2   2:07.34 mysqld                                                                                                                                            
16117 16116 composit  20   0 37900  27m 2908 S    0  0.2   0:00.00 mysqld                                                                                                                                            
16118 16116 composit  20   0 37900  27m 2908 S    0  0.2   3:19.79 mysqld                                                                                                                                            
16119 16116 composit  20   0 37900  27m 2908 S    0  0.2   0:00.01 mysqld                                                                                                                                            
16120 16116 composit  20   0 37900  27m 2908 S    0  0.2   5:31.09 mysqld                                                                                                                                            
16121 16116 composit  20   0 37900  27m 2908 S    0  0.2  14:19.53 mysqld                                                                                                                                            
16122 16116 composit  20   0 37900  27m 2908 S    0  0.2  36:13.67 mysqld                                                                                                                                            
16123 16116 composit  20   0 37900  27m 2908 S    0  0.2  30:30.64 mysqld                                                                                                                                            
16124 16116 composit  20   0 37900  27m 2908 S    0  0.2   0:00.15 mysqld                                                                                                                                            
16493 16116 composit  20   0 37900  27m 2908 S    0  0.2   0:00.00 mysqld    

Całkowita wykorzystana pamięć wynosi około 25 MB (weź 27 MB RES i odejmij współdzielone (SHR))

Sprawdziłem to, sprawdzając całkowite użycie pamięci (free -m, + / buffers / cache) przed i po wydaniu „killall mysqld”. Po zabiciu wszystkich procesów mysqld zużycie pamięci spadło o 25 MB zgodnie z „free-m”.

Jeśli zauważysz, że każdy proces ma identyczne kolumny VIRT, RES i SHR, prawdopodobnie są to tylko wątki tego samego procesu. (Starsze biblioteki Linuksa obsługiwały wątki poprzez tworzenie wielu rzeczywistych procesów, które zasadniczo zajmowały tę samą pamięć)

Jeśli są różne, możesz być w stanie to oszacować, wykonując SUMĘ (RES - SHR). Ale to działa tylko wtedy, gdy procesy są w rzeczywistości oddzielnymi procesami, a nie tylko wątkami tego samego procesu. Pomocne jest także spojrzenie na PPID (identyfikator procesu rodzica). Jeśli wszyscy mają tego samego rodzica, prawdopodobnie są to tylko wątki (choć niekoniecznie).

Niestety w Linuksie nie ma naprawdę dobrego, łatwego sposobu na rozwiązanie tego problemu. Jedynym łatwym sposobem jest sprawdzenie „darmowy” bezpośrednio przed zakończeniem procesu i sprawdzenie go ponownie natychmiast po nim. spójrz na wiersz „- / + buffers / cache:” i zobacz, jak bardzo zmniejszyło się użycie pamięci, a to powie ci, ile zużyło.

irwinr
źródło
2

Przy odrobinie pomocy man psi tej wspaniałej odpowiedzi ...

ps -up $(pidof PROCESS_NAME)

Na przykład:

[wilf@comp ~]$ ps -up $(pidof firefox)
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
wilf      1619  8.9  5.6 1464216 342396 ?      Sl   17:56   1:36 /usr/lib64/firefox/firefox
[wilf@comp ~]$ 

Innymi słowy:

cat /proc/$(pidof firefox)/status | grep VmSize

To może być prowadzony bez -xi tail -1:

pmap -x $(pidof firefox) | tail -1

pokazuje tylko procent:

top -p $(pidof firefox)

Podczas używania topmożesz także nacisnąć, iaby zignorować procesy bezczynności / zombie, aby ułatwić czytanie: znacznie mniejsza moc wyjściowa

Wilf
źródło
ale aplikacja uruchamia kilka procesów. Skąd mam wiedzieć, który jest główny?
odgadnąć? Myślę, że pmappokazuje wiele rzeczy na temat zasobów, których używa PID. Informacje są dostarczane na podstawie nazwy procesu i identyfikatora PID znalezionego przy jego użyciu pidof, więc główny proces pokazuje, czy jakąkolwiek nazwę podasz (myślę, nie wiem, czy odnosi się to do procesów nadrzędnych)
Wilf
2
To rozdziela dane wyjściowe według procesu. W ten sposób nie uzyskasz całkowitej ilości pamięci używanej przez wszystkie procesy Apache. Trzeba podsumować, ale zliczanie dzielonych regionów tylko raz (to trudny bit).
Gilles „SO- przestań być zły”