2010-04-03 69 views
3

我注意到我的應用程序有時非常慢,所以我做了一些測試。 這是一個非常簡單的網絡應用程序。一個servlet獲取一些參數,而不是存儲它們。 除了一件事以外,一切都很好。第一次獲取參數需要很長的時間。我嘗試獲得哪個參數並不重要,但第一次它非常緩慢。奇怪的是,這並不總是發生。有時第一次獲取參數並不慢。Servlet請求getparameter的性能

我的代碼看起來像這樣

request.getParameter("paramName"); 
request.getParameter("paramName2"); 
request.getParameter("paramName3"); 

獲得 「PARAMNAME」 是緩慢的。獲得其他人非常快。

慢我的意思是:200-800毫秒 通過非常快我的意思是:〜0毫秒 (代碼片段,我沒有寫性能測試,但我使用System.currentTimeMillis()

UPDATE

我已經將我的項目導出到.WAR文件中,並將其部署到Tomcat。一切安好。所以我認爲這個問題與Eclipse有關。

回答

2

我懷疑這些參數可能會被懶惰地解析 - 當你第一次詢問參數時,它可能會解析所有內容,並將它們存儲起來,以便以後進行高效訪問。

但是,200ms聽起來像一個非常長的時間......這是當你在一個調試器下運行?

當然,這完全依賴於你的servlet容器。

+0

不,我沒有調試。我在Eclipse上使用Tomcat 6。只需按「在服務器上運行」即可。這很奇怪,我只是不明白。 200毫秒聽起來非常長,但通常是600甚至800 – Bob 2010-04-03 12:15:39

+1

@Bob:如果這隻發生在第一個請求,它可能是JIT編譯大量的代碼。如果它發生了*每個*請求,我懷疑你的性能測量有什麼問題 - 或者你在486上運行:)認真的說,如果Tomcat花費了600毫秒(甚至200毫秒)來分析請求參數,它會是不能用於任何嚴重的部署。 – 2010-04-03 12:18:36

+0

我也觀察過Jetty,事實上我發現很多第一個方法執行都很慢(相對於後續調用),有沒有辦法讓我確認這是由於JIT編譯? – Sudarshan 2014-02-19 09:50:57

0

你有足夠的內存嗎?使用Eclipse和部署服務器時,您需要很多工作,聽起來像是交換。

+0

我的計算機中有4GB,並且已經設置了這樣的VM參數:-Xms1024M -Xmx1024M。 – Bob 2010-04-03 12:45:06

1

聽起來像 Eclipse的內置webbrowser中的一個錯誤,它不會正確發送Content-Length標頭。我從經驗中無法分辨,因爲我從未認真對待過。我總是將項目部署到集成的Tomcat或Glassfish,啓動它,然後只需打開網頁瀏覽器(Firefox,Chrome,Safari,IE等,您可以從Eclipse中獨立運行)來打開網頁real。這有很大的好處,你可以使用任何瀏覽器的插件和插件,這可以大大簡化開發,如Firebug和配套。

如果您在使用Eclipse內部的網頁瀏覽器堅持,嘗試改變轉到窗口> Web瀏覽器內部Web瀏覽選擇其他使用的網頁瀏覽器。