Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Нагрузка на сервер(или жестокий скрипт)
 
 автор: Deathless   (17.01.2007 в 18:00)   письмо автору
 
 

Есть у меня скрипт очень хорошенький очень нужненький =) Но он во время выполнения загружает цп моей машины на 100% (машина: AMD Athlon 64, 2200 MHz (11 x 200) 3500+ 1ГБ памяти). Впринципе не так страшно что скрипт загружает так сильно машину если он выполняется одновременно только один, но если их будет выполняться более пяти(например большое количество пользователей на сайте), то уже начинаются проблемы.
Первая проблема : Все запущенные скрипты обрываются так как прошло 30 секунд(исправляется редактированием рнр.ini)
Вторая проблема : Если решить первую увеличив время в 10 раз, то все равно скрипты не смогут дойти до конца, загрузка цп будет равномерно распределятся между ними и через некотрое время они будут остановлены изза ошибки.
Есть ли какието мысли как можно во времени разбить выполнение скрипта. Или например пока цп загрузка цп сервера >60% не давать выполнять скрипт.
Если есть какието мысли в каком направлении искать буду рад услышать.
PS. На выполнение скрипта требуется 1-3 секунды. Тест одновременного выполнения 11 скриптов 7 минут загрузки цп на 100% и в конечном итоге ошибка выполнения всех одиннадцати.

   
 
 автор: Sergey89   (17.01.2007 в 18:07)   письмо автору
 
   для: Deathless   (17.01.2007 в 18:00)
 

у меня на сервере была загрузка в 40% при:

for ($i=0; $i<36; $i++) {
    $images[] = file_get_contents('render.php?a='.($i*10));
}


При каждый вызов render.php занимал где-то 2 секунды. У Вас думаю нет таких нагрузок?

   
 
 автор: Deathless   (18.01.2007 в 00:46)   письмо автору
 
   для: Sergey89   (17.01.2007 в 18:07)
 

>у меня на сервере была загрузка в 40% при:
>
>
for ($i=0; $i<36; $i++) {
>    $images[] = file_get_contents('render.php?a='.($i*10));
>}

>
>При каждый вызов render.php занимал где-то 2 секунды. У Вас думаю нет таких нагрузок?
Один этот скрипт загружает цп до 100% на 2-3 секунды, это если кроме скрипта больше ничего я там не делаю =) А если я там еще какойто задачей займу 50% цп я даже не хочу знать что это выйдет =)

   
 
 автор: Sergey89   (18.01.2007 в 00:55)   письмо автору
 
   для: Deathless   (18.01.2007 в 00:46)
 

Показатель загрузки на домашнем компе мало что говорит. Надо замерять на самом сервере.

   
 
 автор: kasmanaft   (17.01.2007 в 18:13)   письмо автору
 
   для: Deathless   (17.01.2007 в 18:00)
 

>> не давать выполнять скрипт
Сказать ему, чтобы подождал или полностью отложить запуск?

Можно чтобы при выполнении скрипт записывал куда-нибудь "моя копия работает" .. и при запуске также смотрел не записано ли там, куда записывали, что "копия уже запущена" ... если есть запущеная копия, можно либо exit, либо sleep на неск. секунд .. можно еще сделать чтобы он в цикле бесконечном ждал пока запись не сменится на "отработала копия" и спал сколько нужно.

   
 
 автор: Deathless   (18.01.2007 в 00:47)   письмо автору
 
   для: kasmanaft   (17.01.2007 в 18:13)
 

Мне надо отложить выполение до тех пор пока не будет выполенен первый скрипт. Тобиш если он только один выполняется все впорядке но когда их много одновременно(симуляция очень большого онлайна пользователей) то выходят глюки =( Тоисть мне надо сделать чтоб например первый выполнился начал второй чтобы они запомились например данные и по очереди выполнялись.
Но вобщем идею понял и пару еще мыслей появилось, приду завтра на работу буду пытатся воплотить.

   
 
 автор: cheops   (18.01.2007 в 01:35)   письмо автору
 
   для: Deathless   (17.01.2007 в 18:00)
 

А что скрипт делает?

   
 
 автор: Deathless   (18.01.2007 в 09:04)   письмо автору
 
   для: cheops   (18.01.2007 в 01:35)
 

По СОМ(ОLE) соединяется с 1с8 Предприятием и создает там документ.

   
 
 автор: cheops   (18.01.2007 в 12:50)   письмо автору
 
   для: Deathless   (18.01.2007 в 09:04)
 

1С не может притормаживать часть запросов, пока не обработает другие? Вообще обычно быстро эта операция происходит?

   
 
 автор: Deathless   (18.01.2007 в 14:14)   письмо автору
 
   для: cheops   (18.01.2007 в 12:50)
 

1c не может, впоследствии чего выходит ошибка при попытке зафиксировать файл или таблицы базы данных 1с. Секунды 2-3.

   
 
 автор: Sergey89   (18.01.2007 в 14:27)   письмо автору
 
   для: Deathless   (18.01.2007 в 14:14)
 

А нельзя скажем организовать БД, которая будет вести учёт тех, кто сейчас запустил скрипт и ставить исполнение в очередь? В БД можно хранить ID текущей сессии пользователя, время когда от него поступил запрос. Все запросы выполняются по очереди, при этом если запрос отменён, выполнен или очень долго выполняется, то он удаляется из БД. Проверку того, кто сейчас должен выполнять запрос можно положить на AJAX, который будет опрашивать БД через PHP скрипт.

   
 
 автор: Deathless   (18.01.2007 в 15:13)   письмо автору
 
   для: Sergey89   (18.01.2007 в 14:27)
 

Да я наверно так и зделаю первый скрипт запустится запишет в БД "сервер занят", а когда скрипт завершится то запишет что свободен и пользователю сообщает что документ создан. Запускатем следующий скрипт если в бд записано "сервер занят" записываем необходимые данные для создания документа в БД и сообщить пользователю "Запись вашего документа поставлена в очередь, проверьте статус документа посже". Так тогда наверно в скрипт в конце надо добавить проверку БД на эту очередь документов если там не пусто то создать документ по записям таблиц БД. И гдето еще надо будет проверку поставить ели єтой не хватит хотя должно хватить )

   
 
 автор: Sergey89   (18.01.2007 в 15:16)   письмо автору
 
   для: Deathless   (18.01.2007 в 15:13)
 

Ну да. Самым логичным будет организовать стэк типа FIFO.

   
 
 автор: Deathless   (18.01.2007 в 15:20)   письмо автору
 
   для: Sergey89   (18.01.2007 в 15:16)
 

Да хорошо что напомнил а то создавал бы в обратном порядке )

   
 
 автор: ssdmt_   (18.01.2007 в 15:37)   письмо автору
 
   для: Deathless   (17.01.2007 в 18:00)
 

вообще! скажу так: в ЖИЗНИ довольно часто программист упирается(в РЕАЛЬНЫХ!!!! задачах) в недостаток производительности системы - даже после полугода оптимизации кода и отказа от функциональных возможностей :) .... выход один: несколько машин или несколько процессоров ... мы даже с начальником однажды поцапались когда с 10!! серваков мне дали только 2! и сказали что время обработки надо ещё уменьшить :) ... мммда

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования