Увеличение нагрузки на сервер при изменении размера php-образа - PullRequest
4 голосов
/ 09 сентября 2011

У меня есть скрипт php, который изменяет размер изображения до трех разных разрешений при загрузке. Когда я загружаю изображение, оно изменяет его до 300 * 300, 80 * 80, 800 * 800, а также сохраняет оригинальный файл.

Сценарий, который я использую, является следующей ссылкой https://github.com/blueimp/jQuery-File-Upload/blob/master/example/upload.php

На следующих изображениях показан системный монитор сервера. Первые два всплеска истории процессора - изменение размера изображения, которое происходит при индивидуальной загрузке файла. Ниже приведены файлы, загруженные из очереди.

CPU WORKLOAD

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

Мне нужно немедленное решение этой проблемы. как преодолеть эту проблему. Я должен заполнить для сервера. Есть ли плагин для Apache для изменения размера изображения или есть проблема с кодом.

Ответы [ 3 ]

10 голосов
/ 09 сентября 2011

Даже если изменение размера изображения занимает 100% ЦП в течение минуты, все равно можно было бы выполнять другие запросы: вы используете многопроцессорный сервер в многозадачной операционной системе (и, вероятно, также с несколькими ядрами).

Однако при запуске сеанса PHP сеанс заблокирован : другие запросы, пытающиеся использовать тот же сеанс, должны дождаться окончания первого запроса .

Вот почему вы не можете выполнять параллельные запросы во время изменения размера изображения.

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

Итак, это должно решить вашу проблему:

session_write_close();
resize_the_image();
session_start();
1 голос
/ 09 сентября 2011

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

0 голосов
/ 09 сентября 2011

Во время этой загрузки сервер не смог обработать другие запросы

Я нахожу это очень удивительным, особенно учитывая, что есть 2 ядра (хотя вы не говорите, какую операционную систему / веб-сервер вы используете). Если это влияет только на функциональность загрузки изображений, то я подозреваю, что это может быть связано с проблемами в вашем PHP-скрипте.

Конечно, возможно уменьшить количество нагрузки, создаваемой сервером во время обработки. Большинство из них включают запуск нового скомпилированного процесса (например, через exec) для обработки изображения, например. из пакета утилит imageMagick - но, не зная, что это за операционная система, невозможно дать более конкретный совет.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...