Столкнулся с проблемой постепенно увелечения потребления памяти.
Стоит Сузи 11.4, используется как шлюз в интернет, работает только в текстовом режиме, без установки какой-либо графической облочки.
Из сервисов подняты:
Bind 9.7.3
Squid 3.1.11 (прозрачный)
Apache2
Стоит считалка vnstat
и анализатор логов Squid - lightsquid
ну и iptables.
Проблема именно в том, что потребление памяти растет в зависимости от времени работы машины, т.е. после перегрузки всего уходит порядка 200Мб памяти, через неделю работы цифра достигает 2 с лишним Гигов (у меня стоит 4Гб), и память не высвобождается, пока не перегружишь машину.
Хотелось бы услышать дельные советы по борьбе с этой заразой, т.к. перегрузать постоянно машину тоже не выход
сейчас как раз собираю статистику по free за несколько дней. Видет явный рост потребления памяти. Как только наберу за неделю выложу.
Причем очень большой объем идет на cashed и buffer.
А вот за 13 мая, просто free
total used free shared buffers cached
Mem: 4008528 1372452 2636076 0 140116 823224
-/+ buffers/cache: 409112 3599416
Swap: 4192252 0 4192252
Как видно расход увеличисля почти в два раза. Если перегрузить систему, то занимаемая память падает до 300Мб, а потом при постоянной работе шлюза память постепенно съедается.
Надеюсь, кто-либо уже сталкивался с этой проблемой.
По приведённым вами данным хорошо видно, что реальное потребление памяти за два дня возросло аж на семь (!) мегабайт. “Ужас-ужас, кошмар, моя система за два дня съела семь мегабайт памяти, спасите-помогите!” Намёк понятен?
не совсем с вами согласен. Берем только использованную память.
от 15 мая лог идет в мегабайтах (2196Мб), а от 13 мая лог идет в колобайтах. Следовательно приводит от 13 числа в мегабайты, получаем условно 1340Мб.
Итак разница 856 Мб.
За намек спасибо. Но я считаю, что такой расход не нормальный, тем более что система работает в текстовом режиме. Как я уже говорил такое поведение системы приводит к тому, что через 7-10 дней не остается свободной памяти.
Вот например свободной памяти на конец дня сегодня:
Похоже проблема получается в том, что он не высвобождает кэшируемую память, т.к. если взять разницу использованной памяти и кэша, то в любой день получатается приблизительно одинаково.
Следовательно вопрос, как освобождать память кэша?
А то что-то не хочется постоянно перегружать комп, тем более что он работает в качестве шлюза.
Ещё раз: я основываюсь на ваших данных. Вы выложили информацию, из которой ясно видно что реально за два дня потреблено 7 мегабайт (и да, я заколебался делить все числа от 13 мая на 1024, чтобы привести их к одной единице измерения). Не надо ничего перезагружать, всё прекрасно работает. Вы не очень хорошо поняли мой намёк, ибо до сих пор для оценки потребления памяти смотрите не на то число. Вчера у вас было занято 406 мегабайт, а сегодня 405. Учитывая, что памяти на вашем “шлюзе” аж 4 гига, результат более чем удовлетворительный.
Согласен это мой просчет, что сразу не стал вести лог в мегабайтах.
но я смотрю на то число. Для примера вывод free -m от 15 Мая на 17 часов вечера:
free -m total used free shared buffers cached
Mem: 3914 2628 1286 0 276 1945
т.е. второе число это использованая память (2628Мб), а третье это свободная (1286Мб). Так вот свободная падает, что в итоге приводит к тому, что я из локалку жду пока загружиться мой апаче со статистикой от Сквида. Хотя вначале он просто летает.
Еще раз привожу свою идею о том, что если вычесть из использованной памяти 2628Мб, кэш 1945Мб, то я получаю приблизительно 700Мб занятой памяти. т.е. мое предположение, что кэш постоянно растет, кстати это видно по статистике, и к сожалению он не обнуляется
Вы по-моему не совсем понимаете что такое кеш и как он работает. Зачем вам свободная и неиспользуемая память? По логике работы кеша он должен занимать всю свободную простаивающую память, потому как чем больше кеш в размерах тем больше вероятность что в нем будут необходимые данные и системе не придется лезть далеко (например на винчестер) Кэш — Википедия](http://ru.wikipedia.org/wiki/Кэш#Кэширование_внешних_накопителей)
Конечно в жизни система действует более разумно, оставляет свободной какой то небольшой кусочек памяти не более 5-10%, что бы ей не пришлось в экстренном порядке очищать очень много память если какому нибудь приложению понадобится больше памяти.
Теперь к вашей ситуации, так как памяти у вас очень много и похоже компьютер активно не работает с винчестером, то есть кешировать особо нечего, по-этому кеш у вас не большой и занимает не всю предоставленную ему память.
Сравните с моим ноутом:
Такое количество “свободной” памяти, нормально. Память по возможности должна использоваться вся, а не простаивать без дела. Так работают все системы.
Так что проблема с загрузкой статистики или что там у вас происходит, не связана с памятью. По крайней мере с тем числом на которое вы смотрите.
Значит все-таки система должна забирать всю свободную память под кэш?
Тогда в этом случае, как посмотреть кто забирает память под кэш?
Насчет работы с жестким диском, в принципе постоянно идет запись логов сквида, пишутся системные логи, но вообщем-то и все.
У меня почему возник этот вопрос, я собираюсь добавлять сервисы на систему, а получается что свободной памяти уже нет, она вся в кэше, значит начнет задействоваться своп? или я не прав?
И еще спасибо за предосталенный free -m с вашего нотника, немного успокаивает, что не только у меня такая ситуация
Ещё раз: реально занятой памяти у вас чуть больше 400 мегабайт. Я боюсь, что без реальных утечек вы состариться успеете прежде, чем система свопиться начнёт…
Stranger_v_night К сожалению вы не прочитали или не поняли что такое кеш файловой системы. Смотрите… системе нужен какой нибудь фаил на диске, она его читает с диска, это долго, дает программе его запросившей и записывает в кеш(лишнюю не занятую программами память) навсякий случай вдруг скоро опять понадобится(может некогда не понадобится). Через некоторое время другой или той же программе опять нужен этот же файл, система уже не читает его с диска, а быстро берет из памяти. Это позволяет ускорить работу системы, вы возможно замечали что опенофис или другая долго запускающаяся программа второй раз запускается быстрее так как системе уже не надо читать все файлы с жесткого диска. То есть любой кеш нужен только для ускорения. В кеше нет важной информации это дублирование информации на диске, поэтому система в любой момент может стереть что нибудь из кеша нечего не потеряв, и освободить память для программы. В каком то смысле она считается свободной.