Linux的内核参数kernel.shmmax、kernel.shmall 和 kernel.shmmni

Linux的内核参数kernel.shmmax、kernel.shmall 和 kernel.shmmni

在 Linux 系统中,kernel.shmmaxkernel.shmallkernel.shmmni 是内核参数,用于控制和配置共享内存(Shared Memory)。这些参数特别对于数据库系统(例如 PostgreSQL 或 Oracle)优化非常重要,因为这些数据库常常依赖共享内存来管理缓存和其他重要数据结构。

参数说明

  1. kernel.shmmax:

    • 描述:控制一个单一共享内存段的最大大小,单位为字节。
    • 默认值:通常内核有一个默认的大值,但在数据库系统里,通常需要调整这个值以配合需要。
    • 配置示例:
    sysctl -w kernel.shmmax=68719476736   # 67,108,864 KB = 64 GB
    
  2. kernel.shmall:

    • 描述:系统范围内允许的共享内存的总页数大小。
    • 默认值:不仅取决于内存和系统架构,而且通常在数据库负载较高的系统里,需要进行调整。
    • 配置示例:
    sysctl -w kernel.shmall=16777216   # 16777216 pages * 4096 bytes/page = 64 GB
    
  3. kernel.shmmni:

    • 描述:系统范围内允许的共享内存段的最大数量。
    • 默认值:此值通常比较大,但如果系统需要使用大量小的共享内存段,可能需要增加。
    • 配置示例:
    sysctl -w kernel.shmmni=4096   # 允许最多 4096 个共享内存段
    

查看和配置共享内存参数

查看当前参数设置

可以通过以下命令查看当前系统的共享内存参数设置:

sysctl -a | grep shm

或者直接查看特定参数的值:

sysctl kernel.shmmax
sysctl kernel.shmall
sysctl kernel.shmmni
临时设置共享内存参数

使用 sysctl 命令可以临时设置这些参数,参数会立即生效,但在系统重启后会丢失:

sysctl -w kernel.shmmax=<value>
sysctl -w kernel.shmall=<value>
sysctl -w kernel.shmmni=<value>

例如:

sysctl -w kernel.shmmax=68719476736
sysctl -w kernel.shmall=16777216
sysctl -w kernel.shmmni=4096
永久设置共享内存参数

要使这些参数在系统重启后保持,编辑 /etc/sysctl.conf 文件,添加以下内容:

kernel.shmmax = 68719476736
kernel.shmall = 16777216
kernel.shmmni = 4096

之后,使用以下命令使更改生效:

sysctl -p

PostgreSQL 配置示例

在 PostgreSQL 中,共享内存参数 kernel.shmmaxkernel.shmall 的配置尤其重要,因为 PostgreSQL 使用共享内存来管理大型共享缓冲区池等关键数据结构。

以下是配置示例:

设置共享内存参数(假设是在 64 GB 内存的系统中运行 PostgreSQL)
# 设置单个共享内存段的最大大小为 64 GB
sysctl -w kernel.shmmax=68719476736

# 设置系统范围内允许的共享内存页数为 64 GB,假设内存页大小为 4096 字节
sysctl -w kernel.shmall=16777216

# 设置系统允许的最大共享内存段的数量
sysctl -w kernel.shmmni=4096
PostgreSQL 配置

在 PostgreSQL 配置文件 postgresql.conf 中,你需要确保 shared_buffers 适当配置。例如:

# 假设系统有 64 GB 内存,可以将 shared_buffers 设置为 16 GB
shared_buffers = 16GB
检查设置是否生效

运行 PostgreSQL 并检查共享内存的使用情况:

[pg16@test ~]$ ps -e -o pid,vsz,rss,comm | grep postgres
 82061 454472  4224 postgres
 82062 165624  1264 postgres
 82063 454456  1288 postgres
 82064 454456  1288 postgres
 82066 454456  1268 postgres
 82067 456072  2124 postgres
 82068 454456  1268 postgres
 82069 456020  2024 postgres

重要注意事项

  1. 重新启动服务:在改变这些内核参数时,通常需要重新启动数据库服务以使更改生效。
  2. 系统限制:务必了解系统的物理内存限制,不要设置过高的值,以免影响系统的整体性能和稳定性。
  3. 调优:根据实际使用情况和数据库负载,酌情调优共享内存参数,找到最佳配置。

通过合理地设置这些共享内存参数,可以显著提升数据库系统(例如 PostgreSQL)的性能和稳定性。因此,好的配置和调优对于高负载、高性能数据库系统是非常重要的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值