Исчезает свободная память - утечка памяти?

На новой системе, free сообщает об используемой оперативной памяти 1,5 ГБ (всего 8 ГБ ОЗУ, Ubuntu 12.04 с lightdm и плазменным рабочим столом, запущено одно окно консоли). При работающих приложениях, которые я использую, он по-прежнему потребляет не более 2G. Однако, если система работает в течение нескольких дней, все больше и больше свободной оперативной памяти исчезает - не отображается в списке используемых приложений: while 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

(так что вы можете видеть, что это не буферы или кеш). Сегодня это, наконец, закончилось полным сбоем системы: отсутствовал менеджер окон, "зависшие в воздухе" приложения (без рамки) - и всплывающее окно, уведомляющее меня о "слишком большом количестве открытых файлов". Отчеты системного журнала:

kernel: [856738.020829] VFS: file-max limit 752838 reached

Поэтому я закрыл те приложения, которые смог закрыть, и убил X, используя Ctrl-Alt-backspace. После этого X попытался снова подойти с failsafeX, но не смог этого сделать, так как больше не мог определить свою конфигурацию. Поэтому я переключился на консоль с помощью Ctrl-Alt-F2 и перехватил всю информацию, которую мог придумать (vmstat, free, smem, proc/meminfolsof, 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,

Итак, после этого длинного объяснения, наконец, мои вопросы:

  1. Какие могут быть возможные причины?
  2. Как я могу лучше определить вовлеченные процессы / приложения?
  3. Какие шаги можно предпринять, чтобы избежать такого поведения - если не считать перезагрузки машины все X дней?

Я работал 8.04 (Hardy) около 5 лет на моей старой машине, никогда не испытывая подобного (всегда более 100 дней безотказной работы, перед перезагрузкой, например, для обновления ядра). Теперь это совершенно новая машина со свежей установкой 12.04. В случае, если это имеет значение, некоторые характеристики:

APU AMD A4-3400 с HD-графикой Radeon (tm), использующий драйвер ATI / Radeon с открытым исходным кодом (поэтому fglrx не установлен), 8 ГБ ОЗУ, жесткий диск WDC WD1002FAEX-0 (1 ТБ), материнская плата Asus F1A75-V Evo. Ubuntu 12.04 64-bit с KDE4/Plasma. Приложения, которые обычно открываются более или менее постоянно, включают в себя Evolution, Firefox, konsole (с работающим Midnight Commander, около 4 вкладок) и LibreOffice - плюс иногда Caliber, Gimp и Moneyplex (банковское программное обеспечение, которое я использую уже почти 20 лет, в версии, которая хорошо на Харди).

Редактировать: сегодня я нашел одного из "злых парней": плазменный рабочий стол 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-строчку (я люблю shell и особенно 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 не любит разорвать интернет-соединение. Каждое отключение вызывает небольшое увеличение его открытых файлов, но ничего существенного. С другой стороны, похоже, что плазма также ответственна за это:

Использование VFS (2 дня

Видите падение файловых дескрипторов в конце? Это был перезапуск плазмы.

2 ответа

Решение
  1. Огромное количество открытых файлов - хороший признак того, что что-то идет не так. Я думаю, что это будет какой-то системный демон KDE.

  2. Откройте консоль и запустите "top". Затем используйте <и>, чтобы изменить столбец сортировки на VIRT или RES и посмотреть, какие программы используют больше всего памяти. Утечка памяти будет отображаться как сильно завышенная виртуальная память, так как после потери указателя на утечку памяти она не будет использоваться и будет заменена. Также запустите "lsof" и найдите процесс с большим количеством открытых файлов, так как это действительно утечка дескриптора файла.

  3. Отследить программу и сообщить об ошибке.

Я думаю, что это нормальное поведение системы. Скорее всего все хорошо.

Вы можете прочитать эту замечательную статью (linux съел моего барана), чтобы понять, как linux управляет вашим бараном и почему не нужно беспокоиться:

http://www.linuxatemyram.com/

Другие вопросы по тегам