Java Tomcat request.getParameter(“u xmldata”)对于30MB的数据需要25秒

Java Tomcat request.getParameter(“u xmldata”)对于30MB的数据需要25秒,java,tomcat,getparameter,Java,Tomcat,Getparameter,我有一些客户端需要发布30MB的xml数据。数据是二进制格式的,并且经过严格加密。客户机访问我在tomcat上运行的servlet,然后我通过 Servletrequest.getParameter(“xmldata”) 问题是,仅将30MB数据移动到字符串变量大约需要25秒。 所以在我的脑海里,有两个问题: 1) 为什么会这样 2) 还有什么我可以改进的吗?(除了让用户通过FTP/SSH发送之外) 服务器环境:- CPU:四核至强5540 服务器内存:4GB Tomcat堆:2GB 硬盘:5

我有一些客户端需要发布30MB的xml数据。数据是二进制格式的,并且经过严格加密。客户机访问我在tomcat上运行的servlet,然后我通过 Servlet
request.getParameter(“xmldata”)

问题是,仅将30MB数据移动到字符串变量大约需要25秒。 所以在我的脑海里,有两个问题:

1) 为什么会这样

2) 还有什么我可以改进的吗?(除了让用户通过FTP/SSH发送之外)

服务器环境:-

  • CPU:四核至强5540
  • 服务器内存:4GB
  • Tomcat堆:2GB
  • 硬盘:500GB

我敢打赌,
getParameter
方法仍在等待接收请求中的必要数据。您可以通过使用Wireshark之类的工具监视服务器来确认这一点

已收到所有必需的HTTP请求头,这足以让服务器开始处理请求。但一旦调用
getParameter
,它可能仍在等待接收整个“字段”。检查客户端和服务器之间的带宽。我高度怀疑这是CPU问题(没有什么需要四核的)

您可以通过在请求中的
\u xmldata
字段前后放置一些小的测试文本字段来确认这一点。仅读取
\u xmldata
周围的这些字段。我猜,试图阅读最后一篇文章也会遇到与您观察到的相同的延迟


(对于如何通过请求参数接收二进制数据,以及如何将其移动到字符串变量中,我也要谨慎。我希望它是用Base64编码之类的东西编码的…)

我打赌
getParameter
方法仍在等待请求中需要接收的数据。您可以通过使用Wireshark之类的工具监视服务器来确认这一点

已收到所有必需的HTTP请求头,这足以让服务器开始处理请求。但一旦调用
getParameter
,它可能仍在等待接收整个“字段”。检查客户端和服务器之间的带宽。我高度怀疑这是CPU问题(没有什么需要四核的)

您可以通过在请求中的
\u xmldata
字段前后放置一些小的测试文本字段来确认这一点。仅读取
\u xmldata
周围的这些字段。我猜,试图阅读最后一篇文章也会遇到与您观察到的相同的延迟


(对于如何通过请求参数接收二进制数据,以及如何将其移动到字符串变量中,我也要谨慎。我希望它是用Base64编码之类的东西编码的…

没有一些代码我们什么都做不了。没有一些代码我们什么都做不了。我也怀疑网络带宽。我正在一个与我们的生产端非常相似的无线环境(g无线网络,这意味着与15个活跃用户共享54Mb带宽)上运行模拟测试。我将在服务器本身中运行模拟代码。查看它是否运行得更快。发现问题!这绝对是网络!我在本地主机上测试了相同的代码,速度是300ms。虽然我使用了来自其他服务器的交叉电缆,但它只有700毫秒。当我从一台服务器到另一台服务器进行测试时,只有3秒钟。wifi到服务器速度慢的主要原因是,我们的路由器正在客户端机器和服务器场网络之间进行逻辑分区。而瓶颈实际上是在路由器上。网络带宽也是我所怀疑的。我正在一个与我们的生产端非常相似的无线环境(g无线网络,这意味着与15个活跃用户共享54Mb带宽)上运行模拟测试。我将在服务器本身中运行模拟代码。查看它是否运行得更快。发现问题!这绝对是网络!我在本地主机上测试了相同的代码,速度是300ms。虽然我使用了来自其他服务器的交叉电缆,但它只有700毫秒。当我从一台服务器到另一台服务器进行测试时,只有3秒钟。wifi到服务器速度慢的主要原因是,我们的路由器正在客户端机器和服务器场网络之间进行逻辑分区。而瓶颈实际上是在路由器上。