Fail при скачивании файла с помощью CFContent

С помощью Coldfusion очень легко организовать файловое хранилище с функцией поиска. Coldfusion без труда может проиндексировать PDF и другие документы с помощью Verity или Solr, может поработать с картинками с помощью CFImage и покопаться в метаданных, может даже вытащить теги из MP3 записей. Однако, проблема может ждать там где не ожидаешь - Coldfusion пасует при скачивании больших файлов (больше 1ГБ).

Организовать процесс скачивания файла, да еще спрятать настоящее размещение (название) файла можно двумя строчками:

<cfheader name="Content-Disposition" value="attachment; filename="someothername.avi" />
<cfcontent file="c:/somefile.avi" />

Однако, этот простейший код оказывается весьма прожорливым, когда речь идет о скачивании больших файлов. При скачивании 100МБ файлов никаких трудностей не возникло. При этом, вместо ожиданного видео-файла размером 1ГБ, я смотрел на "Ошибку 500, сервис недоступен". Coldfusion занимал в памяти около 450МБ в состоянии покоя. График потребление памяти таков:

CFContent fail 500

Попробовал перегрузить сервис, в надежде что он освободит немного памяти, но безрезультатно:

CFContent download restart fail

Потом немного прибавил памяти виртуальной Java-машине, с 512МБ по-умолчанию до 768МБ. Не помогло.

CFContent jvm fail

Тестировалось на первом официальном релизе Coldfusion 9.0.0.251028, под Windows Vista, на компьютере с 2-ядерным процессором и 2ГБ оперативки. Тестировалось на J2EE инсталляции Coldfusion + Glassfish, а также на чистом обычном Coldfusion (JRun). В качестве веб-сервера выступали и IIS и Apache.

Решения проблемы скачивания 1ГБ файлов у меня пока нет. Могу сказать одно - Railo 3.1 установленный на Tomcat 6 справился с задачей на отлично - при этом потребление памяти выросло с 37 до 42 МБ...

Автор: Родион Быков | Опубліковано: 26.03.2010 о 15:34 | Категорії: ColdFusion 9 -

Відгуки