Несоответствие между используемой памятью, о которой сообщают, и суммой использования памяти приложения

killall команда не была упомянута, и я чувствую, что это - полезное дополнение к репертуару.

$ killall selenium

Можно также использовать -r regex опция указать регулярное выражение для соответствия имени процесса и даже временной стоимости:

$ killall -o 5m selenium 

Уничтожает все процессы селена, более старые, чем 5 минут.

4
19.01.2013, 21:20
3 ответа

Я нашел это smem действительно видит используемую память, но только в "системном" режиме:

# smem -tw
Area                           Used      Cache   Noncache 
firmware/hardware                 0          0          0 
kernel image                      0          0          0 
kernel dynamic memory       1200240     379444     820796 
userspace memory            2101184     136800    1964384 
free memory                  750532     750532          0 
----------------------------------------------------------
                            4051956    1266776    2785180 
# free -k
             total       used       free     shared    buffers     cached
Mem:       4051956    3298200     753756          0      31664     425552
-/+ buffers/cache:    2840984    1210972
Swap:      4051952     237368    3814584

который дает (едва любой) различие приблизительно 55 МиБ между не, кэш использовал память между free и smem.

0
27.01.2020, 21:02
  • 1
    smem видит память в системном режиме, потому что это случайно вычисляет zram реальное использование в некэше динамической памяти ядра. Ваше использование подкачки отображено в строке "подкачки" свободным, но также и косвенно в вышеупомянутых строках, о которых сообщают свободным также! –  Huygens 03.03.2013, 20:49
  • 2
    и это являются, вероятно, различием на 55 МиБ, которое я вижу между свободным и smem (как zram сжимает данные, и я не забываю видеть 4 сокращения размера сгиба), вещь, это не проблема, которую я пытаюсь диагностировать. Текущий вопрос - то, почему моя память ядра некэша является большой во-первых (даже если мы предполагаем, что zram память является несжатой, это - все еще более чем 600 МиБ, это используется, то есть, по восьми из общей памяти!). –  Hubert Kario 03.03.2013, 23:04
  • 3
    Ваше различие на 55 МБ могло быть просто объяснено потому что smem забывает добавлять, что поле Shmem к пространству пользователя использовало память, Вы кажетесь, имел приблизительно 36 МБ из тех, но как время "создания снимков" могли бы отличаться команды, это могло объяснить различие. –  Huygens 03.03.2013, 23:16
  • 4
    То, что я хотел сказать, является этим smem использует содержание meminfo вычислить значения строки динамической памяти ядра. Однако meminfo не выставляет все типы памяти (попытайтесь добавить их, чтобы видеть, сложили ли они). Любое странное использование памяти (такое как zram мог произвести, но другие программы/модули могли сделать также другой материал) заканчивается считаемое в некэше ядра. Не фокусируйтесь на выводе smem возможно, Ваше потребление памяти не происходит, формируют ядро, но пространство пользователя приложения. Мы должны знать больше тип приложений, которые Вы запускаете для помощи Вам далее. –  Huygens 03.03.2013, 23:18
  • 5
    В дополнение к zram Вы используете tmpfs? Или какой-либо другой ramfs как функции? –  Huygens 04.03.2013, 10:45

Проблема

4 ГБ RAM (физическая память) и что у Вас есть 2 zram устройства максимальных 2 025 976 КБ (примерно 2 ГБ каждый). zram использует доступную память, я не знаю точно внутреннее, но безотносительно механизма, я могу ясно вообразить сценарий, где страница Linux (= помещает некоторую память от RAM до zram) для получения еще некоторого свободного пространства, но затем zram использование в памяти растет, таким образом, это далее разбило бы на страницы, который приведет к дальнейшему увеличению zram использования, и так далее пока zram не использует всю физическую память.

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

Понимание

То, когда Ваша система хочет подкачать 100 МБ, что происходит, - то, что она помещает это 100 МБ в zram. Скажем, это сжато до на 50% меньше, так 50 МБ. Это означает, что Ваша система хотела освободить 100 МБ, но только 50 МБ были освобождены. Теперь Linux умен в этом, когда он разбил на страницы блока памяти (таким образом помещает их в подкачку), но нуждаются в них снова, он может сделать некоторую "оптимизацию", он может разбить на страницы в снова этой памяти, но сохранить его в подкачке также, поэтому если быстро после того, как он должен был бы разбить на страницы, они отделяются памяти, он мог избежать, чтобы expenive записал в файл подкачки. Таким образом в Вашем случае, могло случиться так, что Linux сохраняет 100 МБ в zram и отложил их в нормальной RAM, таким образом, система использует 150 МБ некоторое время. Если это повторяется для большей программы с меньшим количеством сжимаемых данных, это могло бы быстро стать кошмаром, вообразить блок на 300 МБ RAM, которая будет разбита на страницы и использовать 120 МБ в каждой подкачке zram. Это означает, что Linux хотел освободить 300 МБ RAM для другой цели, но только освободил (300-120-120=60) 60 МБ, это могло бы затем попытаться разбить на страницы дальнейшие страницы, и так далее, с проблемой, что у Вас есть 2 zram, которые могут использовать до 2 ГБ RAM каждый, таким образом съедая всю Вашу память.

Заключение и решение

Так дерьмо zram? Нет, нисколько, проблема состоит в том, что Вы настроили zram, чтобы иметь общий размер точно Вашей физической RAM, и это - проблема. Вы не должны настраивать zram для использования больше чем 25%, по моему скромному мнению, физической RAM, что означает, что необходимо было бы положиться все еще в решении для подкачки жесткого диска, после того как zram подкачка заполнено.

Простое решение состояло бы в том, чтобы уменьшить и zram, чтобы обработать каждого 500 МБ макс. и добавить файл подкачки примерно 2-3 ГБ, позволить ядру освобождать действительно неиспользованные страницы от zram до этого файла подкачки. Файл подкачки не будет использовать RAM и неясный давление на него.

Некоторая информация о том, как установить Ваш zram размер диска.

1
27.01.2020, 21:02
  • 1
    Сначала: в то время как Ваше всестороннее объяснение zram недалеко от действительности, она, как предполагается, используется без реальной подкачки. Во-вторых: отключение zram действительно не помог. Проблема, вероятно, вызывается некоторой ошибкой в radeon драйвер, к сожалению, у меня не будет времени для отладки его в ближайшем будущем. –  Hubert Kario 02.03.2013, 21:55
  • 2
    у меня действительно есть старый ПК, который я все еще использую регулярно только с 1 ГБ RAM, старый Sempron 2800 + и карта Radeon AGP. Память чрезвычайно ограничена в наше время путем простого просмотра Интернета, Вы быстро начинаете использовать подкачку. На этой машине я настроил zram, но я также сохранил свой раздел подкачки. Я не мог дать слишком много 1 ГБ к zram, не ограничивая мою физическую RAM, таким образом, я дал только 256 МБ, В основном это было похоже на увеличение RAM от 1 ГБ до чего-то немного выше (с немного служебным ;-)), и это было как раз для моего использования, но я все еще продолжаю подкачивать к диску! –  Huygens 03.03.2013, 10:15
  • 3
    @HubertKario Ни документация ядра относительно zram, ни compcache (исходный проект) говорит/советует любой подкачке жесткого диска. Я предполагаю, что это зависело бы от рабочей нагрузки и потребности ресурса, которую она подразумевает. На Linux можно уделить первостепенное значение для каждой подкачки, как я сказал, что у меня есть одна машина, которая использует zram, это имеет самый высокий приоритет для подкачки zram и самое низкое для подкачки жесткого диска, и я могу ясно видеть, что тот заполняется, прежде чем другой будет даже затронут. Пример того, как настроить его: wiki.archlinux.org/index.php/Swap#Priority –  Huygens 03.03.2013, 10:24
  • 4
    @HubertKario, поскольку Вы знаете, что я настроил тест VM для zram. Я узнал, что под напряжением памяти, ядро начнет подкачивать, и вместо того, чтобы иметь линейное заполнение подкачки, которую это было намного более быстро/легко, чтобы сделать так! После удаления части давления памяти у меня все еще была подкачка> свободная память, таким образом, ядро должно было сохранить некоторую подкачку. Я повторно активировал свою подкачку жесткого диска и удалил zram. Эта сила память 4 zram дисков, которые будут отложены в RAM и в конце, я закончил с: подкачка на 0 МБ используется и 1 ГБ свободной памяти!! zram может быть удобным, но также и пожиратель ресурсов памяти! –  Huygens 03.03.2013, 20:45
  • 5
    я запустил с приложений вниз: не было никакого приложения, которое использовало значительно больше памяти после недели времени работы чем тогда, когда это было недавно запущено, вот почему я начал искать то, что происходит в ядре –  Hubert Kario 08.03.2013, 14:43

Команда free -tm также показывает использование свопа файлами, резервируемыми через tmpfs. Если вы можете очистить папку /tmp, использование памяти командой smem -t -k должно быть аналогично free -tm.

0
27.01.2020, 21:02

Теги

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