|
|
|
| Есть у меня скрипт очень хорошенький очень нужненький =) Но он во время выполнения загружает цп моей машины на 100% (машина: AMD Athlon 64, 2200 MHz (11 x 200) 3500+ 1ГБ памяти). Впринципе не так страшно что скрипт загружает так сильно машину если он выполняется одновременно только один, но если их будет выполняться более пяти(например большое количество пользователей на сайте), то уже начинаются проблемы.
Первая проблема : Все запущенные скрипты обрываются так как прошло 30 секунд(исправляется редактированием рнр.ini)
Вторая проблема : Если решить первую увеличив время в 10 раз, то все равно скрипты не смогут дойти до конца, загрузка цп будет равномерно распределятся между ними и через некотрое время они будут остановлены изза ошибки.
Есть ли какието мысли как можно во времени разбить выполнение скрипта. Или например пока цп загрузка цп сервера >60% не давать выполнять скрипт.
Если есть какието мысли в каком направлении искать буду рад услышать.
PS. На выполнение скрипта требуется 1-3 секунды. Тест одновременного выполнения 11 скриптов 7 минут загрузки цп на 100% и в конечном итоге ошибка выполнения всех одиннадцати. | |
|
|
|
|
|
|
|
для: 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 секунды. У Вас думаю нет таких нагрузок? | |
|
|
|
|
|
|
|
для: 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% цп я даже не хочу знать что это выйдет =) | |
|
|
|
|
|
|
|
для: Deathless
(18.01.2007 в 00:46)
| | Показатель загрузки на домашнем компе мало что говорит. Надо замерять на самом сервере. | |
|
|
|
|
|
|
|
для: Deathless
(17.01.2007 в 18:00)
| | >> не давать выполнять скрипт
Сказать ему, чтобы подождал или полностью отложить запуск?
Можно чтобы при выполнении скрипт записывал куда-нибудь "моя копия работает" .. и при запуске также смотрел не записано ли там, куда записывали, что "копия уже запущена" ... если есть запущеная копия, можно либо exit, либо sleep на неск. секунд .. можно еще сделать чтобы он в цикле бесконечном ждал пока запись не сменится на "отработала копия" и спал сколько нужно. | |
|
|
|
|
|
|
|
для: kasmanaft
(17.01.2007 в 18:13)
| | Мне надо отложить выполение до тех пор пока не будет выполенен первый скрипт. Тобиш если он только один выполняется все впорядке но когда их много одновременно(симуляция очень большого онлайна пользователей) то выходят глюки =( Тоисть мне надо сделать чтоб например первый выполнился начал второй чтобы они запомились например данные и по очереди выполнялись.
Но вобщем идею понял и пару еще мыслей появилось, приду завтра на работу буду пытатся воплотить. | |
|
|
|
|
|
|
|
для: Deathless
(17.01.2007 в 18:00)
| | А что скрипт делает? | |
|
|
|
|
|
|
|
для: cheops
(18.01.2007 в 01:35)
| | По СОМ(ОLE) соединяется с 1с8 Предприятием и создает там документ. | |
|
|
|
|
|
|
|
для: Deathless
(18.01.2007 в 09:04)
| | 1С не может притормаживать часть запросов, пока не обработает другие? Вообще обычно быстро эта операция происходит? | |
|
|
|
|
|
|
|
для: cheops
(18.01.2007 в 12:50)
| | 1c не может, впоследствии чего выходит ошибка при попытке зафиксировать файл или таблицы базы данных 1с. Секунды 2-3. | |
|
|
|
|
|
|
|
для: Deathless
(18.01.2007 в 14:14)
| | А нельзя скажем организовать БД, которая будет вести учёт тех, кто сейчас запустил скрипт и ставить исполнение в очередь? В БД можно хранить ID текущей сессии пользователя, время когда от него поступил запрос. Все запросы выполняются по очереди, при этом если запрос отменён, выполнен или очень долго выполняется, то он удаляется из БД. Проверку того, кто сейчас должен выполнять запрос можно положить на AJAX, который будет опрашивать БД через PHP скрипт. | |
|
|
|
|
|
|
|
для: Sergey89
(18.01.2007 в 14:27)
| | Да я наверно так и зделаю первый скрипт запустится запишет в БД "сервер занят", а когда скрипт завершится то запишет что свободен и пользователю сообщает что документ создан. Запускатем следующий скрипт если в бд записано "сервер занят" записываем необходимые данные для создания документа в БД и сообщить пользователю "Запись вашего документа поставлена в очередь, проверьте статус документа посже". Так тогда наверно в скрипт в конце надо добавить проверку БД на эту очередь документов если там не пусто то создать документ по записям таблиц БД. И гдето еще надо будет проверку поставить ели єтой не хватит хотя должно хватить ) | |
|
|
|
|
|
|
|
для: Deathless
(18.01.2007 в 15:13)
| | Ну да. Самым логичным будет организовать стэк типа FIFO. | |
|
|
|
|
|
|
|
для: Sergey89
(18.01.2007 в 15:16)
| | Да хорошо что напомнил а то создавал бы в обратном порядке ) | |
|
|
|
|
|
|
|
для: Deathless
(17.01.2007 в 18:00)
| | вообще! скажу так: в ЖИЗНИ довольно часто программист упирается(в РЕАЛЬНЫХ!!!! задачах) в недостаток производительности системы - даже после полугода оптимизации кода и отказа от функциональных возможностей :) .... выход один: несколько машин или несколько процессоров ... мы даже с начальником однажды поцапались когда с 10!! серваков мне дали только 2! и сказали что время обработки надо ещё уменьшить :) ... мммда | |
|
|
|