二、 與隊列屬性有關的MQ性能考慮因素
1 消息的永久性和非永久性
大家知道,MQ的消息分為永久性消息和非永久性消息兩種,永久性消息是保存在硬盤存儲介質上的,需要紀錄日誌的;相反,非永久性消息是存儲在內存中的,不需要硬盤讀寫,因此使用非永久性消息的性能比永久性消息的性能要高很多,具體而言,最大可以提高近十倍。要注意的是,只有永久性消息的可靠性是可以保證的,即在發生故障,如當系統重啟或隊列管理器重啟時,可以保證不丟失。因此,應根據您的業務需求和網絡狀況來確定消息的屬性。
2 調整隊列的相關參數設置:
對於隊列而言,除了可以通過MQSC的”define queue”命令設置它的屬性之外,有另外兩個參數直接影響隊列的性能,而這兩個參數只有通過qm.ini文件進行設定。它們分別是:隊列文件的大小(Maximum amount of bytes in a queue)和為每一個隊列的非永久性消息保留的內存大小(Maximum amount of memory reserved for non-persistent messages),它們的缺省值分別對應於DefaultQFileSize和DefaultQBufferSize這兩個參數。
隊列的定義存儲在硬盤上,並且在隊列被打開時申請資源。我們可以設置隊列DafaultQFileSize和DafaultQBufferSize兩個參數來確定隊列的定義參數,這些參數在隊列管理器重啟時生效,下面分別給予描述。
1) 隊列文件大小
缺省情況下,隊列文件在硬盤上的大小最大是320M, 它會被預先分配195kb內存,這195kb內存會在隊列打開時獲得。隊列文件的大小最大值可以達到1G bytes, 這可以通過設置DefaultQFileSize參數來設定,當其設為1G時,隊列打開時會申請350kb內存。
2)非永久性消息對應的內存大小
缺省情況下,對每個隊列而言,用來存儲non-persistent消息的共享內存是64kb, 我們可以通過修改DafaultQBufferSize參數將其增加至1MB。在打開隊列的時候,要申請如此數量的內存,因此它直接影響到隊列管理器需要的內存資源的大小,包括實存和虛存。推薦值是把該值設製成64kb的兩倍,即128kb。永久性消息是存在硬盤上的,而非永久性消息是存在內存中的,當設定的buffer不夠時,要進行磁盤交換,速度就會減慢,把它擴大後,若不進行硬盤交換,讀取隊列的速度就會快。當然,對該參數的修改也取決於系統實際物理內存的大小。
修改這兩個參數的方法是更改隊列管理器配置文件qm.ini的相關參數,具體方法舉例如下:
在qm.ini文件中增加如下一節:
TuningParameters:
DefaultQBufferSize=128000
DefaultQFileSize =1000000000
3 隊列的深度和隊列上的消息的長度的設置也會影響性能。
對每一個隊列而言,都會被分配一個設定的buffer size,當磁盤I/O很高時,說明隊列的buffer size滿了,從而產生了硬盤交換。每個消息的大小乘以隊列的深度決定了隊列上消息占內存的大小,可以增加隊列的個數或者增加隊列的buffer size來提高性能。
4 設置多個隊列提高並行處理能力
例如在總部,可以針對每一個分支機構設置一個隊列,採用多個應用程序讀取這些隊列;對於同一個隊列,也可以採用多個進程/線程同時進行讀取操作。
以下文章點擊率最高
Loading…