утечка памяти в скрипте, за час сжирает гиг оперативы

Статус
В этой теме нельзя размещать новые ответы.

misty

Новичок
утечка памяти в скрипте, за час сжирает гиг оперативы

скрипт отдает мп3файл пользователю, в момент когда около 20 человек одновременно качают файлы, апач сжирает от гига до двух после чего сервер виснет, работает через nginx+apache. php версии 5.1.2

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

Утечка заключается в том, что отдавая контент нджинксу, память не освобождается (

PHP:
$attachment = 'attachment;';
if(!$content = @file_get_contents($row['path'].$row['fname'])){
        $content='error';
    $row['fname'] = 'error.html';
    $row['size']  = strlen($content);
    $attachment = '';
    header('Content-type: '.mime_content_type($row['path'].$row['fname']));
        header('Content-Disposition: '.$attachment.' filename='.$row['fname']);
        header('Content-length: '.$row['size']);
    echo $content;
    exit;
    }

if ($row['fname'] != 'error.html') {
        $range = (int) substr($headers['Range'], 6);
    $content = substr($content,$range);
    header('HTTP/1.1 206 Partial Content');
    header('Accept-Ranges: bytes');
    header('Content-Range: bytes '.$range.'-'.($row['size']-1).'/'.$row['size']);
    } else {
    header("HTTP/1.0 200 OK");
    }

header('Content-type: '.mime_content_type($row['path'].$row['fname']));
header('Content-Disposition: '.$attachment.' filename='.(($conv_charset)?iconv($in_charset, $out_charset,$row['fname']):$row['fname']));
header("Content-length: ".($row['size'] - (int)$range));

echo $content;

exit;
 

SiMM

Новичок
> в момент когда около 20 человек одновременно качают файлы, апач сжирает от гига до двух
А что же вы хотите от такого кода
> if(!$content = @file_get_contents($row['path'].$row['fname']))
И файлы то поди все здоровенные, а не в пару десятков килобайт.
И вообще - зачем вам понадобилось отдавать файл скриптом?
 

misty

Новичок
антилич система, за музыку надо платить, модреврайт не подходит по опр причинам.
 

misty

Новичок
по инфраструктурным, а недостаток этого метода куки, у некоторых их нету или стоит запрет.

спасибо за пасстру, покопаем в этом направлении.
 

SiMM

Новичок
> а недостаток этого метода куки, у некоторых их нету или стоит запрет
Этот метод лишь иллюстрация и в целом привязки к кукам не имеет - ничто не мешает вместо куки проверять наличие файла с параметром из REQUEST_URI.
 

misty

Новичок
В общем никто не знает гду тут утечка памяти?

касательно модреврайт, еще раз говорю это не приемлемо, в связи с инфраструктурой портала.
 

tony2001

TeaM PHPClub
да никакой утечки тут нет.
скрипт читает _в память_ весь файл.
умножь средний размер файла на кол-во чайлдов апача и получишь систему, ушедшую в свап.
 

alan4ick

Guest
тихий ужас
использовать в прокшен сайте столь не обдуманное решение для бинарных файлов
 

misty

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

-~{}~ 15.01.06 19:55:

Автор оригинала: alan4ick
тихий ужас
использовать в прокшен сайте столь не обдуманное решение для бинарных файлов
Можешь порекомендовать что-то лучше, чем это? не используя модреврайт?
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху