Почему моя система использует больше оперативной памяти после часа работы?

Ninguna de las respuestas aquí funcionó para mí. Lo que funcionó para mí fue correr:

printf "%s\n"                                              \
       "tzdata  tzdata/Areas    select America"            \
       "tzdata  tzdata/Zones/America    select New_York"   \
       | debconf-set-selections

Después de hacer esto, ahora puede activar

DEBIAN_FRONTEND=noninteractive apt-get install -y tzdata

y utilizará automáticamente la zona horaria correcta en función de la configuración precargada -.

7
14.06.2019, 23:10
2 ответа

Неиспользуемая оперативная память считается потраченной впустую. Ядро Linux имеет расширенные функции управления памятью и пытается избежать нагрузки на узкое место в вашей системе, ваш жесткий диск / твердотельный накопитель. Он пытается кэшировать файлы в памяти.

Система управления памятью работает сложным образом, целью является повышение производительности.

Вы можете увидеть, что он делает, просмотрев /proc/meminfo.

cat /proc/meminfo

Вы можете восстановить эту кэшированную память, используя «удалить _кэши». Однако обратите внимание, что в документации говорится, что «использование вне среды тестирования или отладки не рекомендуется» просто потому, что «воссоздание выброшенные предметы», когда они снова понадобятся :-).

Очистить только PageCache:

# sync; echo 1 > /proc/sys/vm/drop_caches

Очистить дентри и иноды:

# sync; echo 2 > /proc/sys/vm/drop_caches

Очистить PageCache, dentries и inodes:

# sync; echo 3 > /proc/sys/vm/drop_caches

Обратите внимание, что syncочистит буфер файловой системы, чтобы убедиться, что все данные были записаны.

Из документации ядра :

Page cache

The physical memory is volatile and the common case for getting data into the memory is to read it from files. Whenever a file is read, the data is put into the page cache to avoid expensive disk access on the subsequent reads. Similarly, when one writes to a file, the data is placed in the page cache and eventually gets into the backing storage device. The written pages are marked as dirty and when Linux decides to reuse them for other purposes, it makes sure to synchronize the file contents on the device with the updated data.

Reclaim

Throughout the system lifetime, a physical page can be used for storing different types of data. It can be kernel internal data structures, DMA’able buffers for device drivers use, data read from a filesystem, memory allocated by user space processes etc.

Depending on the page usage it is treated differently by the Linux memory management. The pages that can be freed at any time, either because they cache the data available elsewhere, for instance, on a hard disk, or because they can be swapped out, again, to the hard disk, are called reclaimable. The most notable categories of the reclaimable pages are page cache and anonymous memory.

In most cases, the pages holding internal kernel data and used as DMA buffers cannot be repurposed, and they remain pinned until freed by their user. Such pages are called unreclaimable. However, in certain circumstances, even pages occupied with kernel data structures can be reclaimed. For instance, in-memory caches of filesystem metadata can be re-read from the storage device and therefore it is possible to discard them from the main memory when system is under memory pressure.

The process of freeing the reclaimable physical memory pages and repurposing them is called (surprise!) reclaim. Linux can reclaim pages either asynchronously or synchronously, depending on the state of the system. When the system is not loaded, most of the memory is free and allocation requests will be satisfied immediately from the free pages supply. As the load increases, the amount of the free pages goes down and when it reaches a certain threshold (high watermark), an allocation request will awaken the kswapd daemon. It will asynchronously scan memory pages and either just free them if the data they contain is available elsewhere, or evict to the backing storage device (remember those dirty pages?). As memory usage increases even more and reaches another threshold - min watermark - an allocation will trigger direct reclaim. In this case allocation is stalled until enough memory pages are reclaimed to satisfy the request.

Утечки памяти

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

20
27.01.2020, 20:14

Вы просмотрели список процессов и их использование памяти. Но была проблема. Вы не смотрели полный список.

gnome-system-monitorпо умолчанию показывает только «Мои процессы». Чтобы просмотреть процессы, принадлежащие всем пользователям системы, включая пользователя root, щелкните значок меню в правом верхнем углу (три точки в вертикальной линии ). Измените выбор с «Мои процессы» на «Все процессы».


  1. Используется по сравнению с. доступная системная оперативная память в виде одного числа
  2. Анализ /proc/meminfo
  3. Другие инструменты, которые вы могли бы использовать -установите atopсегодня 8-)

1. Используемый vs. доступная системная оперативная память, как одно число

Я вижу, что ваш ruby-код вычитает MemAvailableиз MemTotal. Это точно такой же расчет, используемый gnome-system-monitor, когда он показывает, что система использует «1,5 ГиБ (41,4% )от 3,7 ГиБ».

Вы имеете право использовать либо gnome-system-monitor, либо свой ручной расчет, по крайней мере, в первом приближении. Число MemAvailableвключает практически весь подлежащий восстановлению «кеш». т.е. MemAvailableвключает тип «кеша», который «доступен» для восстановления, как только программа запрашивает больше памяти, чем у вас есть.

Дополнительное примечание :Существует еще один тип или значение «кеша», который нельзя восстановить.Когда вы смотрите на число Cache/ «кеш», обычно сообщается, что оно включает Shmem/ «общий». Часть Shmem— это , а не восстанавливаемый кэш. Путаница возникает из-за того, что Shmemбыл искусно реализован с использованием "кэша страниц" ядра.

Еще один способ быстро проверить «доступен» — free -h.

Команда freeтакже показывает «общий доступ», использование подкачки и т. д. В вашей системной документации должны быть перечислены поля вывода и доступные параметры, т. е. в man free. Некоторые другие поля могут вводить в заблуждение:

  • Поле «используемый» в команде free(в настоящее время )не включает «общий». Это может быть очень запутанным. Игнорировать поле «используется» .
  • «Кэшированное» значение, показанное free, страдает от проблемы, указанной выше.
  • Если freeне показывает «доступно», ваша система устарела. Обратитесь к своей древней документации.

2. Анализ /proc/meminfo

Спасибо за полный вывод cat /proc/meminfo. Это часто помогает найти конкретные ответы (или вообще любой ответ ). Если вы хотите сами посмотреть, как рассчитывается MemAvailable, вы можете прочитать первый раздел моего ответа здесь:Является ли «кэшированная» память фактически свободной -?

Анонимные страницы

В вашем примере meminfoу вас естьAnonPages: 924844 kB(0,9 ГБ ). AnonPages— один из терминов, который сокращает MemAvailable.

Когда AnonPagesувеличивается, это должно указывать на увеличение «RES» или «RSS» («Resident» в оперативной памяти «Set Size» )некоторого количества запущенных программ. Но RSS может вводить в заблуждение, потому что часть памяти является общей :

.

Вы не можете добавлять RSS, потому что это удвоит -количество разделяемой памяти. Вы должны сложить PSS , пропорциональный RSS после учета совместного использования. Команда smemможет отображать PSS, а также подсчитывать итоги.Например:

  • sudo smem -t > p; head -n1 p; echo; tail -n17 p-Просмотрите -использование памяти процессом. Часть tailпокажет 15 основных процессов, за которыми следует строка с общим PSS и т. д.
  • smem -t -U ^sourcejedi$ > U; head -n1 U; echo; tail -n17 U-Посмотрите на использование памяти процессами, принадлежащими моему пользователю "sourcejedi".
  • sudo smem -t -u-Просмотрите память, сгруппированную по пользователю. Это может быть полезно, чтобы отличить ваш сеанс входа в систему (s )от некоторых системных демонов, которые работают как их собственные пользователи. Например. packagekitd работает от имени пользователя rootи может использовать сотни мегабайт.
  • smem -t -P firefox-Посмотрите на использование памяти моего веб-браузера :-).
  • sudo smem -t -m > m; head -n5 m; echo; tail m-Просмотр памяти, сгруппированной по имени сопоставления -имени кэшированного файла или "" или "[heap]" .

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

Шмем

У вас также естьShmem: 374848 kB(0,4 ГБ ). Я упомянул Shmem/"shared" выше. Это еще один термин, который уменьшает «доступную» память. (Это невосстанавливаемый кеш ). Это довольно нормально, но вы можете попытаться увидеть, что это такое.

Некоторая общая память видна как память отдельных процессов. Если разделяемая память отображается процессом, то она должна учитываться в RSS/PSS. См. выше. Иногда здесь может быть полезно «имя сопоставления» (, например.smem -t -m).

Shmemвключает файлы на смонтированном tmpfs. Вы можете проверить все смонтированные tmpfsс помощью df -t tmpfs.

В зависимости от вашей системы Shmemможет включать некоторые графические буферы. Я нашел способ проверить их текущий размер в моей системе (Графика Intel):Могу ли я увидеть объем памяти, выделенный в качестве буферов GEM?Я хотел бы знать, если вы найдете другой способ проверить свою систему!

Я читал, что Shmemутечки памяти в некоторых других графических драйверах могут быть связаны с очень большим VIRT (или VSIZE )для Xorg. Linux, использующий всю подкачку, перестает отвечать на запросы при наличии достаточного количества свободной оперативной памяти

Другое использование памяти?

  • MemTotal - MemAvailable = 1796088 kB(1,8 ГБ)
  • AnonPages: 924844 kB(0,9 ГБ)
  • Shmem: 374848 kB(0,4 ГБ)

Из оставшихся 0,5 ГБ я вижу еще несколько небольших вариантов использования менее 0,1 ГБ. Ядро также резервирует несколько процентных пунктов запаса для себя (, см. «нижний порог» ), но я думаю, что в вашей системе это будет 0,2 ГБ или меньше. Так что есть еще немного использования, в котором я не уверен.

Плита памяти ядра

"Невосстановимая плита" памяти — это еще один термин, который сокращает MemAvailable. У вас мало:SUnreclaim: 55044 kB(0,05 ГБ ).

You can also run slabtop to see the list of slabs. AFAICT, slabtop doesn't give stats on slabs as reclaimable or unreclaimable. But I can usually guess, and if there is some suspicious slab I guess you can look it up by name.

3. Другие инструменты, которые вы могли бы использовать -установить atopсегодня 8-)

smemможет быть излишним. Иногда все, что вам нужно, это topили ваша любимая альтернатива, а также знать, как сортировать по резидентной памяти. (Хотя gnome-system-monitorне может быть хорошим выбором для этого. Я думаю, что это не показывает достаточно ).

Иногда, когда у вас возникают проблемы с производительностью, вам нужно вместо этого посмотреть на чтение и запись на диск. Вы можете использовать sudo iotop.

Иногда вам может понадобиться журнал использования памяти для каждого -процесса, чтобы вы могли понять, почему вам не хватило памяти и замедлили работу системы до минимума...

atop— отличный маленький инструмент, который может делать все вышеперечисленное. Если это звучит полезно, я предлагаю вам установить его прямо сейчас. Затем вы можете узнать об этом, когда вам это нужно :-).

sudo atop -Rпоказывает "PSIZE" (то же значение, что и "PSS" ). Пакет atopвключает фоновую службу, которая запускается поверх с десятиминутным интервалом. Вы можете использовать atop -r..., чтобы открыть файлы журнала,которые хранятся в /var/log/atop/.

2
27.01.2020, 20:14

Теги

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