W nowo uruchomionym systemie free
raporty o zużyciu 1,5 GB pamięci RAM (łącznie 8 GB pamięci RAM, Ubuntu 12.04 z lightdm i pulpitem plazmowym, uruchomiono jedno okno konsoli). Mając uruchomione aplikacje, których używam, nadal zużywa nie więcej niż 2G. Jednak po kilkudniowym uruchomieniu systemu coraz więcej mojej wolnej pamięci RAM znika - bez pokazywania się na liście używanych aplikacji: podczas gdy smem --pie=name
raporty zużywają mniej niż 20% (i jest dostępnych 80%), wszystko inne mówi różnie. free -m
na przykład raporty z dnia 7:
total used free shared buffers cached
Mem: 7459 7013 446 0 178 997
-/+ buffers/cache: 5836 1623
Swap: 9536 296 9240
(więc widać, że nie są to bufory ani pamięć podręczna). Dzisiaj ostatecznie zakończyło się to całkowitym awarią systemu: zniknął menedżer okien, aplikacje „wisiały w powietrzu” (bez ramki) - i wyskakujące okienko informujące mnie o „zbyt wielu otwartych plikach”. Raporty Syslog:
kernel: [856738.020829] VFS: file-max limit 752838 reached
Zamknąłem więc te aplikacje, które udało mi się zamknąć, i zabiłem X, używając Ctrl-Alt-backspace. X próbował potem pojawić się ponownie z failafeX, ale nie był w stanie tego zrobić, ponieważ nie mógł już wykryć swojej konfiguracji. Więc przełączyłem się na konsolę, używając Ctrl-Alt-F2, przechwyciłem wszystkie informacje, które mogłem wymyślić (vmstat, free, smem, lsof proc/meminfo
, ps aux
), i w końcu ponownie uruchomiłem. X ponownie wymyślił FailafeX; tym razem powiedziałem mu, aby „przywróciło konfigurację z kopii zapasowej”, a następnie przełączyłem się na konsolę i z powodzeniem startx
uruchomiłem środowisko graficzne.
Nie mam pojęcia, co powoduje ten problem - choć musi to dotyczyć samego X lub niektórych procesów użytkownika działających na X - ponieważ po zabiciu X free -m
dane wyjściowe wyglądały następująco:
total used free shared buffers cached
Mem: 7459 2677 4781 0 62 419
-/+ buffers/cache: 2195 5263
Swap: 9536 59 9477
(~ 3,5 GB jest zwolnione) - aby porównać z wyjściem po nowym uruchomieniu:
total used free shared buffers cached
Mem: 7459 1483 5975 0 63 730
-/+ buffers/cache: 689 6769
Swap: 9536 0 9536
Dwa kolejne pomocne wyniki są dostarczane przez memstat -u
. Krótko przed katastrofą:
User Count Swap USS PSS RSS
mail 1 0 200 207 616
whoopsie 1 764 740 817 2300
colord 1 3200 836 894 2156
root 62 70404 352996 382260 569920
izzy 80 177508 1465416 1519266 1851840
Po zabiciu X:
User Count Swap USS PSS RSS
mail 1 0 184 188 356
izzy 1 1400 708 739 1080
whoopsie 1 848 668 826 1772
colord 1 3204 804 888 1728
root 62 54876 131708 149950 267860
Po ponownym uruchomieniu ponownie w X:
User Count Swap USS PSS RSS
mail 1 0 212 217 628
whoopsie 1 0 1536 1880 5096
colord 1 0 3740 4217 7936
root 54 0 148668 180911 345132
izzy 47 0 370928 437562 915056
Edycja: Właśnie dodałem dwa wykresy z mojego systemu monitorowania. Ciekawe do zobaczenia: za każdym razem, gdy następuje skok zużycia pamięci, procesor również osiąga szczyt. Właśnie to znalazłem w tej chwili - i przypomina mi kolejny wskaźnik wskazujący na sam X: Często po powrocie do mojego komputera i odblokowaniu ekranu znalazłem coś, co bardzo ciężko pracowało na moim procesorze. Sprawdzając top
, zawsze tak było /usr/bin/X :0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch -background none
.
Po tym długim wyjaśnieniu wreszcie moje pytania:
- Jakie mogą być możliwe przyczyny?
- Jak mogę lepiej zidentyfikować zaangażowane procesy / aplikacje?
- Jakie kroki można podjąć, aby uniknąć tego zachowania - krótko od ponownego uruchomienia komputera przez X dni?
Pracowałem na 8.04 (Hardy) przez około 5 lat na mojej starej maszynie, nigdy nie miałem do czynienia z podobnymi problemami (zawsze ponad 100 dni bezczynności, przed ponownym uruchomieniem w celu np. Aktualizacji jądra). To jest teraz zupełnie nowa maszyna z nową instalacją 12.04 . W razie potrzeby niektóre specyfikacje:
APU AMD A4-3400 z kartą graficzną HD Radeon (tm), wykorzystującą sterownik open source ati / radeon (więc bez zainstalowanego fglrx), 8 GB pamięci RAM, WDC WD1002FAEX-0 hdd (1 TB), płyta główna Asus F1A75-V Evo. Ubuntu 12.04 64-bit z KDE4 / Plasma. Aplikacje zwykle otwierają się mniej więcej na stałe, między innymi Evolution, Firefox, konsola (z uruchomionym programem Midnight Commander, około 4 kartami) i LibreOffice - a także czasami Calibre, Gimp i Moneyplex (oprogramowanie bankowe, którego używam już od prawie 20 lat, w wersji, która dobrze się spisała na Hardy).
Edycja:
Dzisiaj znalazłem jednego ze „złych facetów”: pulpit KDE4. Używana pamięć była ponownie do 5 GB, kiedy zrobiłem killall plasma-desktop && plasma-desktop
. To uwolniło 1,3 GB pamięci RAM! ps
mówi:
RSS SIZE VSZ
plasma usage before restart 120988 526472 1300816
plasma usage after restart 92352 495972 1263632
Gdzie były te 1,3 GB? Różnica między tymi wartościami, jeśli zostaną zsumowane, wynosi 96 MB, a nie 1,3 GB.
I może to być tylko jedna część, ponieważ nadal używane jest 3,7 GB (powinno być mniej niż 2 GB). Monitorowałem to w ciągu ostatnich 6 dni za pomocą kilku narzędzi: używana pamięć (nie mówiąc o pamięci podręcznej i buforach) rośnie powoli, ale stale. Nawet jeśli nie jestem przy biurku, żeby coś uruchomić ...
Jeśli chodzi o monitorowanie procesów z otwartymi plikami, obecnie używam następującej 1-linijki (uwielbiam powłokę, a szczególnie bash), aby uzyskać top 5:
echo "$(for pid in $(ls -a /proc|egrep '^([0-9])*$'|sort -n 2>/dev/null); do \
if [ -e /proc/$pid/fd ]; then FHC=$(ls -l /proc/$pid/fd|wc -l); \
if [ $FHC -gt 0 ]; then PNAME="$(cat /proc/$pid/comm)"; \
echo "$FHC files opened by $pid ($PNAME)"; fi; fi; done)"|sort -r -n|head -n5
Polecenie tutaj w 4 wierszach dla lepszej czytelności. Stamtąd już nic więcej - z wyjątkiem tego, że Skype nie lubi zrywania połączenia internetowego. Każde rozłączenie powoduje nieznaczny wzrost liczby otwartych plików, ale nic dramatycznego. Z drugiej strony wydaje się, że plazma również jest za to odpowiedzialna:
Widzisz upuszczenie uchwytów plików na końcu? To był restart plazmy.
free
. Przejście na inną DE faktycznie wziąłem pod uwagę; jeśli KDE3.5 byłby dostępny, nie skończyłbym na Plazmie. Może to być tylko tymczasowe sprawdzenie, czy w grę wchodzi plazma.
sudo bash -c 'sync; echo 3 > /proc/sys/vm/drop_caches'
usuwa dodatkowy taran? Możesz przeglądać otwarte pliki programów za pomocąlsof