Назад | Перейти на главную страницу

Проблема с утечкой памяти в Centos5

Недавно я купил выделенный сервер в качестве обновления для небольшого сайта сообщества по сравнению с общим хостингом, который у нас был в течение последних 3 лет. Я установил httpd, php и mysql (обычные для веб-сервера). Я настроил httpd для нескольких виртуальных хостов и установил webmin и cacti. Казалось, все шло довольно гладко, пока я не заметил что-то нестандартное на графике использования памяти в кактусах.

На моем сервере 2 ГБ ОЗУ, и по какой-то причине использовалось 1,7 ГБ. Я вошел в систему как root через SSH и перезагрузил сервер, а затем запустил «top». Сразу же он увеличился до 600 мегабайт ОЗУ и продолжал медленно увеличиваться, но не было похоже, что что-то использует ОЗУ. Я запустил "ps aux". Но по какой-то странной причине кажется, что ни одно запущенное приложение не использует более 2% оперативной памяти. Если я сложу все использование памяти из ps aux, получится около 20,6%, что, как я предполагаю, близко к 400 МБ ОЗУ, это когда было использовано более 800 МБ ОЗУ.

Мне кажется, что было использовано около 400 мегабайт оперативной памяти, хотя ни одно приложение не заявляло об этом. Со временем объем памяти медленно увеличивается, пока не израсходуется вся доступная оперативная память. Хотя до этого я еще не дошел.

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

График использования памяти от cacti:

Выход 'ps aux' и 'free -o'

Сообщите мне, если потребуется дополнительная информация.

Сначала проверьте эту страницу: Linux съел мою оперативную память.

Вы не описали какое-либо поведение, указывающее на утечку памяти, по крайней мере, на то, что я могу понять. Как объясняется на приведенной выше странице, ядро ​​будет использовать свободную оперативную память в качестве кэша чтения с диска. Байты, выделенные в качестве кеша, будут немедленно освобождены ядром для любого приложения, которое в этом нуждается.

Попробуйте бежать free вместо того -o. Когда вы это сделаете, вам будет предоставлено значение доступной оперативной памяти с учетом того, что в настоящее время используется для кеширования. Вот пример вывода одного из моих серверов:

user@host:~$ free
             total       used       free     shared    buffers     cached
Mem:        510652     430976      79676          0     134520     156876
-/+ buffers/cache:     139580     371072
Swap:       262136      40796     221340

Увидеть -/+ buffers/cache линия? Значение в free В столбце отображается фактический объем оперативной памяти, доступной вашим приложениям.

Вот моя конфигурация:

IBM M3, двухъядерный процессор, 8 ГБ ОЗУ, CentOS 5 x86_64.

Мы запускали приложение, которое должно было хранить данные в векторе, а затем помещать их в базу данных. После запуска приложения прошло несколько дней, мы запустили топ и обнаружили, что использование памяти составляет 99% +. Это выглядело странно, и я подумал, что, возможно, CentOS 5 использует какое-то кеширование памяти, но мы могли видеть видимое снижение производительности сервера.

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

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

РЕШЕНИЕ: Ну, у меня нет ничего для Cent OS 5. но мы переключили ОС на Fedora 14 x86_64. Использование памяти было менее 1%, и ядро ​​могло обрабатывать эти данные с чрезвычайно высокой скоростью без очередей. это все, что у меня есть, и я не знаю, почему CentOS не поддерживает эту аппаратную архитектуру. наша другая установка CentOS работает нормально. Но когда мы выбрали двухъядерную многоядерную архитектуру, мы наткнулись на кирпичную стену.

Надеюсь это поможет.

Спасибо

Сид