Я работаю над программой, которая часто выполняет экспорт в Excel из таблиц гипермассивной базы данных. Один тестовый пример, который я сейчас делаю, делает около 300k строк на 40 столбцов в одном листе xlsx. Это завершается примерно через 6 минут или около того, занимая около 1,1 ГБ ОЗУ, но я столкнулся с серьезным зависанием - по прошествии ровно 300 секунд я вижу этот шаблон запуска в журналах:
2010-10-04 13:15:13.201 ID0000 GRP=| Executing Excel Export
2010-10-04 13:20:13.156 ID0000 GRP=| Executing Excel Export
2010-10-04 13:21:25.041 ID0000 GRP=| Excel Output Completed
2010-10-04 13:25:13.114 ID0000 GRP=| Executing Excel Export
2010-10-04 13:26:34.315 ID0000 GRP=| Excel Output Completed
2010-10-04 13:30:13.074 ID0000 GRP=| Executing Excel Export
2010-10-04 13:31:28.854 ID0000 GRP=| Excel Output Completed
По сути, он выполняет тот же запрос после почти ровно 300 секунд, таким образом удваивая использование моей оперативной памяти (до очень неудобных 2 ГБ) и задерживая ответ, в то же время приводя к излишнему использованию ЦП, поскольку он связывает другое ядро. Кроме того, поскольку запрос обновлен, браузер не отлавливает результаты первого запроса, который, как вы можете видеть, завершился вскоре после выполнения второго запроса. Таким образом, пользователь вообще не видит выходных данных, а сервер потребляет все больше и больше ресурсов.
Я повторил это поведение в IE8 и в Firefox и попытался использовать response.setHeader ("Refresh", "999999"); в классе сервлетов.
Мы используем Aspose.Cells для выполнения экспорта, но, похоже, он не связан ни с чем, что делает библиотека, так как я могу подтвердить, что весь запрос повторяется от начала до конца, а не только вызов Aspose.
Кто-нибудь знает, есть ли свойство, которое я могу установить, на нашем сервере weblogic или в браузере, которое останавливает это поведение?
Редактировать: Я могу подтвердить, что это происходит даже после закрытия окна браузера - я продолжаю видеть сообщения «Выполнение экспорта в Excel» каждые 5 минут. По сути, они продолжаются, пока я не перезапущу сервер weblogic.