Tomcat Максимальное количество одновременных загрузок файлов - PullRequest
1 голос
/ 14 декабря 2010

У меня есть сервер Tomcat с 250 потоками соединений.Когда я имитирую одновременную загрузку файлов для 30 файлов (каждый по 100 МБ), загрузка ЦП и ОЗУ серверного компьютера достигает пика, т.е. 95% использования.

Я использую следующий блок кода для чтения данных файла из HTTP Post.

// request is instance of HTTPServletRequest
int nDataLength = request.getContentLength();

byte dataBytes[] = new byte[nDataLength];

int bytesRead = 0;
int totalBytesRead = 0;
int bytesLimit = 1024;

InputStream in = new InputStream(request.getInputStream());
try
{
    while(totalBytesRead < nDataLength)
    {
        bytesRead = in.read(dataBytes, totalBytesRead, bytesLimit);
        totalBytesRead  += bytesRead;
    }
}
catch(Exception ex)
{
    throw ex;
}
finally
{
    in.close();
}

Мои сомнения:

  • Какое максимальное число может бытьОдновременная загрузка файлов (каждые 100 МБ файлов), которые может обрабатывать сервер Tomcat?
  • Требуется ли какая-либо оптимизация в моем коде для использования всех 250 потоков соединений?
  • Представление sleep можетвызвать длительные загрузки.Как написать эффективный код?

Заранее спасибо.

С уважением, Kingsley Reuben J

ПРИМЕЧАНИЕ. Я не смогу использовать сторонние приложения для решения этой проблемы.проблема

Ответы [ 2 ]

0 голосов
/ 14 декабря 2010

У вас не хватает памяти с исходным решением, поэтому предложение укладчика (хранение данных в файле) должно работать.Загрузка файлов через http на tomcat просто не идеальна для массовых загрузок.

Вы можете попробовать использовать более простой сервер / более эффективный протокол (например, ftp) или профилировать свой сервер приложений и приложение, чтобы увидеть узкое место.Одна из вещей, которая приходит на ум, это то, что HTTP-загрузки должны быть MIME-декодированы.

0 голосов
/ 14 декабря 2010

Вы должны записать полученные данные во временный файл (небольшими блоками, скажем, 8 КБ), начиная с 30 * 100 МБ = 3 ГБ, и, возможно, ваша машина начнет выгружать память.Пропускная способность ограничена вашим интерфейсным адаптером.

...