2012-04-20 21 views
0

我們有一個三層Java應用程序,Jboss作爲應用程序服務器,MS Sql Server作爲db服務器。我們使用jdbc類型4從應用程序服務器連接到Db服務器。jdbc over tcp/ip比本地機器慢得多

我們已經看到,如果在不同的機器上運行Jboss和DB服務器,那麼在同一臺計算機上運行Jboss和DB服務器會使性能提高約50%。如何解釋如此大的差異? 運行Jboss和數據庫服務器的機器是非常好的工作站(具有最好的英特爾CPU可用),網絡是具有商業標準基礎結構的1Gb以太網。

您認爲這是我們網絡上的問題(延遲,吞吐量等),還是有其他一些原因可以解釋這種差異?

回答

1

嗯,有太多的可能性: 1)網絡設置 2)防火牆 3)的通信服務 4)等實施

我建議禁用所有的服務,選擇,過濾器和然後嘗試逐個啓用。 如果這不起作用,那麼檢查你的代碼。

祝你好運,這並不容易!

2

下列因素可能會影響性能在上述情況下,

1)網絡延遲在訪問DB:在本地機器上,這將是小於1毫秒。如果數據庫服務器&應用程序服務器位於不同位置,則延遲時間會更長。如果您爲發送特定請求發出「n」個數據庫調用,則延遲將是n * 2 *延遲。

解決方案:減少撥打電話。使用緩存作爲參考數據集。

2)位置訪問應用服務器的:如果用戶位於美國&應用程序服務器是印度那麼網絡的響應時間大約爲200ms。如果在頁面上加載了許多css & js文件,根據使用的瀏覽器會導致很多延遲。

解決方案:將所有js文件合併爲一個文件。使用GZip js & css。縮小JS。有效使用瀏覽器緩存。

3)如果上述兩個不是瓶頸,請檢查CPU,內存&磁盤在部署應用程序的服務器上的速度。

1

不知道您的配置,SQL Server默認使用命名管道作爲傳輸。在本地,這將是一個比TCP/IP更快的內存內進程通信。如果是遠程的,那麼管道需要通過TCP/IP傳輸,這會增加TCP/IP協議棧(以及實際傳輸)的封送/解封處理的開銷。

你說你使用TCP,但它可能是你實際上在本地使用命名管道。你的連接字符串是什麼樣的?

相關問題