Terminal pogryzł człowieka: smem
Prawidłowe dane pozwalają wyciągać prawidłowe wnioski. A cóż nam po informacji o wolnej pamięci RAM, jeżeli jest ona naznaczona niedokładnością wypaczającą szerszy ogląd całości? Oczywiście nie oznacza to tego, że polecenie free jest do niczego. Po prostu smem uwzględnia niuanse, dzięki którym wskazania zajętości pamięci RAM mogą być nieco inne. A przecież jest powiedziane – oszczędzaj RAM gdziekolwiek jesteś.
Smem znajdziemy w głównych repozytoriach chyba niemal wszystkich dystrybucji. Jego wspomniana wyjątkowość polega na wykazywaniu dla każdego procesu wartość RSS, USS i PSS. Ki diabeł?
RSS (Resident set size) jest wartością całkowitej pamięci RAM zajętej przez proces włącznie z współdzielonymi bibliotekami. Ponieważ wspomniane biblioteki mogą być też używane przez inne procesy, wskazanie to nie jest ostateczne.
PSS (Proportional set size) rozdziela pamięć zajętą przez biblioteki współdzielone pomiędzy procesy z nich korzystające (3 procesy korzystające z 600KB bibliotek – do PSS zostanie wliczone po 200KB dla każdego procesu).
USS (Unique set size) wykazuje całkowitą ilość pamięci zajętej tylko i wyłącznie przez dany proces (bez bibliotek współdzielonych).
Dlatego interpretacja wyników dla free i smem może być dwojaka:
~$ smem -tw Area Used Cache Noncache firmware/hardware 0 0 0 kernel image 0 0 0 kernel dynamic memory 1145744 729736 416008 userspace memory 2353764 184408 2169356 free memory 533336 533336 0 ---------------------------------------------------------- 4032844 1447480 2585364 ~$ free -k razem użyte wolne dzielone buf/cache dostępne Pamięć: 4032844 2533700 536412 46652 962732 1141528
Podstawową funkcjonalnością smem jest wyświetlanie procesów dla konkretnego użytkownika:
~# smem -tk PID User Command Swap USS PSS RSS 2002 dhor kdeinit4: kded4 [kdeinit] 0 3.9M 4.8M 11.0M 1593 dhor /usr/lib/x86_64-linux-gnu/l 0 4.5M 4.9M 15.5M 1532 dhor /usr/bin/kglobalaccel5 0 4.6M 4.9M 14.1M 1644 dhor /usr/bin/kactivitymanagerd 0 4.6M 5.0M 15.6M 1513 dhor /usr/lib/telepathy/mission- 0 5.1M 5.4M 10.8M 1619 dhor /usr/bin/pulseaudio --start 0 5.0M 5.4M 9.4M 1571 dhor /usr/bin/ksmserver 0 5.1M 5.6M 16.4M 1637 dhor /usr/bin/korgac -session 10 0 10.0M 10.5M 21.9M 1609 dhor /usr/lib/x86_64-linux-gnu/l 0 12.8M 13.4M 24.5M 19625 dhor /usr/lib/telepathy/telepath 0 13.0M 13.6M 20.0M 22002 dhor /usr/bin/python /usr/bin/sm 0 15.2M 15.4M 17.5M 1614 dhor /usr/bin/owncloud -session 0 19.4M 21.0M 36.6M 1585 dhor /usr/bin/krunner 0 19.9M 21.5M 36.5M 1703 dhor /usr/bin/python /usr/bin/so 0 22.1M 23.5M 32.3M 9137 dhor /usr/bin/konsole 0 22.3M 27.8M 48.3M 17828 dhor /usr/bin/claws-mail 0 27.4M 29.5M 40.3M 3942 dhor /usr/lib/x86_64-linux-gnu/l 0 33.5M 39.4M 61.9M 8821 dhor /usr/bin/kwin_x11 --crashes 0 44.8M 48.5M 67.2M 5820 dhor /usr/bin/sayonara 0 63.4M 69.9M 93.5M 1470 dhor kded5 [kdeinit5] 0 70.1M 72.8M 89.0M 1588 dhor /usr/bin/plasmashell --shut 0 178.9M 184.1M 207.3M 1668 dhor /usr/bin/quiterss -session 0 244.5M 253.8M 280.4M 16679 dhor /usr/lib/firefox/firefox 0 1.2G 1.2G 1.2G ------------------------------------------------------------------------------- 55 1 0 2.1G 2.1G 2.6G
Potrafi również pokazać ranking użytkowników (-u), wartości w procentach (-p), mapping (-m), globalne dla systemu (-w). Możemy procesy filtrować (-P, regexp), według użytkowników (-U, regexp). Całość opcji możemy podejrzeć choćby pod tym adresem.
Ale to co wykracza poza normy terminalowe to zgrabne wykresy które może ten program generować. Wystarczy dodać stosowny parametr i gotowe. Smem potrafi wyrysować grafy kołowe oraz słupkowe. Służą do tego przełączniki bar i pie. Należy podać nazwę, według które wartości chcemy posortować wynik, itp. Utworzonym wykresem możemy manipulować (np. powiększać widok) i w ostateczności zapisać na dysk.
Tak oto nieoczywiste spojrzenie na wykorzystanie pamięci naszego komputera daje do myślenia i przy okazji kusi zgrabną oprawą graficzną statystyk (których prawdziwi terminalowi wyjadacze oczywiście nie potrzebują).