当前位置: 首页 > news >正文

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 postgres82061 454472  4224 postgres82062 165624  1264 postgres82063 454456  1288 postgres82064 454456  1288 postgres82066 454456  1268 postgres82067 456072  2124 postgres82068 454456  1268 postgres82069 456020  2024 postgres

重要注意事项

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

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

相关文章:

  • Window常用的脚本有哪些?快来看看有哪些是你正在用的!(欢迎评论补充~)
  • 深入理解网络传输协议——差错控制
  • Redis 主从同步
  • Linux 系统图像化编程GTK入门
  • git 基本命令
  • 基于STM32的智能水产养殖系统(四)
  • 探究 IP 地址被网站封禁的原因
  • 前端开发中的热更新原理
  • Linux 获取文件大小fstat、stat使用
  • 深入理解和应用Eureka:服务注册与发现的利器
  • 第一百一十一节 Java面向对象设计 - Java泛型方法和构造函数
  • 13.3 Go 性能优化
  • 《Linux运维总结:prometheus+altermanager+webhook-dingtalk配置文件详解》
  • c++之说_15|成员函数的const尾缀修饰 ( const const)
  • 程序员们,能告诉我你们为什么选择arch linux吗?
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • Java读取Properties文件的六种方法
  • js正则,这点儿就够用了
  • React-redux的原理以及使用
  • uni-app项目数字滚动
  • 订阅Forge Viewer所有的事件
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 搞机器学习要哪些技能
  • 后端_ThinkPHP5
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 区块链共识机制优缺点对比都是什么
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 微信小程序实战练习(仿五洲到家微信版)
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • hi-nginx-1.3.4编译安装
  • ionic异常记录
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (12)Linux 常见的三种进程状态
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (26)4.7 字符函数和字符串函数
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (PySpark)RDD实验实战——取最大数出现的次数
  • (二十六)Java 数据结构
  • (分布式缓存)Redis分片集群
  • (几何:六边形面积)编写程序,提示用户输入六边形的边长,然后显示它的面积。
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (四)软件性能测试
  • (微服务实战)预付卡平台支付交易系统卡充值业务流程设计
  • (一)十分简易快速 自己训练样本 opencv级联haar分类器 车牌识别
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • (自用)仿写程序