У меня есть php-скрипт, который изменяет размер изображения до трех разных разрешений при загрузке. Когда я загружаю изображение, оно изменяет его размеры до 300 * 300, 80 * 80, 800 * 800, а также сохраняет исходный файл.
Сценарий, который я использую, – это ссылка: https://github.com/blueimp/jQuery-File-Upload/blob/master/example/upload.php
следующие изображения – системный монитор сервера. Первые два всплеска истории CPU – это изменение размера изображения, которое происходит при загрузке файла отдельно. Ниже перечислены файлы, которые загружаются из очереди.
Во время этой загрузки сервер не мог обрабатывать другие запросы. В то время я не смог получить доступ к другим страницам. либо страница загружается наполовину или вообще не загружается, либо загружается страница после завершения загрузки.
Мне нужно немедленное решение этой проблемы. как преодолеть эту проблему. я должен заполнить для сервера. есть ли pluggin для apache для изменения размера изображения или есть проблема с кодом.
Даже если изменение размера изображения потребовало 100% процессора в течение минуты, все равно можно было бы выполнять другие запросы: вы используете многопроцессорный сервер в многозадачной операционной системе (и, возможно, с несколькими ядрами тоже).
Однако, когда вы начинаете сеанс PHP, сеанс заблокирован : другие запросы, пытающиеся использовать один и тот же сеанс, должны ждать окончания первого запроса .
Вот почему вы не можете выполнять одновременные запросы при изменении размера изображения.
Вы должны закрыть сеанс, прежде чем выполнять длительную обработку (и в конечном итоге снова открыть его после этого).
Таким образом, это должно решить вашу проблему:
session_write_close(); resize_the_image(); session_start();
Попробуйте использовать ImageMagick для изменения размера вместо обычных функций PHP, что может немного снизить нагрузку.
Во время этой загрузки сервер не мог обрабатывать другие запросы
Я нахожу это очень удивительным, особенно учитывая, что есть 2 ядра (хотя вы не говорите, какую операционную систему / веб-сервер вы используете). Если это затронутая функция загрузки изображений, то я подозреваю, что это может быть из-за проблем в вашем скрипте PHP.
Разумеется, при обработке может быть уменьшено количество нагрузки, создаваемой сервером. Большинство из них связаны с запуском нового скомпилированного процесса (например, через exec) для обработки изображения, например, из комплекта утилит imageMagick – но не зная, какая ОС это, невозможно дать более конкретные советы.
Что касается уменьшения влияния преобразования изображения, я бы запускал управляемую очередь для обработки входящих изображений. Это обеспечит, чтобы обработка изображений работала только на одном ядре.