У free
новій запущеній системі, звіти про 1,5G використовували оперативну пам’ять (8G ОЗУ загалом, Ubuntu 12.04 з lightdm і плазмою робочого столу, запустилося одне вікно консолі). Маючи програми, які я використовую, він все ще споживає не більше 2G. Однак, коли система працює пару днів, все більше моєї вільної оперативної пам’яті зникає - не відображаючись у списку використовуваних додатків: тоді як smem --pie=name
звіти менше ніж 20% використаних (і 80% доступні), все інше говорить по-різному. free -m
наприклад, звіти про 7 день:
total used free shared buffers cached
Mem: 7459 7013 446 0 178 997
-/+ buffers/cache: 5836 1623
Swap: 9536 296 9240
(так що ви можете бачити, це не буфери або кеш). Сьогодні це, нарешті, закінчилося повним збоєм системи: керування вікнами вже відсутнє, програми «висять у повітрі» (без рамки) - і спливаюче вікно, яке сповіщає мене про «занадто багато відкритих файлів». Звіти про Syslog:
kernel: [856738.020829] VFS: file-max limit 752838 reached
Тому я закрив ті програми, які я зміг закрити, і вбив X за допомогою Ctrl-Alt-backspace. Після цього X намагався вийти з програмою failsafeX, але не зміг цього зробити, оскільки не міг більше визначити його конфігурацію. Тому я перейшов на консоль за допомогою Ctrl-Alt-F2, захопив усю інформацію, про яку я міг придумати (vmstat, free, smem proc/meminfo
,, lsof, ps aux
), і нарешті перезавантажив. X знову придумав failsafeX; цього разу я сказав йому «відновитись із резервної конфігурації», потім перейшов на консоль і успішно використовувався startx
для створення графічного середовища.
Я не маю реального поняття, що викликає цю проблему - хоча це має бути пов'язано або з самим X, або з деякими користувачами, що працюють на X - як після вбивства X, free -m
результат виглядав так:
total used free shared buffers cached
Mem: 7459 2677 4781 0 62 419
-/+ buffers/cache: 2195 5263
Swap: 9536 59 9477
(~ 3,5 ГБ звільняється) - для порівняння з результатами після нового запуску:
total used free shared buffers cached
Mem: 7459 1483 5975 0 63 730
-/+ buffers/cache: 689 6769
Swap: 9536 0 9536
Ще два корисні результати надає компанія memstat -u
. Незадовго до аварії:
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
Після вбивства Х:
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
І після перезавантаження, ще в 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
Змінити: Щойно додано два графіки з моєї системи моніторингу. Цікаво побачити: щоразу, коли спостерігається «стрибок» споживання пам’яті, процесор також досягає піку. Щойно я знайшов це зараз - і це нагадує мені ще один показник, що вказує на саму X: Часто, повертаючись до моєї машини та розблоковуючи екран, я знаходив щось, що робило важкі роботи на моєму процесорі. Перевірившись top
, це завжди виявлялося /usr/bin/X :0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch -background none
.
Тож після цього довгого пояснення нарешті мої запитання:
- Які можуть бути можливі причини?
- Як я можу краще визначити залучені процеси / програми?
- Які кроки можна зробити, щоб уникнути такої поведінки - не перезавантажуючи машину протягом усіх X днів?
Я працював 8.04 (Харді) протягом 5 років на своїй старій машині, ніколи не відчував подібного (завжди більше 100 днів, перш ніж перезавантажувати, наприклад, оновлення ядра). Тепер це повністю нова машина зі свіжою установкою 12.04 . Якщо це має значення, деякі характеристики:
AMD A4-3400 APU з Radeon (tm) HD Graphics, використовуючи драйвер відкритого коду ati / radeon (тому не встановлено fglrx), 8 Гб оперативної пам’яті, WDC WD1002FAEX-0 hdd (1 ТБ), материнську плату Asus F1A75-V Evo. 64-бітний Ubuntu 12.04 з KDE4 / Plasma. Зазвичай програми відкриваються більш-менш постійно, включаючи Evolution, Firefox, konsole (з Midnight Commander працює всередині, близько 4 вкладок) і LibreOffice - плюс інколи Caliber, Gimp та Moneyplex (банківське програмне забезпечення, яке я вже використовую вже майже 20 років, у версії, яка чудово зробила Hardy).
Редагувати:
Сьогодні я знайшов одного із "злих хлопців": плазмовий робочий стіл KDE4s. Використовувана пам'ять знову була до 5 Гб, коли я зробив killall plasma-desktop && plasma-desktop
. Це звільнило 1,3 Гб оперативної пам’яті! ps
каже:
RSS SIZE VSZ
plasma usage before restart 120988 526472 1300816
plasma usage after restart 92352 495972 1263632
То де ж були ці 1,3 Гб? Різниця між цими значеннями, якщо їх додати, становить 96 МБ - не 1,3 Гб.
І це може бути лише одна частина, оскільки досі використовується 3,7 ГБ (має бути менше 2 ГБ). Я спостерігав за цим протягом останніх 6 днів за допомогою декількох інструментів: використовувана пам'ять (не кажучи про кеш і буфери) збільшується повільно, але стабільно. Навіть якщо я не за столом, щоб щось запустити ...
Щодо моніторингу процесів з відкритими файлами, я зараз використовую наступний 1-лайн (я люблю оболонку і особливо bash), щоб отримати топ-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
Командуйте тут у 4 рядках для кращої читабельності. Звідти нічого ще нічого, крім того, що Skype не любить, що з’єднано Інтернет. Кожне відключення викликає незначне збільшення відкритих файлів, але нічого різкого. З іншого боку, схоже, плазма також відповідає за це:
Бачите краплю ручок файлів наприкінці? Це був перезапуск плазми.
free
. Перехід на інший DE я насправді вважав; якби KDE3.5 був доступний, я б не закінчив роботу з плазмою. Це може бути лише тимчасовим, щоб дізнатися, чи бере участь плазма.
sudo bash -c 'sync; echo 3 > /proc/sys/vm/drop_caches'
очищає зайвий баран? Ви можете переглядати відкриті файли програм за допомогоюlsof