При экспорте в Java Servlet Excel запрос обновляется каждые 300 секунд, даже если первый еще не выполнен. - PullRequest
0 голосов
/ 04 октября 2010

Я работаю над программой, которая часто выполняет экспорт в 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.

Ответы [ 2 ]

0 голосов
/ 05 октября 2010

Оказывается, у нас на стороне сервера был Apache, пытающийся выполнить какую-то балансировку нагрузки, когда запросы сервлета занимают слишком много времени, но поскольку других серверов не было, он просто повторил бы тот же запрос, что еще больше усугубило проблему. Я установил WLIOTimeout в httpd.conf и httpd-ssl.conf на большее число, и у нас больше нет проблемы. Спасибо.

0 голосов
/ 04 октября 2010

Похоже, ваш запрос занимает больше времени, чем фактический тайм-аут.Я знаю, что EJB-запрос RMI имеет время ожидания 300 секунд в weblogic по умолчанию.Если вы используете EJB (или какой-то другой странный материал, использующий RMI), я предлагаю вам изменить timeout-config.Если вы не используете EJB, я думаю, что лучше всего искать конфигурацию веб-логического запроса с этим значением времени ожидания.

...