Linux кто съел всю память

Кто сожрал память?

В упор не вижу, кто сожрал. Вроде буферы и кеш небольшие. Можете помочь, кто съел память?

Включи в top сортировку по RES

все это видно было и до этого, к сожалению

и что, есть противоречие с этой известной статьей? Только информации всёравно нет, кто сожрал

smem -w -t -R 64GB ?

Вот, уже интересней. Ядро сожрало 50ГБ

Тут буфером то занято всего ничего.

В контейнерах много всего запущено ?

было много, я всё завершил. потом прибил сам процесс докера. память не освободилась, написал сюда 🙂

Дальше, видимо, придётся посетить /proc/meminfo. Удачи, если первый раз.

Что-то распухло в tmpfs?

cat /proc/slabinfo показывает, что там radix_tree_node , kmalloc-* , kmem_cache_node , kmem_cache в 10 или 100 раз больше, чем на соседнем похожем работающем хосте. Не знаю, наверно не буду копать и ребутнусь

если и так, то этого не видно на mount/df

вот это распухло, вместе больше 30ГБ. Ядро протекло. Лан, хрен с ним.

Попробуйте ещё slabtop посмотреть напоследок

Алкоголь и стресс

$ oom-sort -s VmRSS

к сожалению, уже не проверить, ребутнул вчера. Спасибо за ссылку на тулзу.

Там явно не пользовательское приложение виновато. Ядро забилось само. Кто сожрал память? (комментарий) Видимо, лики ресурсов при работе с контейнерами: там полгода крутилось бешенное CI в докерах. Обновлюсь, подожду еще полгода, может уже пофикшено 🙂

Источник

Как в Linux узнать, какой процесс использует всю оперативную память (RAM)?

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

Как узнать, сколько свободной памяти в Linux

Начнём с того, что убедимся, что дело действительно в нехватке оперативной памяти, а не в том что, например, центральный процессор слишком загружен. Для этого выполним очень простую команду:

Вы увидите примерно следующее:

В этой табличке означает:

  • Mem — физическая оперативная память
  • Swap — раздел подкачки (если недостаёт оперативной памяти, то система сбрасывает временно неиспользуемые данные на физический диск, а потом по мере необходимости вновь загружает их в оперативную память. С одной стороны, это позволяет продолжить работу в условиях нехватки оперативной памяти, но с другой — система начинает работать заметно медленнее, поскольку физический диск всегда медленнее ОЗУ, плюс нужно время для записи на диск и считывание с диска)
  • total — общее количество
  • used — используемая в данный момент память (вычисляется как total — free — buffers — cache)
  • free — неиспользуемая память
  • shared — память, используемая (преимущественно) в tmpfs
  • buff — память, используемая буферами ядра
  • cache — память, используемая страницами cache и slabs
  • buff/cache — сумма буферов и кэша
  • available — примерное количество оперативной памяти, доступное для запуска новых приложений без использования ими раздела подкачки. В отличие от поля free, это поле принимает в расчёт страницу cache и также то, что не вся рекуперируемая (пригодная для повторного использования) память будет возвращена для рекуперации из-за того, что элементы используются в данный момент
Читайте также:  Programming the windows driver

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

Как просмотреть, какая программа потребляет больше всего оперативной памяти в top

Очень подробно о команде top, в том числе подсказки и интересные трюки описаны в статье «Как пользоваться командой top для наблюдения за процессами в Linux» — крайне рекомендуется ознакомиться.

Запуск программы top:

По умолчанию программа top сортирует процессы по их нагрузке на центральный процессор. Чтобы посмотреть, по какому полю выполняется сортировка, нажмите клавишу x:

По умолчанию в top отображаются следующие виды памяти:

  • VIRT — общее количество используемой задачей виртуальной памяти, включает все коды, данные, совместные библиотеки, плюс страницы, которые были перенесены в раздел подкачки, и страницы, которые были размечены, но не используются
  • RES — используемая оперативная память, является подмножеством VIRT, представляет физическую память, не помещённую в раздел подкачки, которую в текущий момент использует задача. Также является суммой полей RSan, RSfd и Rssh.
  • SHR — размер совместной памяти, подмножество используемой памяти RES, которая может использоваться другими процессами
  • %MEM — доля задачи в использовании памяти (RES)

Для переключения между полями сортировки, используйте . Обратите внимание, что это не курсорные клавиши, а разновидность скобок, для их использования переключитесь на английскую раскладку клавиатуры и нажимайте эти кнопки с зажатой клавишей Shift.

Пример сортировки по %MEM:

Сортировка по VIRT:

Как найти программы, которые используют больше всего памяти в ps

С помощью утилиты ps также можно составить список, отсортированный по количеству потребляемой памяти, для этого выполните:

Самые «прожорливые» процессы будут внизу:

Первый столбец — это PID процесса, затем идёт виртуальная память процесса в килобайтах, затем название программы.

Ещё одна элегантная команда с использованием ps:

Она покажет что-то вроде:

Невозможно найти, через какой процесс утекает оперативная память — сумма памяти процессов меньше общей используемой памяти

В некоторых версиях ядер Linux присутствовала проблема утечки памяти на уровне ядра, поэтому нет никакой возможности обнаружить её инструментами пользовательского пространства. Пример такого ядра — 3.13.

Читайте также:  Чем создать образ linux системы

Причём некоторые ядра допускают утечку памяти только в определённых условиях (пример: Linux Mint 17 при использовании btrfs).

Самым лучшим вариантом в этом случае является обновление ядра и системы в целом до новой версии.

Источник

Кто жрёт память?

Силою обстоятельств пересел на ноутбук с 3Гб оперативной памяти без свапа. Всегда считал, что 3Гб может быть достаточно для непритязательной работы потыкать вкладочки в интернете, поредактировать документик, но, как выясняется, это не так.

Система Убунта 14.04 64 бит, дефолтная юнити.

Сразу после загрузки десктопа гномовский системный монитор показывает, что занято 2Гб оперативки из 2.9 доступных.

В списке процессов в топе по памяти два яндекс-диска по 140Мб каждый, потом компиз и какой-то эволюшен-фактори по 35 и дальше еще какая-то мелочь по 15, 10, 5, 3 и далее к килобайтам. Гигагабайта на всю эту шушеру вместе взятую — с большим запасом (реально, думаю там не больше 500Мб), 2Гб никак не набирается.

Ладно, допустим эти полтора гига — какой-то виртуальный полуфейковый резерв (типа, как с файлами торентов, которые сразу пишут, что файл занимает 4 гига, а в реале — несколько мегабайт пока только начал закачку и в процессе увеличивается реальный размер). Но ведь я после этого запускаю фаерфокс, тыкаю на нем несколько любимых вкладочек, успеваю увидеть в сисмониторе, что это еще 700-800-900 мегабайт плюсом к 2м изначальным (т.е. 2.8 из 2.9), и система встаёт раком: мышка двигается, но окна на нее реагируют и перерисовываются раз в минуту, выхот только ctrl+alt+sysrq+b.

Другими словами, эти 1.5 гига вполне реальны, если их кто-то и резервирует до худших времен, то при наступлении худших времен он их не отдает.

На всякий случай добавлю, что жесткий диск с системой переставил без переустановки системы из предыдущего ноута, на котором было 8Гб оперативки.

Источник

Linux, кто съел всю память?

Столкнулся с проблемой, а точнее, некоторым моим не пониманием работы Linux систем. Зайдя на один из серверов я увидел следующее:

В этой картине меня привлекло значение потребляемой памяти. А именно написано, что из 16 Гб оперативки используется 14 Гб. Но на сервере крутится всего один маленький сайтик, и он не может съедать столько памяти.

Дальше я проверил этот результат командой:

и получил такую же картину:

Это было очень подозрительно.. Чтобы определить какие процессы, сколько съедают памяти я использовал следующую команду (описание тут: Как узнать какой процесс ест больше всего памяти в Linux):

Результатом, я остался не доволен, потому что, в совокупности все процессы, съедали, что-то около 2-х Гб:

Тогда я полез в поиск и нашел скрипт ps_mem.py, который подсчитывает кол-во памяти по процессам. Скрипт написан на питоне, пост про него тут: Подсчет потребляемой памяти процеcсами в Linux. Но он так же показывал, что все вместе процессы, не потребляют столько памяти.

Дальше я подумал, что проблема именно с ядром, и полез искать инфу, по ключевику: «linux ram size is not correct«, долго ли коротко, но нашел я вот такой ответ, на одно из сообщений:

Читайте также:  Специальная сборка windows 10

As I understand it, on Linux ‘used’ memory is split into ‘active’ and ‘inactive’.

Active memory is memory which is currently allocated to a process and in use by it.

Inactive is memory that has been allocated to a process but is no longer in use by it (it has been freed). The allocator puts this memory on one side for later use, but doesn’t empty it. If the same data that is in that memory block is requested again it just re-allocates that memory block to the process. If a block of memory is requested and there is no ‘clean’ memory left it starts re-allocating this ‘dirty’ memory.

Examining /proc/meminfo can show you how much of your ‘used’ memory is active and how much is inactive.

Вкратце написано следующее: в Linux системах память делится на активную и неактивную. Неактивная это та, что выделена процессу, но больше не используется им. Allocator ( выделятор 🙂 ) оставляет эту память для дальнейшего использования, и не очищает её. Если данные расположенные в этой памяти понадобятся он их сразу вернет. Если же другому процессу, потребуется эта память и не будет «чистой памяти», то тогда будет распределятся неактивная память.

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

Проверить кол-во неактивной памяти можно так:

Источник

4 способа найти процессы потребляющие наибольшее кол-во памяти в Linux.

Главное меню » Операционная система Linux » 4 способа найти процессы потребляющие наибольшее кол-во памяти в Linux.

1. Выяснить процессы потребляющие наибольшее количество памяти в Linux с помощью команды ps.

Существует один код доступный с помощью командой ps, который поможет вам найти процессы потребляющие наибольшее количество памяти в Linux.

Команда:

Пример вывода:

Здесь вы получите отсортированный по использованию памяти, который поможет вам узнать процессы потребляющие наибольшее количество памяти в Linux очень легко.

2. Постоянное наблюдение процессов в памяти в Linux.

Если вам необходимо контролировать вывод непрерывно. Пример команды watch ниже очень удобна.

Команда:

Пример вывода:

3. Выявление процессов, потребляющих наибольшее количество памяти в Linux с помощью команды top.

Тот же вывод команды ps также может быть достигнут с использованием нативной команды top в Linux.

Команда:

Пример вывода:

4. С помощью команды htop.

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

Команда:

После выполнения команды htop, откроется окно с непрерывным выводом данных, как показано ниже:

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

Оцените статью