我有一个拥有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();
}
我的怀疑是:
sleep
简介会导致上传时间过长。如何编写高效的代码?提前致谢。
的问候, Kingsley Reuben J
注意:我无法使用第三方应用程序来解决此问题
答案 0 :(得分:0)
您应该将收到的数据写入临时文件(较小的块,比如8KB),因为30 * 100MB = 3GB,并且机器可能开始分页内存。吞吐量受到接口适配器的限制。
答案 1 :(得分:0)
原始解决方案的内存不足,因此堆栈器的建议(将数据存储在文件中)应该可行。通过http将文件上传到tomcat对于批量大量上传来说并不理想。
您可以尝试使用更简单的服务器/更高效的协议(例如ftp)或配置您的Application Server&amp;应用程序,以查看您的瓶颈在哪里。我想到的一件事是HTTP上传必须进行MIME解码。