[AIX]

AIX 上資源問題的其他檢查

如何判定及解決連接至 IBM® MQ 資源的問題,包括 IBM MQ 處理程序的資源使用、判定及解決與資源不足相關的問題,以及資源限制配置。

用於調查資源問題的有用指令及配置檔

在系統上顯示現行值或對系統進行暫時變更的有用指令:
ulimit -a
顯示使用者限制
ulimit -Ha
顯示使用者硬性限制
ulimit -Sa
顯示使用者軟性限制
ulimit -<paramflag> <value>
其中 paramflag 是資源名稱的旗標,例如 s 代表堆疊。

如果要永久變更系統上的資源限制,請使用 /etc/security/limits.conf/etc/security/limits

調整 IBM MQ 或核心參數之前的基本檢查

您需要調查下列項目:
  • 作用中連線數是否在預期限制內。

    例如,假設當使用者處理程序數目不大於 3000 時,您的系統已調整為容許 2000 個連線。 如果連線數目增加至超過 2000 個,則使用者處理程序數目已增加至超過 3000 個 (因為已新增應用程式) ,或發生連線洩漏。

    若要檢查這些問題,請使用下列指令:
    • [AIX] IBM MQ 處理程序數目:
      ps -elf|egrep "amq|run"|wc -l
    • 連線數:
       echo "dis conn(*) all" | runmqsc <qmgr name>|grep EXTCONN|wc -l
    • 共用記憶體用量:
      ipcs -ma
  • 如果連線數高於預期限制,請檢查連線來源。
  • 如果共用記憶體用量非常高,請檢查下列數目:
    • 主題
    • 開啟佇列控點
  • IBM MQ 視景,需要檢查並調整下列資源:
    • 資料區段
    • 堆疊區段
    • 檔案大小
    • 開啟檔案控點
    • 共用記憶體限制
    • 執行緒限制
  • 請使用 mqconfig 指令來檢查現行資源使用情形。
附註:
  1. 前述文字中列出的部分資源需要在使用者層次進行調整,而部分資源則需要在作業系統層次進行調整。
  2. 前述清單不是完整清單,但對於 IBM MQ所報告的大部分一般資源問題已足夠。
  3. [Linux]需要在執行緒層次進行調整,因為每一個執行緒都是輕量型處理程序 (LWP)。

IBM MQ 或應用程式建立執行緒或處理程序時發生問題

xcsExecProgramxcsCreateThread中的失敗
探測 ID、錯誤訊息及元件
來自 IBM MQ 處理程序 (例如 amqzlaa0) 或應用程式的 XY348010 (來自 xtmStartTimerThread )
XC037008 來自 xcsExec程式 ,錯誤碼為 xecP_E_PROC_LIMIT ,來自 amqzxma0
XC035040 xcsCreate執行緒
XC037007 來自具有 xecP_E_NO_RESOURCExcsExec程式
xcsCreate執行緒 失敗,後面接著擷取失敗資料的 xecP_E_NO_RESOURCE ,例如 zlaMain 中的 ZL000066
探測 ID 可能不同。 檢查錯誤碼 xecP_E_PROC_LIMITxecP_E_NO_RESOURCE
從 pthead_create 報告 errno 11 的錯誤訊息,例如:AMQ6119S: An internal IBM MQ error has occurred ('11 - Resource temporarily unavailable'from pthread_create.)
解決 AIX® 上的問題
pthread_create 或 fork 因 EAGAIN 而失敗時, IBM MQ 會設定錯誤碼 xecP_E_PROC_LIMIT
EAGAIN
檢閱並增加使用者處理程序數目上限及堆疊大小使用者處理程序資源限制。
ENOMEM
pthread_create 或分出 ENOMEM 失敗時, IBM MQ 會設定錯誤碼 xecP_E_NO_RESOURCE
請檢查並增加堆疊大小和資料資源限制。
附註:
  • 您可以使用 ulimit 指令,或變更資源限制配置檔,來增加使用者程序資源限制。
  • 使用 ulimit 指令所做的變更是暫時的。 修改 /etc/security/limits/etc/security/limits.conf ,使變更成為永久。 您必須檢查作業系統上的實際配置,因為配置可能不同。
  • 您也應該檢閱 OS 手冊 (例如, pthread_create 的線上指令說明) ,以取得資源問題及調整資源限制的詳細資料,並確定已適當地配置資源限制。
  • 您也應該檢查系統是否缺少資源 (記憶體和 CPU 兩者)。

建立共用記憶體時發生問題

錯誤 :shmget 失敗,錯誤碼 28 (ENOSPC)
| Probe Id          :- XY132002                                               |
| Component         :- xstCreateExtent                                        |
| ProjectID         :- 0                                                      |
| Probe Description :- AMQ6119: An internal IBM MQ error has occurred         |
|   (Failed to get memory segment: shmget(0x00000000, 2547712) [rc=-1         |
|   errno=28] No space left on device)                                        |
| FDCSequenceNumber :- 0                                                      |
| Arith1            :- 18446744073709551615 (0xffffffffffffffff)              |
| Arith2            :- 28 (0x1c)                                              |
| Comment1          :- Failed to get memory segment: shmget(0x00000000,       |
|   2547712) [rc=-1 errno=28] No space left on device                         |
| Comment2          :- No space left on device                                |
+-----------------------------------------------------------------------------+
MQM Function Stack
ExecCtrlrMain?
xcsAllocateMemBlock
xstExtendSet
xstCreateExtent
xcsFFST

shmget 失敗,錯誤碼 22 (EINVAL)
| Operating System  :- SunOS 5.10                                             |
| Probe Id          :- XY132002                                               |
| Application Name  :- MQM                                                    |
| Component         :- xstCreateExtent                                        |
| Program Name      :- amqzxma0                                               |
| Major Errorcode   :- xecP_E_NO_RESOURCE                                     |
| Probe Description :- AMQ6024: Insufficient resources are available to       |
|   complete a system request.                                                |
| FDCSequenceNumber :- 0                                                      |
| Arith1            :- 18446744073709551615 (0xffffffffffffffff)              |
| Arith2            :- 22 (0x16)                                              |
| Comment1          :- Failed to get memory segment: shmget(0x00000000,       |
|   9904128) [rc=-1 errno=22] Invalid argument                                |
| Comment2          :- Invalid argument                                       |
| Comment3          :- Configure kernel (for example, shmmax) to allow a      |
|   shared memory segment of at least 9904128 bytes                                                   |
+-----------------------------------------------------------------------------+
MQM Function Stack
ExecCtrlrMain
zxcCreateECResources
zutCreateConfig
xcsInitialize
xcsCreateSharedSubpool
xcsCreateSharedMemSet
xstCreateExtent
xcsFFST

非預期的處理程序終止及佇列管理程式損毀,或佇列管理程式損毀

處理程序非預期地結束,後面接著來自 amqzxma0的 FDC
範例 FDC:
Date/Time         :- Mon May 02 2016 01:00:58 CEST
Host Name         :- test.ibm.com
LVLS              :- 8.0.0.4
Product Long Name :- IBM MQ for Linux (x86-64 platform)
Probe Id          :- XC723010
Component         :- xprChildTermHandler
Build Date        :- Oct 17 2015
Build Level       :- p800-004-151017
Program Name      :- amqzxma0
Addressing mode   :- 64-bit
Major Errorcode   :- xecP_E_USER_TERM
Minor Errorcode   :- OK
Probe Description :- AMQ6125: An internal IBM MQ error has occurred.

可能原因及解決方案
  • 請檢查使用者是否已結束任何處理程序。
  • 檢查 IBM MQ 處理程序是否因記憶體異常狀況而結束:
    • 處理程序是否以 Component :- xehExceptionHandler的 FDC 結束?
    • 針對在此區域中更正的已知問題套用修正程式。
  • 檢查作業系統是否因為處理程序的高記憶體用量而結束處理程序:
    • IBM MQ 處理程序是否已耗用大量記憶體?
    • 作業系統是否已結束處理程序?
      檢閱作業系統日誌。 例如, Linux®上的 OOM 殺手:
      
      Jan 2 01:00:57 ibmtest kernel: 
      amqrmppa invoked oom-killer: gfp_mask=0x201da, order=0, oom_score_adj=0)
    • 套用已知記憶體洩漏問題的修正程式。

處理程序所使用的使用者限制與所配置的限制的差異

處理程序所使用的使用者限制可能與已配置的限制不同。 如果程序是由不同的使用者啟動,或由使用者 Script 啟動,或例如由高可用性 Script 啟動,則可能會發生這種情況。 請務必檢查正在啟動佇列管理程式的使用者,並為這個使用者設定適當的資源限制。