2012-01-19 84 views
1

我有客戶需要發佈30MB的xml數據。這些數據是二進制格式,並且是高度加密的。擊到Tomcat上運行我的servlet的客戶端,然後我通過 的Servlet request.getParameter("_xmldata");Tomcat request.getParameter(「_ xmldata」)對於30MB數據需要25秒

的問題是獲取數據,大約需要25秒只是到30MB的數據移動到一個字符串變量。 所以在我的腦海裏,有兩個問題:

1)爲什麼會這樣?

2)有無論如何,我可以改善這一點? (除了獲得用戶通過FTP/SSH發送)

服務器環境: -

  • CPU:四核至強5540
  • 服務器內存:4GB
  • Tomcat的堆:2GB
  • 硬盤:500GB
+0

沒有一些代碼我們什麼也做不了。 –

回答

1

我打算猜測getParameter方法仍在等待必要的數據暗示要收到的請求。您可以通過像Wireshark一樣監視您的服務器來確認這一點。

所有必需的HTTP請求標頭已經收到,這對於服務器開始處理請求已經足夠了。但是,一旦您撥打getParameter,它很可能仍在等待收到整個「字段」。檢查您的客戶端和服務器之間的帶寬。我非常懷疑這是一個CPU問題(沒有你需要一個四核心)。

通過在請求中的_xmldata字段之前和之後放置小測試文本字段,您可以稍微確認一點。請只閱讀_xmldata附近的這些字段。我猜測試圖閱讀最後一篇也會遇到與你一直觀察到的相同的延遲。我希望你能通過請求參數接收二進制數據 - 此外,將它移動到一個字符串變量中,我希望它的編碼方式像Base64編碼...)

+1

網絡帶寬也是我懷疑的。我正在與我們的生產方非常相似的無線環境(g無線網絡,即與15個活動用戶共享54Mb帶寬)進行模擬測試。我將在服務器本身運行模擬代碼。看看它運行得更快。 – Reusable

+0

發現問題!這絕對是網絡!我在本地主機上測試了相同的代碼,速度爲300ms。而我使用來自其他服務器的交叉電纜時,它只有700毫秒。當我從服務器到服務器測試時,它只有3秒。 WiFi到服務器的主要原因是速度慢,因爲我們的路由器在客戶機和服務器場網絡之間進行邏輯分區。而瓶頸實際上是在路由器上。 – Reusable