The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Ограничение количества одновременных запросов к скрипту"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы WEB технологии (Public)
Изначальное сообщение [ Отслеживать ]

"Ограничение количества одновременных запросов к скрипту"  +/
Сообщение от Nas_tradamus email(ok) on 02-Сен-09, 11:46 
Здравствуйте! У меня возникла такая ситуация:

Есть скрипт, который отдает файлы через php порциями по 8 байт, докачка и многопоточность не работают. Скрипт писался таким образом, чтобы минимизировать количество запущенных процессов Apache.

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

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

В результате - запускается множество процессов Apache. А памяти много не бывает, и Apache виснет.
Один такой процесс с php занимает около 40 мегабайт памяти (спасибо Bitrix).

Хочется сделать так, чтобы Апаче проверял не выполняется ли уже данный скрипт юзером в данный момент, и блокировал доступ потокам качалок, не дергая при этом PHP-движок.


Пожалуйста, помогите кто-нибудь решить данную проблему. Заранее, спасибо!

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Ограничение количества одновременных запросов к скрипту"  +/
Сообщение от Pahanivo email(ok) on 02-Сен-09, 16:09 
>Здравствуйте! У меня возникла такая ситуация:
>
>Есть скрипт, который отдает файлы через php порциями по 8 байт, докачка
>и многопоточность не работают. Скрипт писался таким образом, чтобы минимизировать количество
>запущенных процессов Apache.

а чо уж не по 1 байту отдавать? в 8 раз больше пакетов можно сгенерить )))
>В теории все хорошо: юзер запускает многопоточную качалку, первый поток начинает закачку,
>открываются другие потоки, но скрипт дает им отлуп, после чего качалка
>успокаивается и продолжает качать в один поток.
>
>Но есть особо наглые качалки, которые продолжают ломиться по ссылке, пытаясь начать
>закачку другими потоками. И это происходит все время, пока юзер качает
>файл (в один поток).
>
>В результате - запускается множество процессов Apache. А памяти много не бывает,
>и Apache виснет.

а по фтп не пробовал раздавать? помогает!
>Один такой процесс с php занимает около 40 мегабайт памяти (спасибо Bitrix).

процесс занимает памяти гораздо меньше - shared libraries так сказать
>
>Хочется сделать так, чтобы Апаче проверял не выполняется ли уже данный скрипт
>юзером в данный момент, и блокировал доступ потокам качалок, не дергая
>при этом PHP-движок.

сам то понял чо сморозил?
>
>Пожалуйста, помогите кто-нибудь решить данную проблему. Заранее, спасибо!

open mind for a different view, and nothing else matter ...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Ограничение количества одновременных запросов к скрипту"  +/
Сообщение от Nas_tradamus email(ok) on 02-Сен-09, 17:39 
>>Здравствуйте! У меня возникла такая ситуация:
>>
>>Есть скрипт, который отдает файлы через php порциями по 8 байт, докачка
>>и многопоточность не работают. Скрипт писался таким образом, чтобы минимизировать количество
>>запущенных процессов Apache.
>
>а чо уж не по 1 байту отдавать? в 8 раз больше
>пакетов можно сгенерить )))

Я ошибся - 8 Килобайт на самом деле.
Где-то прочитал что это оптимальный вариант.

>[оверквотинг удален]
>>успокаивается и продолжает качать в один поток.
>>
>>Но есть особо наглые качалки, которые продолжают ломиться по ссылке, пытаясь начать
>>закачку другими потоками. И это происходит все время, пока юзер качает
>>файл (в один поток).
>>
>>В результате - запускается множество процессов Apache. А памяти много не бывает,
>>и Apache виснет.
>
>а по фтп не пробовал раздавать? помогает!

А про контролируемую раздачу слышал? Это когда определенные файлы могут скачивать только определенные юзеры и статистика скачиваний заносится в базу.

>>Один такой процесс с php занимает около 40 мегабайт памяти (спасибо Bitrix).
>
>процесс занимает памяти гораздо меньше - shared libraries так сказать

Really? А top и ps меня обманывают что ли (поле RES)?

>>
>>Хочется сделать так, чтобы Апаче проверял не выполняется ли уже данный скрипт
>>юзером в данный момент, и блокировал доступ потокам качалок, не дергая
>>при этом PHP-движок.
>
>сам то понял чо сморозил?

Разумеется. Даже натыкался на патчик для Апаче, который разрешал только N одновременных запросов с 1 IP. Но там нельзя было выбирать конкретный скрипт.

>>
>>Пожалуйста, помогите кто-нибудь решить данную проблему. Заранее, спасибо!
>
>open mind for a different view, and nothing else matter ...

Сейчас установил nginx, что позволило сильно разгрузить сервер. А вот с отдачей файлов буду, видимо, разбираться по другому: буду использовать симофоры по ip адресу и в случае срабатывания триггера, буду давать отлуп с текстом "Вы в данный момент качаете файл", а не начинать отдачу с начала файла (как сейчас).
Кстати, при анализе скрипта выяснилось что он помимо прочего еще и запрашивает инфу с другого сервера (очень медленного) через xml-rpc, что отрицательно сказывается на производительности.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру