1

我有需要发布 30MB xml 数据的客户。数据为二进制形式,并经过高度加密。客户端点击我在 tomcat 上运行的 servlet,然后我通过 Servlet 获取数据request.getParameter("_xmldata");

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

1)为什么会这样?

2)无论如何我可以改进这个吗?(除了让用户通过 FTP / SSH 发送)

服务器环境:-

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

1 回答 1

1

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

所有需要的 HTTP 请求头都已经收到,这足以让服务器开始处理请求。但是一旦你打电话getParameter,它很可能仍在等待整个“字段”被接收。检查客户端和服务器之间的带宽。我非常怀疑这是一个 CPU 问题(你不需要四核)。

_xmldata您可以通过在请求中的字段之前和之后放置小的测试文本字段来稍微确认这一点。只读取周围的这些字段_xmldata。我猜想尝试阅读最后一个也会遇到与您观察到的相同的延迟。

(对于如何通过请求参数接收二进制数据,我也持谨慎态度——此外,将其移动到 String 变量中。我希望它使用 Base64 编码之类的东西进行编码......)

于 2012-01-19T03:23:42.850 回答