![[AIX]](ngaix.gif)
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 個 (因為已新增應用程式) ,或發生連線洩漏。
若要檢查這些問題,請使用下列指令:
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 指令來檢查現行資源使用情形。
附註:
- 前述文字中列出的部分資源需要在使用者層次進行調整,而部分資源則需要在作業系統層次進行調整。
- 前述清單不是完整清單,但對於 IBM MQ所報告的大部分一般資源問題已足夠。
需要在執行緒層次進行調整,因為每一個執行緒都是輕量型處理程序 (LWP)。
從 IBM MQ 或應用程式建立執行緒或處理程序時發生問題
xcsExecProgram 和 xcsCreateThread中的失敗
- 探測 ID、錯誤訊息及元件
- 來自 IBM MQ 處理程序 (例如 amqzlaa0) 或應用程式的 XY348010 (來自 xtmStartTimerThread )
- 解決 AIX® 上的問題
- 當
pthread_create或 fork 因 EAGAIN 而失敗時, IBM MQ 會設定錯誤碼 xecP_E_PROC_LIMIT 。- EAGAIN
- 檢閱並增加使用者處理程序數目上限及堆疊大小使用者處理程序資源限制。
建立共用記憶體時發生問題
錯誤 :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 啟動,則可能會發生這種情況。 請務必檢查正在啟動佇列管理程式的使用者,並為這個使用者設定適當的資源限制。