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

В новой системе free сообщает об используемой оперативной памяти 1,5 ГБ (всего 8 ГБ ОЗУ, 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

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

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

После того, как 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

И после перезапуска вернемся в 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

File System Usage for one week [/g0] Kernel / CPU usage for one week [/g1]

Редактировать: Просто добавил два графика из моей системы мониторинга. Интересно видеть: каждый раз, когда происходит «скачок» в потреблении памяти, пики процессора тоже. Просто нашел это прямо сейчас - и это напоминает мне еще один индикатор, указывающий на сам X: часто, возвращаясь к моей машине и разблокируя экран, я обнаруживал, что что-то делает тяжелую работу на моем процессоре. Сверяясь с top, оно всегда оказалось /usr/bin/X :0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch -background none.

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

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

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

AMD A4-3400 APU с 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 - плюс иногда Calibre, 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 usage (2 days) [/g2]

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

11
задан 7 July 2012 в 01:09

13 ответов

  1. Огромное количество открытых файлов - хороший признак того, что что-то идет не так. Я думаю, что это будет какой-то системный демон KDE.
  2. Откройте консоль и запустите "top". Затем используйте & lt; и> изменить столбец сортировки на VIRT или RES и посмотреть, какие программы используют больше всего памяти. Утечка памяти будет отображаться как массово завышенная виртуальная память, так как после потери указателя на утечку памяти она не будет использоваться и будет заменена. Также запустите «lsof» и найдите процесс с большим количеством открытых файлов, поскольку это действительно утечка файлового дескриптора.
  3. Отследите программу и сообщите об ошибке.
6
ответ дан 25 July 2018 в 18:14
  1. Огромное количество открытых файлов - хороший признак того, что что-то идет не так. Я думаю, что это будет какой-то системный демон KDE.
  2. Откройте консоль и запустите "top". Затем используйте & lt; и> изменить столбец сортировки на VIRT или RES и посмотреть, какие программы используют больше всего памяти. Утечка памяти будет отображаться как массово завышенная виртуальная память, так как после потери указателя на утечку памяти она не будет использоваться и будет заменена. Также запустите «lsof» и найдите процесс с большим количеством открытых файлов, поскольку это действительно утечка файлового дескриптора.
  3. Отследите программу и сообщите об ошибке.
6
ответ дан 2 August 2018 в 00:28
  1. Огромное количество открытых файлов - хороший признак того, что что-то идет не так. Я думаю, что это будет какой-то системный демон KDE.
  2. Откройте консоль и запустите "top". Затем используйте & lt; и> изменить столбец сортировки на VIRT или RES и посмотреть, какие программы используют больше всего памяти. Утечка памяти будет отображаться как массово завышенная виртуальная память, так как после потери указателя на утечку памяти она не будет использоваться и будет заменена. Также запустите «lsof» и найдите процесс с большим количеством открытых файлов, поскольку это действительно утечка файлового дескриптора.
  3. Отследите программу и сообщите об ошибке.
6
ответ дан 4 August 2018 в 15:57
  1. Огромное количество открытых файлов - хороший признак того, что что-то идет не так. Я думаю, что это будет какой-то системный демон KDE.
  2. Откройте консоль и запустите "top". Затем используйте & lt; и> изменить столбец сортировки на VIRT или RES и посмотреть, какие программы используют больше всего памяти. Утечка памяти будет отображаться как массово завышенная виртуальная память, так как после потери указателя на утечку памяти она не будет использоваться и будет заменена. Также запустите «lsof» и найдите процесс с большим количеством открытых файлов, поскольку это действительно утечка файлового дескриптора.
  3. Отследите программу и сообщите об ошибке.
6
ответ дан 6 August 2018 в 00:35
  1. Огромное количество открытых файлов - хороший признак того, что что-то идет не так. Я думаю, что это будет какой-то системный демон KDE.
  2. Откройте консоль и запустите "top". Затем используйте & lt; и> изменить столбец сортировки на VIRT или RES и посмотреть, какие программы используют больше всего памяти. Утечка памяти будет отображаться как массово завышенная виртуальная память, так как после потери указателя на утечку памяти она не будет использоваться и будет заменена. Также запустите «lsof» и найдите процесс с большим количеством открытых файлов, поскольку это действительно утечка файлового дескриптора.
  3. Отследите программу и сообщите об ошибке.
6
ответ дан 7 August 2018 в 18:01
  1. Огромное количество открытых файлов - хороший признак того, что что-то идет не так. Я думаю, что это будет какой-то системный демон KDE.
  2. Откройте консоль и запустите "top". Затем используйте & lt; и> изменить столбец сортировки на VIRT или RES и посмотреть, какие программы используют больше всего памяти. Утечка памяти будет отображаться как массово завышенная виртуальная память, так как после потери указателя на утечку памяти она не будет использоваться и будет заменена. Также запустите «lsof» и найдите процесс с большим количеством открытых файлов, поскольку это действительно утечка файлового дескриптора.
  3. Отследите программу и сообщите об ошибке.
6
ответ дан 10 August 2018 в 06:49
  1. Огромное количество открытых файлов - хороший признак того, что что-то идет не так. Я думаю, что это будет какой-то системный демон KDE.
  2. Откройте консоль и запустите "top". Затем используйте & lt; и> изменить столбец сортировки на VIRT или RES и посмотреть, какие программы используют больше всего памяти. Утечка памяти будет отображаться как массово завышенная виртуальная память, так как после потери указателя на утечку памяти она не будет использоваться и будет заменена. Также запустите «lsof» и найдите процесс с большим количеством открытых файлов, поскольку это действительно утечка файлового дескриптора.
  3. Отследите программу и сообщите об ошибке.
6
ответ дан 15 August 2018 в 18:45
  • 1
  • 2
    Только что добавил 2 imgs из моей системы мониторинга. Похоже, что "прыжки" всегда происходило в одно и то же время суток (хотя 1 исключение). К сожалению, imgs не дает отметки времени для проверки cron. Кстати: есть ли способ контролировать, какой процесс имеет сколько файлов открыто? – Izzy 1 July 2012 в 06:51
  • 3
    Ваше предположение было хорошим. Хотя это и не демон, в основном это был компонент KDE: plasma-desktop (см. Выше). Забавная вещь об этом: я только что разобрался и разместил это здесь - и через 10 минут в моем ежедневном apt-get update && apt-get upgrade появилось обновление для plasma-desktop; эти парни быстрые X) Теперь я просто смотрю это некоторое время, чтобы увидеть, решена ли проблема, прежде чем объявить об этом. До сих пор все выглядит довольно многообещающе. – Izzy 9 July 2012 в 14:11
  • 4
    Все еще выглядит стабильно. Хотя ни lsof, ни top не указали мне на «злой процесс», ваше предположение относительно демона KDE указало мне в сторону нарушителя спокойствия. Так что еще раз спасибо - время безотказной работы моей машины теперь составляет около 14 дней, и все выглядит стабильно, хотя я даже параллельно запускал такие вещи, как VirtualBox, компиляция и т. Д. Поэтому я считаю это решенным и отмечаю ближайший матч :) – Izzy 13 July 2012 в 17:47

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

Вы можете прочитать эту блестящую бумагу (linux ate my ram), чтобы понять, как Linux управляет вашим бараном и почему нет необходимости беспокоиться:

http: // www. linuxatemyram.com/

0
ответ дан 25 May 2018 в 09:09
  • 1
    О, я никогда не слышал, что это «нормальное поведение системы». если система выходит из строя через 7 дней с "слишком большим количеством открытых файлов" ошибка. Я работаю под Linux уже около 15 лет, так и не получил этого. И да, я полностью понимаю, как Linux использует «бесплатную RAM». (используя его для кеширования и т. д.) Как указано выше: кеш и буферы здесь не проблема. Я не говорю о том, что RAM используется по уважительным причинам - Linux никогда не будет придерживаться кэшей по цене обмена. – Izzy 1 July 2012 в 15:42

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

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

http: / /www.linuxatemyram.com/

0
ответ дан 2 August 2018 в 00:28

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

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

http: / /www.linuxatemyram.com/

0
ответ дан 4 August 2018 в 15:57

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

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

http: / /www.linuxatemyram.com/

0
ответ дан 6 August 2018 в 00:35

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

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

http: / /www.linuxatemyram.com/

0
ответ дан 7 August 2018 в 18:01

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

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

http: / /www.linuxatemyram.com/

0
ответ дан 15 August 2018 в 18:45
  • 1
    Ох, я никогда не слышал, что это "нормальное поведение системы" если через 7 дней происходит сбой системы с & quot; слишком большим количеством открытых файлов & quot; ошибка. Я использую Linux уже около 15 лет, такого никогда не было. И да, я полностью понимаю, как Linux использует «свободную оперативную память». (используя его для кеширования и т. д.) Как указывалось выше: кеш и буферы здесь не проблема. Я не говорю о том, что оперативная память используется по уважительным причинам - Linux никогда не будет придерживаться кэшей по цене обмена. – Izzy 1 July 2012 в 15:42

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

Похожие вопросы: