[Linux]

Linux 上配置和调整操作系统

Linux® 系统上配置 IBM® MQ 时使用本主题。

注意: 本主题中的信息主要涉及全局内核调整参数,适用于所有 Linux 系统。 配置启动 IBM MQ 用户部分描述了特定于用户的调整。

Shell 解释器

确保 /bin/sh 是与 Bourne shell 兼容的有效 shell 解释器。 如果不是,则 IBM MQ 的安装后配置可能无法成功完成。

如果 shell 不是通过 RPM 安装的,则在尝试安装 IBM MQ 时,可能会看到 /bin/sh shell 的先决条件失败。 失败的原因是 RPM 表无法识别安装了有效的 shell 解释器。 如果发生故障,可以使用 RPM 重新安装 /bin/sh shell,或者指定 RPM 选项 --nodeps ,在安装 IBM MQ 时禁用依赖性检查。
注:Linux上安装 IBM MQ 时,不支持 --dbpath 选项。

CPU 和虚拟内存

与其他软件一样, IBM MQ 使用的虚拟内存与处理的工作量成正比。

确保为您的系统分配了足够的 CPU、内存和交换空间,以满足生产所需的最高工作负荷。 IBM 无法提供简单的计算公式。 运行相当于或超过预期生产工作量的测试工作量,并监控资源使用情况。

System V IPC 内核配置

IBM MQ 使用这些 System V IPC 资源:共享内存和信号集。

IBM MQ 这些资源的最低内核配置如下:
表 1. 最小可调内核参数值
名称 参数名 增加1 描述
shmmni kernel.shmmni 4096 Yes 最大共享内存段数
shmmax kernel.shmmax 268435456 共享内存段的最大大小 (字节)
shmall kernel.shmall 2097152 Yes 最大共享内存量 (页数)
semmsl kernel.sem 322 每个集合允许的最大信号量
semmns kernel.sem 40962 Yes 最大信号数
semopm kernel.sem 322 单个操作中的最大操作数
semmni kernel.sem 1282 Yes 最大信号量集数
thrmax kernel.threads-max 32768 Yes 最大线程数
pidmax kernel.pid_max 32768 Yes 最大进程标识数
注:
  1. “增加” 一栏中:
    • “是”表示显示 的值足以在系统上运行两个中等大小的队列管理器。 如果您打算运行两个以上的队列管理器,或者队列管理器需要处理大量的工作负载,您可能需要增加 该值
    • 不表示当您运行两个以上的队列管理器时,无需增加 ,这样做几乎或完全没有额外的好处。
  2. 这些值包含在一个内核参数中,按顺序排列了四个值。 kernel.sem值包含在一个内核参数中,按顺序包含四个值。
要查看各参数的当前值,请运行 sysctl <parameter name>。 例如:
sysctl kernel.shmmax
要添加或更改这些值,请以根用户身份登录并用文本编辑器打开文件 /etc/sysctl.conf ,然后将以下条目添加或更改为您选择的值:
kernel.shmmni = 4096
kernel.shmall = 2097152
kernel.shmmax = 268435456
kernel.sem = 32 4096 32 128
然后保存并关闭该文件。

要立即加载这些 sysctl 值,请运行 sysctl -p

如果不运行 sysctl -p 命令,新值将在系统重启时加载。

Linux 内核的默认进程数上限可能也限制了允许的线程数。

如需了解有关 kernel.threads-maxkernel.pid-max 的更多信息,请参阅 IBM MQ 队列管理器在运行大量客户端时资源短缺

IBM MQ 上设置 RemoveIPC

注意: RemoveIPC 是 systemd 设置。 在登录管理器配置文件(logind.conflogind.conf.d )中将 RemoveIPC 保留为默认值 " " ,可能会导致 IBM MQ 拥有的 IPC 资源在 IBM MQ 的控制范围之外被移除。

您应该将该值设置为 No。 有关 RemoveIPC 的更多信息,请参阅 login.conf 手册页。

TCP/IP 配置

如果要将 keepalive 用于 IBM MQ 通道,那么可以使用内核参数来配置 KEEPALIVE 的操作:
net.ipv4.tcp_keepalive_intvl
net.ipv4.tcp_keepalive_probes
net.ipv4.tcp_keepalive_time
请参阅 使用 TCP/IP SO_KEEPALIVE 选项 以获取更多信息。

要查看参数的当前值,请运行 sysctl <parameter name>

要添加或更改这些值,请以根用户身份登录并用文本编辑器打开文件 /etc/sysctl.conf ,然后将以下条目添加或更改为您选择的值。

要立即装入这些 sysctl 值,请输入以下命令 sysctl -p

如果不发出 sysctl -p 命令,那么在重新引导系统时将装入新值。

RDQM-配置资源限制和环境变量

对于复制的数据队列管理器 (RDQM) ,请在 /etc/security/limits.conf中为 mqm 用户配置 nprocnofile 值。 或者,在名为 rdqm.conf的 RDQM 的 Pacemaker systemd 服务单元文件中设置 LimitNOFILELimitNPROC 变量。 如果在 limits.confrdqm.conf中都配置了资源限制 (nproc 和/或 nofile) ,那么 RDQM 队列管理器将使用配置的限制的较高值。 您可以使用 rdqm.conf 来配置其他资源限制 (例如,堆栈大小) 和环境变量。 请注意,仅当 Pacemaker自动启动队列管理器时,才会读取 rdqm.conf 文件。 这可能是在系统启动时,也可能是在队列管理器故障转移到存在 rdqm.conf 文件的节点时。 如果使用 strmqm 命令手动启动队列管理器,那么它将继承运行 strmqm 的环境。

以下步骤在 rdqm.conf中创建样本配置:
  1. 以 root 用户身份登录 RDQM 节点。
  2. 创建目录 /etc/systemd/system/pacemaker.service.d
  3. 在该目录中创建文件 rdqm.confrdqm.conf 文件包含以下格式的必需环境变量和资源限制:
    [Service] 
    Environment="MQ_ENV_VAR=1" 
    LimitNOFILE=65536 
    LimitNPROC=32768 
    LimitSTACK=16777216

    有关配置 systemd 单元文件的更多详细信息,请参阅操作系统文档。

  4. 重新启动起搏器服务:
    systemctl daemon-reload 
    systemctl restart pacemaker.service
    在此节点上运行的任何 RDQM 队列管理器都会在起搏器重新启动时移至另一个节点。
  5. 在其他两个 RDQM 节点上重复该过程,以便 RDQM 队列管理器在故障转移或切换到其他节点时使用相同的配置。
注: 您应该优先使用 qm.ini 属性而不是环境变量来控制队列管理器行为,因为会在 RDQM 节点之间复制 qm.ini 文件。

RDQM-配置内核控制台日志级别

DRBD 内核模块 (kmod-drbd) 有时可以在 KERN_ERR (3) 日志级别写入许多消息。 要防止将这些消息复制到系统控制台 (这可能会导致影响整个系统的重大处理延迟) ,请将 kernel.printk 参数的第一个数目减少到 3。 有关内核消息优先级的更多信息,请访问 https://www.kernel.org/doc/html/latest/core-api/printk-basics.html

要查看参数的当前值,请运行 sysctl kernel.printk

要添加或更改此值,请以根用户身份登录并使用文本编辑器打开文件 /etc/sysctl.conf ,然后将以下条目添加或更改为您选择的值:

kernel.printk = 3 4 1 7

要立即装入这些 sysctl 值,请输入命令 sysctl -p。 如果不发出 sysctl -p 命令,那么在重新引导系统时将装入新值。

64 位 Linux 平台上的 32 位支持

缺省情况下,某些 64 位 Linux 分发版不再支持 32 位应用程序。 有关受影响平台的详细信息,以及有关使32位应用程序在这些平台上运行的指南,请参阅 Linux上的硬件和软件要求

配置启动 IBM MQ 的用户

您必须对启动 IBM MQ的所有用户进行 最大打开文件数最大进程数 中描述的配置更改。 这通常包括 mqm 用户标识,但必须对启动队列管理器的任何其他用户标识进行相同的更改。

对于使用 systemd启动的队列管理器,请在包含队列管理器服务配置的单元文件中指定等效的 NOFILENPROC 值。

最大打开文件数

系统中的最大打开文件句柄数由参数 fs.file-max 控制

对于具有两个中等大小队列管理器的系统,此参数的最小值为 524288。
注: 如果操作系统缺省值更高,那么应保留更高的设置,或者咨询操作系统提供者。

如果您打算运行两个以上的队列管理器,或者队列管理器要处理大量工作负载,那么可能需要更高的值。

要查看参数的当前值,请运行 sysctl fs.file-max

要添加或更改这些值,请以根用户身份登录并用文本编辑器打开文件 /etc/sysctl.conf ,然后将以下条目添加或更改为您选择的值:
fs.file-max = 524288
然后保存并关闭该文件。

要立即装入这些 sysctl 值,请输入以下命令 sysctl -p

如果不发出 sysctl -p 命令,那么在重新引导系统时将装入新值。

如果要使用可插拔安全模块 (例如 PAM (可插拔认证模块)) ,请确保此模块不会不适当地限制 mqm 用户的打开文件数。 要为 mqm 用户报告每个进程的最大打开文件描述符数,请以 mqm 用户身份登录并输入以下值:
ulimit -n
对于标准 IBM MQ 队列管理器,请将 mqm 用户的 nofile 值设置为 10240 或更多。 要设置在 mqm 用户下运行的进程的最大打开文件描述符数,请将以下信息添加到 /etc/security/limits.conf 文件中:
mqm       hard  nofile     10240
mqm       soft  nofile     10240

可插入的安全模块限制不会应用于使用 systemd启动的队列管理器。 要在包含队列管理器服务配置的单元文件中使用 systemdLimitNOFILE 设置为 10240 或更多的情况下启动 IBM MQ 队列管理器。

有关如何为 RDQM 队列管理器配置 nofile 的指示信息,请参阅 RDQM-配置资源限制和环境变量

最大进程数

运行中的 IBM MQ 队列管理器由多个线程程序组成。 每个已连接的应用程序都会增加在队列管理器进程中运行的线程数。 操作系统通常会限制用户运行的最大进程数。 此限制可防止由于单个用户或子系统创建过多进程而导致操作系统故障。 您必须确保允许 mqm 用户运行的最大进程数足够。 进程数必须包括连接到队列管理器的通道和应用程序数。

确定 mqm 用户的进程数时,以下计算很有用:
nproc = 2048 + clientConnections * 4 + qmgrChannels * 4 +
    localBindingConnections
其中:
  • clientConnections 是从其他机器上的客户机连接到此机器上的队列管理器的最大连接数。
  • qmgrChannels 是其他队列管理器的最大运行通道数 (而不是通道定义)。 这包括集群通道,发送方/接收方通道等。
  • localBindingConnections不包括应用程序线程。
在此算法中做了以下假设:
  • 2048 是足够大的应急事件来覆盖队列管理器线程。 如果许多其他应用程序正在运行,那么可能需要增大此值。
  • 设置 nproc 时,请考虑将来可能在机器上运行的应用程序,连接,通道和队列管理器的最大数目。
  • 此算法采用悲观视图,对于更高版本的 IBM MQ 和快速路径通道,实际需要的 nproc 可能略低。
  • Linux上,每个线程都实现为一个轻量级进程 (LWP) ,每个 LWP 都被计为一个针对 nproc 的进程。
您可以使用 PAM_limits 安全模块来控制用户运行的进程数。 您可以配置 mqm 用户的最大进程数,如下所示:
mqm       hard  nproc      4096
mqm       soft  nproc      4096
有关如何配置 PAM_limits 安全模块类型的更多详细信息,请输入以下命令:
man limits.conf

可插入的安全模块限制不会应用于使用 systemd启动的队列管理器。 要启动 IBM MQ 队列管理器,请将 systemd set LimitNPROC 设置为包含队列管理器服务配置的单元文件中的合适值。

有关如何为 RDQM 队列管理器配置 nproc 的指示信息,请参阅 RDQM-配置资源限制和环境变量

您可以使用 mqconfig 命令来检查系统配置。

如需了解如何配置系统,请参阅如何为 IBM MQ 配置 AIX® and Linux 系统