2012-07-29 28 views
2

我創建了一個Web服務客戶端和服務器。我想過要做性能測試。我試着用一個樣本測試計劃來執行它。 Upto 3000請求jboss處理了請求,但是當請求超過3000個請求未處理時(從無法打開連接的意義上說:連接被拒絕)。在哪裏我必須進行更改以同時處理超過10000個請求。要麼是jboss問題,要麼是系統吞吐量?jboss無法處理超過3000個請求

jmeter配置:300個線程,1秒爬升和10個循環升高。

系統(服務器配置):Windows 7中,4G內存

+0

因此,您只有300個併發請求,對(300個線程執行10個連續請求)?那麼你在哪裏看到客戶端或服務器上的「連接被拒絕」? – greyfairer 2012-07-29 08:43:51

+0

在jemeter響應。它從服務器獲取它。 – Arung 2012-07-29 09:04:38

回答

9

如果我必須做出改變,以處理在同一時間超過10000請求

併發請求在Tomcat中(我相信它在JBoss中使用)非常多。在典型的設置中(使用阻塞IO連接器),每個HTTP連接需要一個線程。對於普通的JVM來說這太過分了。在64位服務器機器上,一個線程需要1個MiB(請參閱-Xss參數)。而你只有4個GiB。

此外,number of context switches會殺死你的表現。您需要數百個內核纔能有效處理所有這些連接。如果你的請求是I/O或數據庫綁定的 - 你會在別處看到一個瓶頸。

這就是說你需要一種不同的方法。嘗試使用非阻塞I/O或異步servlet(自3.0開始)或...向外擴展。默認情況下,Tomcat可以處理100-200個併發連接(合理的默認值),並且有相似數量的連接正在排隊。上面的所有內容都被拒絕,你可能正在經歷這種情況。

+0

您的回覆聽起來不錯!所以我怎麼能實現一個非阻塞I/O(你是說非阻塞I/O隊列還是其他的)? – Arung 2012-07-29 09:11:17

+0

@Mayilarun:我添加了幾個鏈接到我的答案。原則上,對於異步servlet 3.0支持,您可以使用很少的線程處理多個連接。 – 2012-07-29 10:41:24

4

看到有,我認爲兩個常見的問題。首先,如果您以普通用戶的身份在Linux上運行JBoss,如果您未編輯limits.conf文件,則可能會遇到'太多打開的文件'。請參閱https://community.jboss.org/thread/155699。每個打開的套接字都被視爲Linux的「打開文件」,因此操作系統可能會因此阻塞您的連接。

其次,默認情況下,傳入連接的最大線程池大小爲200。這限制了併發請求數,即同時進行的請求。如果您有jmeter執行300個線程,則jboss連接器線程池應該更大。您可以在jboss-web.sar/server.xml中的jboss6中找到它。在元素中尋找'maxThreads':http://docs.jboss.org/jbossweb/latest/config/http.html

200是單核CPU推薦的最大值。在此之上,上下文切換開始產生太多的開銷,就像Tomasz所說的那樣。因此,對於生產用途,只能在雙核上增加到400,在四核上增加到800等。

+0

好!我會嘗試使用server.xml更改.. – Arung 2012-07-29 09:12:02