![[Linux]](nglinux.gif)
针对 Linux 上的资源问题的其他检查
如何确定和解决与 "IBM® MQ资源相关的问题,包括 "IBM MQ进程的资源使用情况、确定和解决与资源不足相关的问题,以及您的资源限制配置。
用于调查资源问题的有用命令和配置文件
用于显示系统上的当前值或对系统进行临时更改的有用命令:
- ulimit -a
- 显示用户限制
- ulimit -Ha
- 显示用户硬限制
- ulimit -Sa
- 显示用户软限制
- ulimit -<paramflag> <value>
- 其中,paramflag 是资源名称的标记,例如,s 表示堆栈。
要对系统上的资源限制进行永久更改,请使用 /etc/security/limits.conf 或 /etc/security/limits。
您可以从 Linux® 上的 proc 文件系统获取当前为进程设置的资源限制。 例如,cat /proc/<pid of MQ process>/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 进程数:
- 如果连接数超出期望的限制,请检查连接源。
- 如果共享内存使用量非常高,请检查以下项的数量:
- 主题
- 打开的队列句柄
- 从 IBM MQ 角度来看,需要检查和调整以下资源:
- 指定的用户进程数所允许的最大线程数。
- 数据段
- 堆栈段
- 文件大小
- 打开的文件句柄
- 共享内存限制
- 线程限制,例如,
threads-maxon Linux
- 使用 mqconfig 命令可检查当前资源使用情况。
注:
- 上文中列出的某些资源需要在用户级别进行调整,而某些资源则需要在操作系统级别进行调整。
- 上述列表不是完整的列表,但足以解决 IBM MQ报告的大多数常见资源问题。
- 由于每个线程都是一个轻量级进程 (LWP),因此需要在线程级别进行调整。
从 IBM MQ 或应用程序创建线程或进程时发生问题
xcsExecProgram 和 xcsCreateThread 中的故障
- 探测器标识、错误消息和组成部分
- 来自IBM MQ进程(例如amqzlaa0)或应用程序的xtmStartTimerThread的XY348010
- 解决 Linux 上的问题
- IBM MQ 设置错误代码 xecP_E_PROC_LIMIT 当
pthread_create或 fork 使用 EAGAIN 时失败。- EAGAIN
- 检查并提高最大用户进程数和堆栈大小用户进程资源限制。
- Linux 上需要其他配置
- 复查并增大 kernel.pid_max(/proc/sys/kernel/kernel.pid_max 和 kernel.threads-max (/proc/sys/kernel/threads-max)内核参数的限制。
创建共享内存时出现的问题
错误: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 进程是否由于内存异常而结束:
- 通过 FDC
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) - 对已知的内存泄漏问题应用修订。
进程使用的用户限制与已配置的限制的差别
进程使用的用户限制可能与已配置的限制不同。 如果进程由不同用户或用户脚本(例如,高可用性脚本)启动,那么可能发生此情况。 请务必检查正在启动队列管理器的用户并为此用户设置相应的资源限制。