修改内核参数 (Linux)

对于 root 用户安装,数据库管理器使用公式来自动调整内核参数设置,从而不再需要手动更新这些设置

开始之前

必须具有 root 用户权限才能修改内核参数。

过程

要在 Red Hat 和 SUSE Linux 上更新内核参数:

  1. 运行 ipcs -l 命令以列示当前的内核参数设置。

  2. 分析命令输出,以通过将当前值与下表中的最低增强设置比较来确定是否必须更改内核设置。

    IPC 内核参数最低增强设置
    kernel.shmmni (SHMMNI)256 * <RAM 大小,以 GB 计>
    kernel.shmmax (SHMMAX)<RAM 大小,以字节计>1
    kernel.shmall (SHMALL)2* <缺省系统页大小中的 RAM 大小 >2
    kernel.sem (SEMMNI)256 * <RAM 大小,以 GB 计>
    kernel.sem (SEMMSL)250
    kernel.sem (SEMMNS)256 000
    kernel.sem (SEMOPM)32
    kernel.msgmni (MSGMNI)1 024 * <RAM 大小,以 GB 计>
    kernel.msgmax (MSGMAX)65 536
    kernel.msgmnb (MSGMNB)65 536 3

    下列文本是 ipcs 命令输出的示例,注释添加在 // 后面以显示参数名称:

       # ipcs -l
    
          ------ Shared Memory Limits --------
          max number of segments = 4096               // SHMMNI	
          max seg size (kbytes) = 32768               // SHMMAX
          max total shared memory (kbytes) = 8388608  // SHMALL
          min seg size (bytes) = 1
    
          ------ Semaphore Limits --------
          max number of arrays = 1024                 // SEMMNI
          max semaphores per array = 250              // SEMMSL
          max semaphores system wide = 256000         // SEMMNS
          max ops per semop call = 32                 // SEMOPM
          semaphore max value = 32767
    
          ------ Messages: Limits --------
          max queues system wide = 1024               // MSGMNI
          max size of message (bytes) = 65536         // MSGMAX
          default max size of queue (bytes) = 65536    // MSGMNB
  • MSGMNI 参数将影响可以启动的代理程序数;MSGMAX 参数将影响队列中可以发送的消息的大小,MSGMNB 参数将影响队列的大小。

  • 应该将 MSGMAX 参数更改为 64 KB(即,65536 个字节),并且应该将 MSGMNB 增大到 65536

  • 建议将 SHMMAX 值设置为等于系统上的物理内存量。然而,x86 系统上需要的最小内存量为 268435456 (256 MB),对于 64 位系统,需要的最小内存量为 1073741824 (1 GB)。

  • 从有关“共享内存限制”的第一部分开始,SHMMAX 限制是 Linux 系统上共享内存段的最大大小。SHMALL 限制是系统上共享内存页的最大分配。

  • 下一部分包括可用于操作系统的信号量。内核参数 sem 由以下四个标记组成:SEMMSLSEMMNSSEMOPM 和 SEMMNISEMMNS 是 SEMMSL 乘以 SEMMNI 的结果。数据库管理器要求在必要时增大阵列数 (SEMMNI)。通常情况下,SEMMNI 应该是系统上需要的最大代理程序数乘以数据库服务器计算机上的逻辑分区数再加上数据库服务器计算机上的本地应用程序连接数的和的两倍。

  • 第三部分包括系统上的消息。

  1. 在 32 位 Linux 操作系统上,SHMMAX 的最低增强设置限制为 4,294, 967,295 个字节

  2. SHMALL 限制在系统上可分配的虚拟共享内存总量。每个 DB2 数据服务器有效地管理其使用的系统内存量(也称为已落实内存)。DB2 数据服务器会分配比其落实的内存更大的虚拟内存,以支持内存预分配和动态内存管理。内存预分配可提高性能。动态内存管理是增加或减少单独虚拟共享内存区域中的真实内存使用的过程。为了有效地支持内存预分配和动态内存管理,数据服务器常常必须在系统上分配大于物理 RAM 量的虚拟共享内存。内核需要此值作为页数。

  3. 负载性能可从更大的消息队列大小(由 MSGMNB 指定,以字节计)限制获益。可通过运行 ipcs -q 命令查看消息队列使用情况。如果在装入操作期间,消息队列达到或接近容量,请考虑增大消息队列大小限制的字节数。

通过编辑 /etc/sysctl.conf 文件来修改必须调整的内核参数。如果此文件不存在,那么应创建它。 下列各行是该文件中应包含的内容的示例:

#Example for a computer with 16GB of RAM: kernel.shmmni=4096 kernel.shmmax=17179869184 kernel.shmall=8388608 #kernel.sem=<SEMMSL> <SEMMNS> <SEMOPM> <SEMMNI> kernel.sem=250 1024000 32 4096 kernel.msgmni=16384 kernel.msgmax=65536 kernel.msgmnb=65536运行 sysctl 时附带 -p 参数,以从缺省文件 /etc/sysctl.conf 中装入 sysctl 设置:      sysctl -p可选: 使更改在每次重新引导之后仍然有效:

  • (SUSE Linux) 激活 boot.sysctl

  • (Red Hat) rc.sysinit 初始化脚本将自动读取 /etc/sysctl.conf 文件。

本文来自:https://www.ibm.com/support/knowledgecenter/zh/SSEPGG_10.1.0/com.ibm.db2.luw.qb.server.doc/doc/t0008238.html