7

Я использую новейший MacBook Pro с 8 ГБ оперативной памяти, и после нескольких часов использования его на работе я замечаю, что объем «активной» памяти растет и растет.

Всякий раз, когда я перезагружаю свой Mac, все выглядит нормально и почти не использует ОЗУ. Но через несколько часов это выглядит так:

Скриншот

Как видите, в данном случае это около 4,3 ГБ.

Будучи разработчиком, я знаю, что «активная память» - это объем памяти, который в данный момент используется запущенными процессами. Итак, первое, что я сделал, - это завершил работу всех приложений и уничтожил все процессы, которые, по-видимому, не относятся к Mac OS X.

После того, как я это сделал, моя активная память уменьшилась примерно на 400 МБ, но застряла на том, что вы видите на скриншоте. Больше нет процессов или приложений для выхода.

Теперь мне интересно, что на самом деле держится за память? top и Activity Monitor не сообщают о каких-либо процессах с высоким использованием памяти.

Есть идеи?

Спасибо!


Обновление 1:

Благодаря ответу Дуга Харриса я сделал этот скриншот. Он показывает использование активной памяти 2,55 ГБ в масштабе всей системы, но только использование 1,55 ГБ памяти, которое рассчитывает команда ps .

Я не уверен, куда ушли остальные 2,55 ГБ или где они размещены. У меня установлены инструменты, но поскольку это происходит в течение нескольких часов, инструменты трудно использовать. Это похоже на утечку памяти где-то в ОС. Может быть, драйвер (хотя у меня не установлены какие-либо расширения ядра - проверено с помощью kextstat).

Лично я думаю, что было бы интересно узнать больше о состоянии управления памятью. Под Linux есть некоторая информация в разделе "/proc", afaik.

4 ответа4

4

Несмотря на то, что ни у одного процесса не используется много памяти, все еще запущено много процессов - и все это складывается.

Используя ps и другие инструменты командной строки, вы можете углубиться в это.

Во-первых, используйте параметры для ps чтобы ограничить отображаемую область только резидентной памятью и именем команды. -m сортирует вывод по использованию памяти, -a показывает процессы всех пользователей, -x показывает процессы, не связанные с терминалом (т.е. большинство приложений Mac).

$ ps -axm -o "rss,comm" 

Вот первые несколько строк, которые я вижу:

   RSS COMM
210256 /Applications/Firefox.app/Contents/MacOS/firefox-bin
158276 /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
155360 /Applications/iTunes.app/Contents/MacOS/iTunes

Меня не шокирует, что они находятся наверху (и показанный процесс Chrome - только один из множества). Столбец RSS выражается в виде блоков размером 1024 байта. Таким образом, iTunes использует около 151,7 МБ.

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

Соберите еще кучу, чтобы увидеть сумму всех процессов:

$ ps -axm -o "rss,comm" | awk 'BEGIN { s=0;}; {s=s+$1;}; END { printf("%.2f GB\n", (s/1024.0/1024));}'

Вывод, который я вижу для этого, составляет 2.44 GB , не совсем то, что я вижу для активной памяти в Activity Monitor, но достаточно близко, чтобы я мог использовать ps, чтобы докопаться до сути.

Вы можете сложить вместе только эти процессы, используя более 100 МБ:

$ ps -axm -o "rss,comm" | awk 'BEGIN { c=0;s=0;}; ($1 > 100000) {c=c+1;s=s+$1;}; END { printf("%.2f GB from %d processes\n", (s/1024.0/1024),c);}'

0.98 GB from 8 processes

Я не сказал вам точно, что использует память вашего Mac, но эти инструменты помогут вам обнаружить.

1

man -k DTrace. Это те инструменты, которые решат эту проблему. Удачи

0

Похоже, что один из системных процессов вызывает утечку памяти (либо это происходит, либо по какой-то причине выполняется все больше системных процессов). Вы можете проверить это непосредственно в Activity Monitor, переключив всплывающее меню на панели инструментов с «Мои процессы на Все процессы», а затем отсортировав по столбцу «Реальная память». Ищите процессы, использующие много реальной памяти и / или множество экземпляров с одинаковым именем процесса. Это не решит проблему, но, по крайней мере, должно дать вам представление о том, откуда она взялась.

0

Мне кажется, что активная память - это просто свободная память, доступная для повторного использования, но не помеченная как "свободная".

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .