Tomcat最大并发文件上载数

时间:2010-12-14 13:36:26

标签: tomcat file-upload scalability servlets

我有一个拥有250个连接线程的Tomcat服务器。当我模拟30个文件(每个100 MB)的并发文件上载时,服务器机器的CPU和RAM内存达到峰值,即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();
}

我的怀疑是:

  • Tomcat服务器可以处理的最大并发文件上载数(每100 MB文件数)是多少?
  • 我的代码中是否需要进行任何优化才能使用所有250个连接线程?
  • sleep简介会导致上传时间过长。如何编写高效的代码?

提前致谢。

的问候, Kingsley Reuben J

注意:我无法使用第三方应用程序来解决此问题

2 个答案:

答案 0 :(得分:0)

您应该将收到的数据写入临时文件(较小的块,比如8KB),因为30 * 100MB = 3GB,并且机器可能开始分页内存。吞吐量受到接口适配器的限制。

答案 1 :(得分:0)

原始解决方案的内存不足,因此堆栈器的建议(将数据存储在文件中)应该可行。通过http将文件上传到tomcat对于批量大量上传来说并不理想。

您可以尝试使用更简单的服务器/更高效的协议(例如ftp)或配置您的Application Server&amp;应用程序,以查看您的瓶颈在哪里。我想到的一件事是HTTP上传必须进行MIME解码。