У меня есть приложение Play Framework (Play 2.8, Scala 2.13 и Java 8), которое создает миниатюры JPG из загруженных файлов PDF, используя Apache PDFBox 2. Миниатюры создаются по запросу, затем кэшируются в файловая система. Однако, когда один пользователь пытается отобразить галерею со многими PDF-файлами, для которых не кэшируются миниатюры, одновременно создается несколько миниатюр, и сервер вылетает с OutMemoryError (кажется, достаточно 5 или 6 одновременных задач). Сервер перезагружается автоматически и снова становится доступным через несколько десятков секунд, но создаваемые миниатюры повреждены, и мне приходится сталкиваться со многими недоступностями.
PDFBox настроен на использование временных файлов, но память не используется происходит при рендеринге миниатюрного изображения.
На сервере доступно только 2 ГБ ОЗУ. Размер загруженного файла PDFS составляет около 1 МБ, а размер созданных миниатюр - около 100 КБ (72 DPI; размер около 500 × 1000 пикселей). Можно ли исправить эту проблему без увеличения размера кучи? В идеале Play должен иметь возможность автоматически ставить в очередь эти запросы с интенсивным использованием памяти, но я могу жить, ограничивая количество одновременных задач с интенсивным использованием памяти вручную, каким-то образом ...