У меня проблемы с поиском, откуда происходит утечка памяти. Я использую Ubuntu 8.04 LTS на Dell XPS M1530. У меня есть 3 ГБ оперативной памяти, и я обнаружил, что примерно через час использования top показывает мне 2 ГБ + используется. Странно то, что когда я складываю проценты памяти по PID из top или ps aux, я обнаруживаю, что мне нужно использовать только около 20-25% моего доступного оперативного памяти.

Это привлекло мое внимание к тому, что я снова запустил vmware server. Очевидно, что использование оперативной памяти резко возрастает, когда я загружаю виртуальную машину, но используемая VMware память не учитывает использование памяти, которое я вижу через top или free. Остановка сервера vmware освобождает память, которая была ему выделена, но я все еще не могу найти, где используется эта RAM. Конечно, после полной перезагрузки память в порядке, но очень быстро она загружается на 60-80%, а на процессы приходится только треть. Любые идеи, где я должен искать дополнительную информацию о том, что это может быть?

4 ответа4

3

Вы используете своп вообще?

Если бы не я, я бы не волновался. Linux любит использовать запасную память для кеширования дисковых блоков.

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

1

Проверьте "реальное" использование памяти командой "free". Обратите внимание, что linux хранит содержимое в памяти как можно дольше, так как вы можете использовать его снова. Тем самым он создает большой кэш / буфер использования памяти.

Редактировать в ответ на комментарий Кинерса:

             total     used     free   shared  buffers   cached
Mem:       4058084  3974976    83108        0    89152  3520952
-/+ buffers/cache:   364872  3693212
Swap:      2040212   157048  1883164

Вы проверили строку «-/+ buffers/cache» (которая, я сомневаюсь, вы можете видеть это ясно вверху), у вас все еще было мало свободного места в этой строке? Потому что, как вы можете видеть в моем примере, это "настоящая" свободная память, тогда как в первой строке или сверху вы видите только довольно бесполезное значение бесплатно. Теперь я просто хочу убедиться, что вы понимаете вывод, потому что если бы вы уже посмотрели на бесплатное, как вы сказали, вы бы увидели, что у вас нет утечки, и ваша машина просто кешируется, как вы сказали в своем последнем комментарии к решению ,

1

Поздравляем, это та же самая "ошибка", которая "ранит" пользователей Windows 7 :) Linux использует (и делал это по крайней мере в течение последних десяти лет) неиспользуемую ОЗУ для кэширования дисков и буферизации различных данных. Microsoft недавно поняла, что это чертовски хорошая идея, и многие недавно жаловались на это. Ищите "утечка памяти в Windows 7" для удовольствия :)

1

Вы можете попробовать команду ниже, чтобы освободить кеш без перезагрузки сервера. Проверьте с top до и после команды.

echo 1 > /proc/sys/vm/drop_caches

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