Я разрабатываю веб-приложение и использую типичный стек ламп. Я использую dompdf для создания отчетов в pdf. В одном случае у меня есть простой список таблиц (представьте список клиентов) с некоторой простой информацией (имя, номер телефона, адрес электронной почты и т. Д.), Но у пользователя в этом списке около 400 клиентов. При попытке отобразить отчет в формате pdf превышен допустимый размер памяти и возникает ошибка. Мой вопрос в том, как мне подойти к решению этой проблемы? Если один пользователь, запускающий отчет, съедает весь мой процессор, я могу только представить это, когда 100 пользователей пытаются одновременно запускать отчеты на производственном сервере (облачный сервер в стойке)
Точная ошибка:
[Среда, 24 апреля, 01:06:54 2013] [ошибка] [клиент 127.0.0.1] Неустранимая ошибка PHP: исчерпан допустимый размер памяти 134217728 байт (попытка выделить 83 байта) в / home / redhibited / redhibited / v2 / application / библиотеки / dompdf / include / style.cls.php в строке 863, ссылка: http: //redcted.v2/reports
Нужно ли мне запускать отдельный процесс для каждого запуска отчета? Я не совсем уверен, как это сделать (думаю, мне нужно будет сделать это через PHP). В принципе, я не хочу, чтобы мой сервер останавливался при каждом запуске большого отчета. Любые мысли или советы приветствуются!
Вы можете запустить отдельный процесс, который обрабатывает все отчеты, таким образом, только один процесс должен будет занимать ресурсы вместо многих. Это было бы хорошей идеей, особенно в многопользовательской среде. Да, вы можете запускать процессы с php, проверьте документацию, например, popen ().
С другой стороны, также следует подумать, является ли это (dompdf с php) лучшим способом для больших отчетов. Существуют также другие реализации служб создания PDF-файлов, которые работают быстрее и эффективнее с ресурсами.
РЕДАКТИРОВАТЬ: Для быстрого исправления текущей ошибки вы можете увеличить лимит памяти PHP до, например, 256M, но это будет только обходной путь, а не реальное решение.