WebSphere HTTP 500 при копировании файла размером 10 ГБ

Конфигурация: у нас есть веб-сервер iPlanet, который находится перед кластером портала WebSphere 6.1 (2), развернутым на компьютерах с Linux.

Когда пользователь пытается скопировать 10-гигабайтный файл через файловые системы (подключенные через NFS), мы используем среду выполнения Java для копирования файла в другое подключение по NFS, надеясь, что это будет быстрее, чем при использовании любых других java-библиотек.

proc = rt.exec("cp " + fileName + " " + outFileName);

Развернутое приложение представляет собой приложение с портлетом JSF.
а) время ожидания сеанса составляет 60 минут на сервере приложений и в приложении
б) у нас есть вызов Ajax со страницы клиента, чтобы поддерживать сеанс в рабочем состоянии.

Пользователь получает HTTP 500 в течение 3 минут, в то время как наши логи показывают, что файл все еще копируется. Не знаете, почему WebSphere отправляет HTTP 500?

Через 10 минут файл копируется, и когда он нажимает «Обновить», он может продолжить.

Не уверен, что вызывает этот HTTP 500.


person napa77    schedule 17.12.2012    source источник


Ответы (2)


Потоки WebContainer не должны использоваться для длинных задач. Он получает 500 через 3 минуты, потому что это время, когда WebSphere решает, что поток завис.

То, что вы должны сделать, это использовать WorkManager для выполнения этой длинной задачи, и клиент может опросить, чтобы проверить статус задачи.

Если вы планируете обновиться до WAS v8/v8.5 в ближайшем будущем, хорошей идеей будет использовать для этого Asynchronous Servlets

person Aviram Segal    schedule 17.12.2012

Причина, по которой ваш клиент получает ошибку HTTP 500 через несколько минут, может быть вызвана несколькими причинами. Без трассировки стека и соответствующей регистрации невозможно узнать, какой компонент в WebSphere «проснулся» через 3 минуты и все остановил. Это может быть параметр тайм-аута WebSphere для пула потоков веб-контейнера, или это может быть какой-то другой тайм-аут — это легко сделать из журналов.

Чтобы исправить это, вы можете сделать одно из следующих действий:

  • Настройте соответствующее значение тайм-аута (опять же, в зависимости от того, какой тайм-аут).
  • Измените свой дизайн, чтобы длительные задачи выполнялись в фоновом режиме. Вы можете использовать Work Manager API для этого или асинхронные bean-компоненты/сервлеты.
person Isaac    schedule 17.12.2012