2015-12-22 8 views
3

У меня есть приложение J2EE, которое имеет конечную точку REST, которая позволяет загружать файлы. Приложение развертывается на jboss на сервере linux.Загрузка больших файлов приводит к NoHttpResponseException

Все хорошо, когда файлы меньше 4 Мб на нашем сервере, но когда я загрузить большой файл, я всегда в конечном итоге с:

org.apache.http.NoHttpResponseException: The target server failed to respond 

Все прекрасно работает, хотя, когда я m тестирование локально (клиент REST вызывает локальный сервер, запущенный на моей машине). Я могу даже загрузить до 10mb + без каких-либо исключений. Но когда я порадую сервер linux через REST-клиент, и файл будет больше, чем 4 МБ, я получу это исключение NoHttpResponseException. Я попытался вызвать конечную точку загрузки в самом Linux-сервере с помощью команды curl, и он работает.

Итак, я предполагаю, что это не что-то конкретное в моих кодах или настройке jboss, но проблема/конфигурация (время ожидания сервера, возможно?) На сервере linux? Может ли кто-нибудь указать мне в правильном направлении?

Все помочь оценить. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация. Благодаря!

+0

У вас установить подключение: Keep-Alive Header и настройка тайм-аут? – loopingz

+1

Когда вы говорите, что вы вызывали конечную точку выгрузки на сервере Linux с помощью curl, было ли добавление полезной нагрузки (данные «POST») размером более 4 МБ? Или это был просто простой завиток, чтобы проверить, реагирует ли конечная точка через HTTP? – HenryTK

+1

Можете ли вы предоставить код для инициализации http-клиента? Поскольку у клиентов по умолчанию установлены установленные по умолчанию таймауты, когда они не изменены, соединения после этого тайм-аута отмечены как устаревшие и очищенные – James

ответ

0

Это, скорее всего, связано с некоторой частью сетевого оборудования или конфигурацией между вашим сервером и удаленным клиентом, из которого вы выполняете большую загрузку, ЕСЛИ вы сообщаете нам, что большие закачки через локальные curl работают как на вашем сервере, так и на местной среды разработки.

Поскольку вы не описали вашу установку вне кода приложения, мы не можем дальше:

  1. Настроены keep-alive по требованию, и обеспечил все балансиры нагрузки и аналогичное оборудование будет соблюдать длительность запроса/не убивать TCP? Очень маловероятно, что ответ от Request Timeout не возникнет из сетевого сетевого оборудования, основанного на HTTP, поэтому ищите проблемы с TCP.
  2. Вы проверили, нет ли на локальном компьютере жесткого хронологического тайм-аута? Кажется маловероятным, что вы не получите ответа от Request Timeout, созданного с HTTP-сервера, но это также может быть так.
  3. Можете ли вы проверить работу небольших запросов с удаленного места? Если нет, то это может быть и так просто:
    (A) Отсутствует правило состояния брандмауэра на сервере
    (B) Вы не привязываетесь к правильному сетевому интерфейсу, например 0.0.0.0, на сервере и только на loopback/локальный интерфейс
    (C) Bad без гражданства правило для исходящего передачи, как правило отсутствующей сети ACL: въездной но не исходящее