2012-04-22 50 views
0

我開發一個Java通信網關(CGW),它從GPS設備獲取數據包非常緩慢的過程,並將其存儲在一個表叫直播表(數據庫在不同的服務器上運行 - 從Java CGW我通過連接池調用數據庫連接並在Live表中插入數據)。Web應用程序變得與Java

在另一方面,我們的Web應用程序也從同一個直播表中讀取數據。因此,當Java CGW應用程序啓動Web應用程序變得非常緩慢,即使第一頁也不打開。我使用SQL Server 2005的

請建議我爲什麼它正在發生。

在此先感謝。

+0

它看起來像一個線程優先級問題,也許你應該看看。 – 2012-04-22 08:00:16

+0

表格可能被CGW應用程序鎖定。因此,查詢會變慢。 – 2012-04-22 08:09:51

+0

@AmitBhargava - 我該如何解決,如果它是被鎖 – geekIndiana 2012-04-22 08:22:05

回答

0

看起來像你的問題是因爲讀線程優先級問題/保存數據似乎比預期更多的處理器時間,你可以通過調用setPriority在你的當前線程的數低於5降低線程的優先級。

爲了獲得當前線程。

Thread.currentThread().setPriority(MIN_PRIORITY); 

要知道如何正確查看Set Priority method.希望這有助於!

+0

但是我在運行我的CGW應用程序的不同服務器上調用了200個線程,這些線程我用來處理更多數據 - 因爲我們每分鐘都會從設備獲得2000個數據。對於通過連接池使用最大200連接的數據庫服務器進行插入/更新,請告訴我當使用這200個線程從設備獲取數據然後插入/更新到數據庫時,線程將如何影響操作。 – geekIndiana 2012-04-22 08:38:31

+0

我可以認爲你的數據收集過程需要大量的CPU,並且當一個連接(從web服務器)進入讀取你正在收集的數據時,處理器不會重視傳入連接,這就是你的瀏覽慢。但也許我誤解你的架構。我瞭解你的收藏過程在另一臺電腦上,但是如果不是來自網絡連接的話,你如何從中讀取數據呢? – 2012-04-22 08:46:13

+0

我正在使用HornetQ JMS系統來存儲來自設備的所有數據。 HornetQ存儲所有數據,然後我們通過TCP監聽器讀取數據,然後我們存儲在HornetQ中,同一時間我們有一個應用程序再次在同一個服務器上 - 從我們從hornetQ同時讀取200個線程的數據 - 同時每個線程一次訪問數據庫獲取數據庫來自連接池的連接對象,然後將數據插入Live表中。所有200個線程都從連接池獲取數據庫連接,並使用此連接對象將數據存儲在實時表中,同時應用程序也只讀取實時表。 – geekIndiana 2012-04-22 08:59:30

0

您是否完成了數據庫服務器的性能分析?也許DB服務器的工作負載太重了。如果Web應用程序只讀取數據,則主/從數據庫配置應解決數據庫服務器工作負載問題。

+0

您能否簡單介紹一下如何使用探查器以及如何製作主從設備架構,因爲我們正在將數據存儲在實時表中,同時我的用戶試圖通過Web應用程序訪問他們的車輛,請告訴我如何前進。 – geekIndiana 2012-04-22 09:18:51

+0

請簡要解釋 – geekIndiana 2012-04-22 10:24:09

+0

MySql支持主/從,並且它很容易設置。請參閱參考文檔在這裏:http://xorl.wordpress.com/2011/03/13/how-to-mysql-masterslave-replication/ – 2012-04-23 08:02:13

0

200線程是一個具有挑戰性的數字。

  • 什麼是系統總體架構?
  • 爲所有這些線程消耗了多少內存。
  • 如何在線程間同步數據/通信。
  • 什麼是硬件配置。
  • 是否需要使用SqlServer? jdbc:odbc橋可能比jdbc:mysql慢。

通常在多線程場景下,通信開銷相對於參與代理是指數級的。另外,處理數據的方式:許多數據的功能相同,或者多個數據類型的多個功能/階段相同?