WebSphere MQ 性能調優淺談(二)

二、 與隊列屬性有關的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 設置多個隊列提高並行處理能力
例如在總部,可以針對每一個分支機構設置一個隊列,採用多個應用程序讀取這些隊列;對於同一個隊列,也可以採用多個進程/線程同時進行讀取操作。

三、與日誌有關的MQ性能考慮因素:

1 把MQ的log 和queue files 放在不同的文件系統上。即將/var/mqm/log, /var/mqm文件系統分開。

在安裝MQ的時候,我們經常推薦大家創建兩個文件系統,即/var/mqm/log和/var/mqm,為了提高MQ的性能,我們建議把這兩個文件系統放在不同的物理磁盤上,以提高磁盤I/O的效率。這是由於,在記錄數據日誌時,MQ會同時更新位於/var/mqm下的隊列文件以及位於/var/mqm/log下的數據日誌,因此建議把它們放在不同的物理盤上。

2 擴大MQ的日誌文件大小和個數

在qm.ini配置文件中,有一小節是專門控制MQ的系統日誌的,如下所示:

Log:

LogPrimaryFiles=3

LogSecondaryFiles=2

LogFilePages=1024

LogType=CIRCULAR

LogBufferPages=17

LogPath=/var/mqm/log/QM1

其中,LogPrimaryFiles和LogSecondaryFiles指定了日誌文件的個數,LogFilePages指定了每個日誌文件的大小,LogBufferPages指定了日誌緩衝區的大小,這些參數都可以影響MQ的性能。

增大這些參數的設定值,可以提高性能。例如:假設您設計MQ的日誌總容量為128MB,那麽,採用2個64MB的日誌文件的性能,要優於採用24個4MB的日誌文件。這是因為它減少了日誌文件切換的次數和頻率,尤其在AS/400系統上,更為顯著。

在unix系統中,LogFilePages的缺省值為1024,即4MB,最大值為16384,即64MB。而Primary和Secondary日誌文件的總個數不能超過63個。為了提高性能,我們可以將LogFilePages和LogPrimaryFiles設置為較大的值,這可以通過MQ的控制命令crtmqm來設置,方法如下:

crtmqm -lf <LogFilePages> -lp <LogPrimaryFiles> -ls <LogSecondaryFiles>

或者通過修改qm.ini文件來設置。

除了物理日誌文件的大小和個數之外,LogBufferPages代表日誌緩衝區的大小,增大它的數值,也可以提高性能,如:可以把它的值設置為最大,即512x4K pages=2MB,這樣,在日誌寫盤操作時,可以一次將2MB的數據從緩衝區寫入磁盤。修改LogBufferPages的方法是修改qm.ini文件來實現。

 

四、與channel有關的MQ性能考慮因素:

1. 選擇偵聽程序(Listener)的線程/進程運行方式:

MQ的偵聽程序有兩種配置和啟動方式,一種是通過配置/etc/inetd.conf文件選擇使用inetd方式, 也可以使用MQ自身提供的runmqlsr程序,所不同的是:runmqlsr 是一個線程應用,所以比inetd需要更少的內存消耗。因此,採用runmqlsr方式可以提高通道相關的性能。

2. 選擇通道的線程/進程運行方式

與偵聽程序類似,與MQ通道對應的MCA代理程序也可以有線程和進程兩種運行方式,可以通過定義通道的MCATYPE屬性來設置通道MCA的運行方式為thread方式。讓通道以線程方式運行而非進程方式運行,這樣可以減少通道運行的進程個數和消耗的內存資源。

對於以上兩點,要注意的是:當通道的連接個數很多時,如在Unix平台上超過500個時,建議MCATYPE和listener採用進程的方式。

3. 設置偵聽程序的trusted運行方式

4. 與MQ應用程序類似,MQ的通道偵聽程序也有trusted(fastpath)和non trusted(standard)兩種運行方式,採用trusted運行方式可以降低CPU和內存消耗。將通道和偵聽程序設置為trusted方式運行的方法是通過修改qm.ini配置文件中的MQIBindType參數來實現,即創建或修改qm.ini文件中與Channels相關的小節,例如:

Channels:

  1. MQIBindType=FASTPATH 或者
    MQIBindType=STANDARD

其中,FASTPATH表示trusted運行方式,而STANDARD表示非trusted運行方式。

4. 加大通道的PipeLineLength屬性

5. 從MQ版本V5.2開始,MQ提供了一個新的通道參數,即PipeLineLength屬性,通過該屬性,可以設置MCA採用多個線程的方式來傳輸消息,從而成為提高通道性能的又一個手段。缺省情況下,該參數數值為1,任何大於1的設置MQ本身都會將其設置為2。

設置PipeLineLength的方法是修改qm.ini文件的Channels一節,如下:

Channels:

  1. PipeLineLength=2

注意,必須在通道兩端都進行設置,否則會自動取兩者之間的最小值。

5. 設置MaxChannels和MaxActiveChannels屬性

6. MaxChannels和MaxActiveChannels分別代表隊列管理器允許配置的通道的最大個數和允許同時運行的通道的個數,MaxChannels的缺省值是100,MaxActiveChannels的缺省值與MaxChannels相同。如果您的並發通道連接個數超過了100,您需要修改這兩個參數。這對於大並發的Client/Server間通訊尤為重要。

6. 調整通道的Batchsz( )屬性

7. 通道的Batchsz( )值是影響通道性能的一個關鍵參數。在MQ進行消息傳輸時,通道對消息的處理也是在同步點的控制之下並具有交易特性的,在以下條件滿足時,它將統一提交一批消息:
當發送的消息個數達到BATCHSZ時;或傳輸隊列為空,並且在BATCHINT指定的時間間隔內一直沒有消息到達時。

缺省情況下,通道的Batchsz是50,這是一個較為合理和優化的設置。一個小的Batch size值會使每條消息佔用大的資源。比如,假設我們在局域網的情況下,Batch size值越大,通道的性能越好。然而,在廣域網環境下,要根據網絡狀況的好壞來設置該參數,若網絡狀況很差,Batch size值越大,可能會導致通道的性能越差。

7. 推薦在兩個隊列管理器之間同方向上建立一條通道。

8. 設置通道的NPMSPEED(FAST)屬性。

如前所述,MQ的消息分為永久性消息和非永久性消息兩種,對於非永久性消息,通道屬性NPMSPEED可以設置為FAST和NORMAL,為了提高性能,可以設定該屬性為FAST。

除了隊列、隊列管理器日誌大小、通道和API的使用和設置對MQ性能的影響之外,MQSeries的性能與系統的資源或性能息息相關,如系統的CPU, RAM, Disk (I/O), network等方面的配置會直接影響WebSphere MQ的性能,在此,就不一一列舉

以下文章點擊率最高

Loading…

     

如果這文章對你有幫助,請掃左上角微信支付-支付寶,給於打賞,以助博客運營

發表評論

您的電子郵箱地址不會被公開。 必填項已用*標註