PHP Memory_get_peak_usage игнорирует использование памятиPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 PHP Memory_get_peak_usage игнорирует использование памяти

Сообщение Anonymous »

Проблема по PHP-коду:
Проблемный сервер (nginx/1.26.2 с php-fpm8.2, 8.2.26 (cli), Zend Engine v4.2.26):

Код: Выделить всё

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
$file="/var/www/html/test2.jpg";
$src_img=imagecreatefromjpeg($file); // completely ignores this commands memory usage of 300M+

print 'Memory usage: '. round(memory_get_peak_usage(true)/(1024*1024)) . 'M
'; //returns 2M
(это сообщает 2M)
Рабочий сервер (apache, PHP 8.3.14 php83-cgi, Zend Engine v4.3.14):

Код: Выделить всё

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
$file="/var/www/html/test2.jpg";
$src_img=imagecreatefromjpeg($file); // works correctly 300M+

print 'Memory usage: '. round(memory_get_peak_usage(true)/(1024*1024)) . 'M
'; //returns 300M+
(по данным 300M+)
Текст:
У меня PHP php-fpm8.2 с nginx работает (Debian 12, VPS). Но на этом VPS Memory_get_peak_usage не учитывает imagecreatefromjpeg(); использование памяти, то есть около 300M+, поэтому php.ini Memory_limit также игнорируется и составляет 10M (поскольку php сообщает только 2M), если не хватает памяти (поскольку реальное использование составляет 300M+), служба PHP прекращается (если доступная память 300 или меньше система прекратит службу php).
Этот скрипт работает на каком-то другом общем сервере Apache и правильно отображает использование памяти около 300 МБ, но на этом ВПС показывает только 2М. Команда Linux top также показывает использование памяти около 300 МБ.
Почему Memory_get_peak_usage ведет себя неправильно на VPS.
Если у кого-то есть опыт, поделитесь. Спасибо!
*Я обновил свой «Проблемный сервер» до 8.3.15 с php.ini по умолчанию, все еще игнорируя память GD.
*Чтобы воспроизвести ошибку: Установите свежий Debian 12 (VPS при условии, что у меня SMP PREEMPT_DYNAMIC Debian 6.1.119-1, 6.1.0-28-amd64, x86_64). Я установил пакеты Debian по умолчанию nginx и PHP (не версию Apache), установил php-gd, запустил код test.php или просто использовал командную строку (проверено на двух разных серверах VPS Debian 12):

Код: Выделить всё

sudo php /var/www/html/test.php
отчеты Использование памяти: 2M
(Вы можете использовать изображение обычного размера в своем тесте или использовать мое изображение, модуль библиотеки GD использует много памяти)
*Это огромная проблема: если кто-то загрузит на этот сервер небольшое изображение, но с огромным разрешением, которое занимает более 3 ГБ памяти сервера, PHP позволит это сделать , и веб-сайт/приложение выйдет из строя из-за нехватки памяти службы PHP.

Подробнее здесь: https://stackoverflow.com/questions/793 ... mory-usage
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»