Новичок
Покинул форум
Сообщений всего: 1
Дата рег-ции: Дек. 2007
Помог: 0 раз(а)
|
Всем привет! Тема такая, куда запостить-то и не поймешь... Если не туда, больно не пинайте, а переместите, куда надо)
Уважаемые гуру, очень нужна ваша помощь! Недавно столкнулся с такой проблемой.
Многие, наверно, знают скрипт php Rapid Get Pro (который Vincoma). У меня есть 2 виртуальных серва, один (ВПС) на дебиан 3.1, второй (ВДС) на дебиан 4.0. На обоих стоят стандартные (бинарники с апта) апач2.2.3 билд от 17 июня 07 и пхп5 (5.2.0-8+etch7).
На первом хосте, который Sarge, никаких проблем. Скачка-закачка идет 500-2500кбайт на поток, несколькими потоками свободно забиваются все 100Мбит канала. На втором же при скачивании НА сервер суммарная скорость не превышает 2Мбайт, при этом если запускать больше конкурирующих закачек, скорость каждой из них падает, а суммарная остается без изменений (качал с разных сервов), wget'ом тянет отлично, так что каналы в поряде. Однако, если заливать С сервера, проблемы чудесным образом исчезают, и несколькими потоками запросто удается утилизировать весь канал. Это совсем меня сбило с толку...
Пробовал собирать апач и пхп руками из тарболов - результат тот же. Тестил дома на vmware (Дебиан 4.0) (качал файлы с локального сервера на физической машине на серв в виртуалке) - тож самое. Настройки пхп и апача такие же как и на первом сервере, пробовал оставлять по дефолту - без толку.
До 2Мбайт/с это по хттп, по фтп (опять же сокетами) удалось разогнать до суммарных ~4Мб, где, уже не помню, толи на серве, толи дома.
Вспомнил про валяющийся на харде *.iso Юбунту 6 сервер. Поставил с комплектным лампом. Скорость на поток стала вообще 100-150кбайт. Почему, я понять не могу. В скрипте есть функция регулирования нагрузки на процессор, вставляющая ожидание в n микросекунд каждые m тактов процессора. В некоторых пределах позволяет управлять скоростью потока. Но ни длительность микросекунды, ни частота моего процессора не изменились, скорость же потока упала на юбунту в 4-5 раз. Почему - опять не понятно. Попробовал отключить вовсе на проблемном серве. Скорость потока подскочила до 1500-2000, против старых не более 1000 (загрузка процессора следом почти до 100))), но в сумме при нескольких потоках - скорость та же, не более 2000. С включенным ограничением, но с увеличенным количеством рабочих тактов, удается начти золотую середину, но опять же суммарная скорость не более 2Мбайт/с при загрузке CPU ~50%.
При ожидании в 1мкс каждые 10 тактов загрузка не превышает 5-10% на процесс апача, скорость потока ~1000. Кстать, кто может сказать, почему трансфер по сокетам так грузит процессор, без ограничений грузит на 100% не зависимо от скорости, при вставке ожидания каждые неск. тактов нагрузка падает в разы быстрее, чем скорость. Получается сеть/удал.серв. просто не может отдавать быстрее, а CPU все равно на 100 грузит, с ограничением можно добиться той же скорости потока при гораздо меньшей нагрузке на проц.
Сейчас качаю Сарж, попробую на нем дома.
С вгетом никаких проблем при скачивании нет, исходящий поток скриптом тоже без проблем, а с входом такая чертовщина... Ведь с точки зрения системы сокет он и есть сокет, никакой разницы быть не должно... Короч, я в полном ступоре, может я чего не знаю/не понимаю? Бьюсь 4-ый день...
И еще, от чего зависит количество параллельных скачек, которое получается запустить? Обычно запускается 4-7 (на сарже, на етче не более 4-5), далее висит пустое окно с ожиданием вывода от скрипта пока не закончится хоть одна закачка (стоит игнор юзер аборт). Причем в лисе больше 2 не запускалось, в опере - 4-7. Средняя загрузка CPU далека от 100%. Момент тоже мне не понятный. В скрипте никаких ограничений подобного рода нет. Очень надеюсь на вашу помощь, особенно по первой части поста.
|