Buldozer
Новичок
Утечка памяти?
есть скрипт вида
Т.е. для каждого пользователя вызывается некоторая функция, которая выбирает определенные данные и отдает их на вход второй функции которая генерирует текстовые файлы содержащие эти данные.
Проблема следующая:
в случае если данных для записи очень много(т.е. slave внутни main вызывается очень много раз), скрипту на выполнение $query2 "не хватает сил", - $result = mysql_query($query); возвращает false. Т.е. что-то похожее на утечку памяти.
Было выявлено, что виной всему является вот этот кусок кода из функции slave:
если его закомментировать в slave, то скрипт работает нормально.
Вроде не должно тут быть никакой утечки? Разъясните пожалуйста ситуацию.
-~{}~ 14.06.07 22:45:
Причем тормоза накапливаются только в пределах одной итерации main(); - т.е. может обработаться несколько тыс. пользователей с сумарным кол-вом вызовов slave() в 1млн. раз, и тормозов не будет... пока очередь не дойдет до некого "обломного юзера" с 30 тыс. вызовами slave(), и собственно на нем все обломается. И если обработать этого юзера первым, то на нем сразу же и обломается.
Т.е. это накопление? идет только в пределах одной итерации main().
Хотя по идее даже если бы там что-то накапливалось, то оно должно было остаться/обнулиться внутри slave(), как только та отработает.
есть скрипт вида
PHP:
function main($user_id)
{
$query1 = ...
for...
{
$row = mysql_fetch_array($result)
slave($user_options_list)
}
$query2 = ...
for...
{
$row = mysql_fetch_array($result)
...
slave($user_options_list)
}
}
function slave($user_options_list)
{
...
$fp = @fopen("$full_patch", "r");
@flock($fp, 1);
$fp = @fopen("$full_patch", "w");
@fputs($fp, "$content");
@flock($fp, 3);
@fclose($fp);
}
foreach($list_user as $value)
{
main($value);
}
Проблема следующая:
в случае если данных для записи очень много(т.е. slave внутни main вызывается очень много раз), скрипту на выполнение $query2 "не хватает сил", - $result = mysql_query($query); возвращает false. Т.е. что-то похожее на утечку памяти.
Было выявлено, что виной всему является вот этот кусок кода из функции slave:
PHP:
$fp = @fopen("$full_patch", "r");
@flock($fp, 1);
$fp = @fopen("$full_patch", "w");
@fputs($fp, "$content");
@flock($fp, 3);
@fclose($fp);
Вроде не должно тут быть никакой утечки? Разъясните пожалуйста ситуацию.
-~{}~ 14.06.07 22:45:
Причем тормоза накапливаются только в пределах одной итерации main(); - т.е. может обработаться несколько тыс. пользователей с сумарным кол-вом вызовов slave() в 1млн. раз, и тормозов не будет... пока очередь не дойдет до некого "обломного юзера" с 30 тыс. вызовами slave(), и собственно на нем все обломается. И если обработать этого юзера первым, то на нем сразу же и обломается.
Т.е. это накопление? идет только в пределах одной итерации main().
Хотя по идее даже если бы там что-то накапливалось, то оно должно было остаться/обнулиться внутри slave(), как только та отработает.