mysql_close и освобождение памяти

Pegiy

Guest
mysql_close и освобождение памяти

Борюсь с утечкой памяти, пока безуспешно.
Почему судя по по memory_get_usage после закрытия коннекта к mysql память ни на байт не освобождается?


$db = new DB;
$id_connect = $db->connect();

... много всяких запросов к базе ....

var_dump(memory_get_usage());
mysql_close($id_connect);

var_dump(memory_get_usage());
unset($data);

var_dump(memory_get_usage());
unset($tpl);

var_dump(memory_get_usage());

результат:
int(1821920)
int(1821920)
int(1794856)
int(1794792)
 

zerkms

TDD infected
Команда форума
Pegiy
а после запросов что должно оставаться в памяти?
 

440hz

php.ru
после закрытия коннекта к mysql память ни на байт не освобождается
а должна? 8)

я думаю диспетчер освобождает память при необходимости, а так чего за зря работать? хотя могу и ошибаться.
 

Pegiy

Guest
Надеялся, что должна
Иначе куда память уходит?
Перегружаю апач, после чего свободная память с 700M живо уменьшается до 300M, видимо, выбирают все активные пользователи (~100), потом стабилизируется, но по 1-2M в минуту уменьшается, хотя кол-во пользователей не растет.
Почему так?
 

kruglov

Новичок
> но по 1-2M в минуту уменьшается
И что, кончается вся и начинается swap?
 

Pegiy

Guest
нет, снижается до 100M
потом может плясать вокруг, иногда падая до 30М

при этом я не понимаю насколько это критично
иногда при загрузке процессора - 70%, системы -30%, свободной памяти - 10M
сайт отлично работает, не тормозит,
а иногда при свободном проце и памяти может зависнуть на несколько секунд. Из-за базы? Как проверить?
 

Pegiy

Guest
раз на раз не приходится
трудно поймать момент

а что с утечкой?
mysql_close() не должен высвобождать память?
 

AnToXa

prodigy-одаренный ребенок
mysql_close() не должен высвобождать память?
память под структурки соединения - да, а под результаты запросов - ни в коем случае.

правда все равно память освобождается по окончании работы скрипта.
 

Pegiy

Guest
тогда почему утекает?
если количество пользователей постоянно - пришли/ушли
скрипт выдачи страницы не зависает, отрабатывает меньше чем за полсекунды.
по логике, память должна выбраться этими 100 пользователями, где-то до 300М, а дальше плясать вокруг этой точки.
 

AnToXa

prodigy-одаренный ребенок
это откуда у вас такие магические цифры-то? логика не женская случайно?
 

Pegiy

Guest
не случайно нет
какие именно?
100 и 300? в топе вижу
 

AnToXa

prodigy-одаренный ребенок
1. у тебя не freebsd случайно? там inactive в top - это свободная.
2. память не утекает, она может например: расходоваться под кеши, дисковые, сетевые, апачевские пулы и т.д.
если память есть, то ее выгодно использовать, а не просто свободной держать, иначе зачем она вообще сдалась, красавица.
 

.des.

Поставил пиво кому надо ;-)
Pegiy если у Вас linux, то то что просто свободной памяти всегда мало 30-100M это нормальное явление обратите внимание в топе на значение cached, скорее всего вся ваша память там. и, как уже сказал АнТоХа это нормально.
 

Pegiy

Guest
у меня фря :)

я бы и не обращал на это внимание, но никак не могу разобраться почему при запуске другого скрипта,обрабатывающего большой объем данных, система иногда немного подвисает (проц становится занят на 70%-80%). Но при этом так же часто бывает, что при такой загрузке все шустро вертится. Вот и хочу понять на какие другие показатели обращать внимание.

А реально ограничить для скрипта процент загрузки процессора?
 

Toshka

Новичок
а зачем mysql освобождать память? ему дали задание - он его выполнил, значит данные актуальны и незачем их сразу выкидвать из памяти. если памяти мало будет - тогда уже и освободит ненужную. по моему, логично:)
 
Сверху