激活規範的最大批處理大小 (Max Batch Size) 同樣影響着性能。最大批處理大小是指在一批串行傳遞中可以為一個端點分配的消息數,它的默認值是 1。舉例來說,如果您將”最大並發端點數”屬性設為 10,將最大批處理大小屬性設為 3,那麼最多可以有 10 個端點且每個端點最多可以處理 3 條消息,從而分配給該 MDB 線程的消息總數就是 30 條。最大批處理大小參數決定了多少消息可以被一次性從消息層取出並傳送給應用層(值得注意的是這並不意味着這是在一個事物內完成的,所以這個設置並不會影響事物處理的作用域)。為改善性能和可擴展性,特別是對大型多核系統,需要增加與 SCA 模塊和長流程 (Long Running Process) 相關的激活規範的最大批處理大小參數,例如可以將其增加到 8。
如圖 6 所示,可以在控制面板上通過以下路徑查找並修改該參數:資源 > JMS > 激活規範 > 激活規範名稱。
如果根據單個 JMS 激活規範部署了多個 MDB ,那麼這些屬性對於每個 MDB 都適用。
如果使用 MQ ,通用 JMS 或 MQ JMS 綁定,則通過偵聽器端口來配置消息隊列和 MDB 間的連接。此時,最大會話 (Maximum Sessions) 屬性同激活規範的最大並發端點數的作用是一致的。
該屬性默認值是 1,通常需要將其增大到一個適當的值,具體的設置應取決於您的特定業務環境。如果大多數事務運行時間都很短,並且達到了 100% JMS 工作負載,那麼可以考慮從每個處理器 2 到 4 個會話開始進行調優。如果有較長運行時間的事物存在,您可能需要更多會話。最大消息 (Maximum Messages) 屬性決定了在同一上下文中一個 MDB 的 onMessage() 方法可以被調用多少次,即一個會話中可以處理的消息數量。
如圖 7 所示,可以在控制面板上通過以下路徑查找並修改該參數:服務器 > 應用程序服務器 > 通信 > 消息傳遞 > 消息偵聽器服務 > 其他屬性 > 偵聽器端口 > 偵聽器端口名稱。
每一個會話運行在一個偵聽器端口線程中,而消息偵聽器端口線程池又是共用的, 所以消息偵聽器端口線程池大小應該遠大於任意偵聽器端口的最大會話屬性。
線程池的大小直接影響到服務器並發運行應用程序的能力。舉例來說,增加最大並發端點數或最大會話參數只能夠保證從 JMS 或 MQ 隊列中並發地讀取消息;為了能夠並發處理請求,還需要增加相應的線程池大小,從而允許更多的 MDB 線程並發運行。
一般情況下,需要進行調優的線程池有以下三個:Default ; ORB.thread.pool 和 WebContainer。可以通過在控制面板上訪問 服務器 > 應用程序服務器 > 其他屬性 > 線程池 來查看。
MDB 工作被分派給從默認線程池 (Default) 中分配的線程。值得注意的是除非指定另外一個線程池,否則在這個應用服務器上的所有 MDB 共用這個線程池。這意味着默認的線程池大小需要大於,很有可能是顯着地大於任意 MDB 的最大並發端點數。
最大大小 (Maximum size) 參數定義了在線程池中最多能夠維護的線程數量,它的默認值是 20。當使用 Tivoli Performance Viewer 進行監控時,請注意 PercentMaxed 參數,它代表了配置的線程被使用的次數。如果 PercentMaxed 參數一直保持在兩位數,則需要考慮提高線程池的最大大小。下圖是壓力較低狀態下的 Default 線程池性能參數列表。
圖 11. 通過 Tivoli Performance Viewer 查看 PMI PercentMaxed
運行在 WPS 上的很多任務共用默認的線程池,為提高性能,你可以根據需要為 JMS MDB 的運行指定專用的線程池。
請遵循以下的步驟為 JMS MDB 線程更改線程池:
1)在服務器上創建一個新的線程池,例如命名為 MDBThreadPool;
以下文章點擊率最高
Loading…