Назад | Перейти на главную страницу

Почему из-за медленного скрипта весь мой сайт останавливается?

у меня есть PHP сценарий, который использует cURL чтобы загрузить файл с другого сервера.

Размер файла около 24 МБ. Я понимаю, почему сам скрипт, загружающий файл, требует немного времени для выполнения, однако любой запрос к сайту во время выполнения скрипта будет выполняться до тех пор, пока скрипт не завершится.

Этого не произошло на нашем старом общем сервере с тем же сценарием. Новый сервер является облачным. Я увеличил количество узлов до 10 (выделенный ЦП 6 ГГц, оперативная память 3760 МБ, пропускная способность 2500 ГБ), и это не повлияло на эту проблему.

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

Есть идеи, почему это могло происходить?


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

Теперь ключевой вопрос: что еще делает ваш сценарий, кроме извлечения этого файла? Обрабатывает его и вставляет данные в базу данных? Возможно, в вашей старой среде у вас был MySQL с таблицами InnoDB, а в новой среде MySQL с таблицами MyISAM.

MyISAM требует полной блокировки таблицы во время операций записи вместо блокировок на уровне строк, которые есть в InnoDB, поэтому это может привести к зависанию вашего сайта, если ваш фактический сайт использует те же таблицы, что и сценарий curl.

Возможно, вы сможете «ignore_user_abort (true)», а затем использовать перенаправление HTTP на странице на другую страницу.

PHP 5 также имеет неплохую многопоточность, которая тоже может помочь.