Tomcat request.getParameter ("_xmldata") занимает 25 секунд для данных 30 МБ - PullRequest
1 голос
/ 19 января 2012

У меня есть клиенты, которым нужно разместить 30 МБ данных XML.Данные в двоичном виде и сильно зашифрованы.Клиент нажал на мой сервлет, работающий на tomcat, затем я получаю данные через сервлет request.getParameter("_xmldata");

Проблема в том, что требуется всего 25 секунд только для перемещения данных 30 МБ в переменную String,Итак, в моей голове есть два вопроса:

1) Почему это так?

2) В любом случае, я могу улучшить это?(кроме получения от пользователя отправки по FTP / SSH)

Среда сервера: -

  • Процессор: четырехъядерный процессор Xeon 5540
  • Память сервера: 4 ГБ
  • Tomcat Heap: 2 ГБ
  • Жесткий диск: 500 ГБ

1 Ответ

1 голос
/ 19 января 2012

Я собираюсь сделать ставку на предположение, что метод getParameter все еще ожидает получения необходимых данных в запросе.Вы можете подтвердить это, наблюдая за вашим сервером с помощью чего-то вроде Wireshark.

Все необходимые заголовки HTTP-запроса уже получены, чего достаточно для сервера, чтобы начать обработку запроса.Но как только вы наберете getParameter, он, вероятно, все еще ожидает получения всего «поля».Проверьте пропускную способность между вашим клиентом и вашим сервером.Я очень сомневаюсь, что это проблема с процессором (для чего вам не понадобится четырехъядерное ядро).

Вы можете в какой-то степени подтвердить это, поместив небольшие тестовые текстовые поля как до, так и после поля _xmldata в запросе.Читайте только эти поля около _xmldata.Я предполагаю, что попытка прочитать последнее также столкнется с той же задержкой, которую вы наблюдали.

(Я также буду осторожен с тем, как вы получаете двоичные данные через параметр запроса- и, кроме того, перемещая его в строковую переменную. Я надеюсь, что он закодирован с помощью чего-то вроде кодировки Base64 ...)

...