2011-10-19 13 views
0

我已經構建了一個無狀態的java servlet web應用程序,並且要求每秒接受至少5000個事務(使用150個併發線程)。我將ehcache與SQL Server 2005一起使用,以避免寫入慢速硬盤。Tomcat org.apache.catalina.connector.requestfacade.getsession()佔用44.7%以上的CPU資源

在性能測試中(使用Jmeter 150個線程),我只設法每秒獲得大約2800個事務(不到預期的一半)。當我走JVisualVM內採樣,我注意到:

org.apache.catalina.connector.requestfacade.getsession() <-- take more than 44.7% of CPU time 

任何想法,什麼是requestfacade.getsession()做的,是有辦法加快步伐?雖然我必須優化我的代碼,但我仍然需要弄清楚上面的行每秒5000甚至是不可能的。

Tomcat的CONF:

-single Tomcat實例(6.0.23) - 使用Connectir執行器時,用150 maxThread

服務器CONF:

-Windows 2008

-xeon四核

-8GB RAM

-1TB RAID 5 HDD

任何幫助是必須的感謝!

+1

如果你的servlet是真正的無狀態的,爲什麼它訪問會話? – millhouse

+0

@millhouse你能通過這個答案嗎?那麼我可以接受它作爲答案 – Reusable

回答

1

如果你的servlet是真正的無狀態的,爲什麼它訪問會話?

:-)

0

如果你正在以無狀態的方式工作,請參閱關於配置tomcat默認不創建會話。

另外,如果您使用JSP,請確保它設置爲不創建會話。

+0

我相信它是無狀態的,因爲我沒有從會話中獲取任何數據,我的servlet從HttpServlet擴展。但是,您提出了一個有趣的地方,我需要配置tomcat以不創建會話。 (我認爲,如果不需要,tomcat不會創建會話) – Reusable

+0

我認爲你可能會看到/可能是默認行爲,無論創建會話在哪裏。因此,我認爲你可以配置tomcat默認不創建會話,他們將不得不明確要求。 –