这是实际linux系统显示的实际数据:

beijibing@bjb-desktop:/proc/sys/kernel$ cat shmmax

33554432

beijibing@bjb-desktop:/proc/sys/kernel$ cat shmmni

4096

beijibing@bjb-desktop:/proc/sys/kernel$ cat msgmax

8192

beijibing@bjb-desktop:/proc/sys/kernel$ cat msgmni

622

beijibing@bjb-desktop:/proc/sys/kernel$ cat msgmnb

16384

System V IPC 参数

名字

描述

合理取值

SHMMAX

最大共享内存段尺寸(字节)

最少若干兆(见文本)

SHMMIN

最小共享内存段尺寸(字节)

1

SHMALL

可用共享内存的总数量(字节或者页面)

如果是字节,就和 SHMMAX 一样;如果是页面,ceil(SHMMAX/PAGE_SIZE)

SHMSEG

每进程最大共享内存段数量

只需要 1 个段,不过缺省比这高得多。

SHMMNI

系统范围最大共享内存段数量

类似 SHMSEG 加上用于其他应用的空间

SEMMNI

信号灯标识符的最小数量(也就是说,套)

至少ceil(max_connections / 16)

SEMMNS

系统范围的最大信号灯数量

ceil(max_connections / 16) * 17 加上用于其他应用的空间

SEMMSL

每套信号灯最小信号灯数量

至少 17

SEMMAP

信号灯映射里的记录数量

参阅文本

SEMVMX

信号灯的最大值

至少 1000 (缺省通常是32767,除非被迫,否则不要修改)

最重要的共享内存参数是 SHMMAX , 以字节记的共享内存段可拥有的最大尺寸。如果你收到来自shmget 的类似Invalid argument 这样的错误信息,那么很有可能是你超过限制了。

有些系统对系统里面共享内存的总数(SHMALL )还有限制。 请注意这个数值必须足够大。(注意:SHMALL 在很多系统上是用页面数,而不是字节数来计算的。)

系统里的最大信号灯数目是由SEMMNS 设置的,因此这个值应该至少和 max_connections 设置一样大,并且每十六个联接还要另外加一个。  参数SEMMNI 决定系统里一次可以存在的信号灯集的数目。 因此这个参数至少应该为 ceil(max_connections % 16) 。降低允许的联接数目是一个临时的绕开失败的方法,这个启动失败通常被来自函数semget 的错误响应 No space left on device 搞得很让人迷惑。

有时候还可能有必要增大SEMMAP ,使之至少按照 SEMMNS 配置。这个参数定义信号灯资源映射的尺寸,可用的每个连续的信号灯块在这个映射中存放一条记录。每当一套信号灯被释放,那么它要么会加入到该映射中一条相连的已释放的块的入口中,要么注册成一条新的入口。如果映射填满了碎片,那么被释放的信号灯就丢失了(除非重起)。因此时间长信号灯空间的碎片了会导致可用的信号灯比应该有的信号灯少。

SEMMSL 参数,决定一套信号灯里可以有多少信号灯,

更改方法

Linux

缺省设置只适合小安装(缺省最大共享内存是 32 MB)。不过,其它的缺省值都相当大,通常不需要改变。最大的共享内存段设置可以用 sysctl 接口设置。 比如,要允许 128 MB,并且最大的总共享内存数为 2097152 页(缺省):

$

sysctl -w kernel.shmmax=134217728

$

sysctl -w kernel.shmall=2097152

你可以把这些设置放到 /etc/sysctl.conf 里,在重启后保持有效。

老版本里可能没有 sysctl 程序,但是同样的改变可以通过操作 /proc 文件系统来做:

$

echo 134217728 >/proc/sys/kernel/shmmax

$

echo 2097152 >/proc/sys/kernel/shmall

另外可行的方法:

修改方法如下:

修改/etc/rc.d/rc.local文件。

在文件的前面注释的后面加入以下行:

#修改内核共享内存大小;

echo134217728>/proc/sys/kernel/shmmax;

#说明:这里的值为内存的一半;

#如果系统内存是256M,则值为134217728;

#如果系统内存是512M,则值为268435456;

修改完成以后,重起机器就搞定。

其它系统的修改方法

MacOS X

在 OS X 10.2 以及更造版本里, 编辑文件 /System/Library/StartupItems/SystemTuning/SystemTuning 并且用下列命令修改这些数值:

sysctl -w kern.sysv.shmmax

sysctl -w kern.sysv.shmmin

sysctl -w kern.sysv.shmmni

sysctl -w kern.sysv.shmseg

sysctl -w kern.sysv.shmall

在 OS X 10.3 及以后的版本里,这些命令移动到 /etc/rc 里面去了,必须在那里编辑。你需要重新启动才能让设置生效。请注意/etc/rc 通常会被 OS X 更新覆盖 (比如 10.3.6 到 10.3.7),所以每次更新后你可能都需要重新编辑。

在这个平台上,SHMALL 是用 4KB 页来度量的。 还要注意有些版本的 OS X 将拒绝把 SHMMAX 的数值数值为非 4096 的倍数。

SCO OpenServer

缺省配置时,只允许每段 512KB 共享内存。 要增大设置,首先进入 /etc/conf/cf.d 目 录。要显示当前的以字节记的 SHMMAX ,运行

./configure -y SHMMAX

设置 SHMMAX 的新值:

./configure SHMMAX=value

这里 value 是你想设置的以字节记的新值。设置完了以后SHMMAX 重新制作内核

./link_unix

然后重起。

AIX

至少对于版本 5.1 而言,我们有必要为类似 SHMMAX 这样的参数做特殊的配置,因为这个参数可以配置为所有内容都当作共享内存使用。这就是类似 DB/2 这样的数据库常用的配置。

不过,我们可能有必要在 /etc/security/limits 里面修改全局 ulimit ulimit 信息,因为文件大小的缺省硬限制(fsize )以及文件数(nofiles )可能太低了。

Solaris

至少到版本 2.6 为止,共享内存段的缺省最大设置对 PostgreSQL 来说是太低了。相关的设置可以在/etc/system 里面修改,例如:

set shmsys:shminfo_shmmax=0x2000000

set shmsys:shminfo_shmmin=1

set shmsys:shminfo_shmmni=256

set shmsys:shminfo_shmseg=256

set semsys:seminfo_semmap=256

set semsys:seminfo_semmni=512

set semsys:seminfo_semmns=512

set semsys:seminfo_semmsl=32

你要重起系统令修改生效。

又见 http://sunsite.uakom.sk/sunworldonline/swol-09-1997/swol-09-insidesolaris.html 获取关于 Solaris 里面的共享内存的信息。

UnixWare

在 UnixWare 7 上,缺省配置里的最大共享内存段是 512 kB。 要显示SHMMAX 的当前值,运行

/etc/conf/bin/idtune -g SHMMAX

就会显示以字节记的当前的缺省的最小和最大值。 要给SHMMAX 设 置一个新值,运行:

/etc/conf/bin/idtune SHMMAX value

这里 value 是你想设置的以字节记的新值。设置完SHMMAX 后,重建内核

/etc/conf/bin/idbuild -B

然后重起。

BSD/OS

共享内存.缺省时是只支持 4 MB 的共享内存。请记住共享内存是不能分页的;它是锁在 RAM 里面的。要增加你的系统支持的共享缓冲区数目,向你的内核配置文件里增加下面的行:

options "SHMALL=8192"

options "SHMMAX=\(SHMALL*PAGE_SIZE\)"

SHMALL 以 4KB 页为单位计算,所以 1024 页面代表 4 M 共享内存。 所以上面的东西把共享内存区域增加到 32 MB。 对于运行 4.3 或者更新版本的人,你可能需要增大 KERNEL_VIRTUAL_MB ,超过缺省的 248 。 做完上面的修改之后,然后编译内核并重起。

对于运行 4.0 或者更早的版本的, 请用 bpatch 找出当前内核的 sysptsize 值。它是启动的时候动态计算的。

$ bpatch -r sysptsize

0x9 = 9

然后,把 SYSPTSIZE 修改为在内核配置文件里的一个硬代码值。用 bpatch 算出来的值,并且为你需要的每个额外的 4 MB 共享内存再加 1。

options "SYSPTSIZE=16"

sysptsize 不能用 sysctl 修改。

信号灯.你可能还需要增加信号灯的数量;系统缺省的总数 60 只能允许大概 50 个 PostgreSQL 连接。在内核配置文件里设置你需要的值,比如:

options "SEMMNI=40"

options "SEMMNS=240"

FreeBSD

缺省设置只适合于很小的安装(比如,缺省 SHMMAX 是 32 MB)。我们可以用 sysctl 或者 loader 接口来修改。下面的参数可以用 sysctl 设置:

$

sysctl -w kern.ipc.shmall=32768

$

sysctl -w kern.ipc.shmmax=134217728

$

sysctl -w kern.ipc.semmap=256

要想让这些设置重启后有效,修改 /etc/sysctl.conf 。

如果用 sysctl ,那么剩下的信号灯设置是只读的,但是信号灯可以在启动的时候,在 loader 提示符下设置:

(loader)

set kern.ipc.semmni=256

(loader)

set kern.ipc.semmns=512

(loader)

set kern.ipc.semmnu=256

类似的,这些东西可以在 /boot/loader.conf 中保存,以便重启之后依然有效。

你可能还想配置内核,让把共享内存装载到 RAM 里,避免他们被交换到交换分区中。这些可以通过使用 sysctl 设置kern.ipc.shm_use_phys 来实现。

在 4.0 之前的 FreeBSD 版本类似 NetBSD 和 OpenBSD (见下文)。

NetBSD

OpenBSD

编译内核时需要把选项 SYSVSHM 和 SYSVSEM 打开。(缺省是打开的。)共享内存的最大尺寸是由选项SHMMAXPGS (以页计)。下面显示了一个如何设置这些参数的例子(OpenBSD 使用的是 option ):

options SYSVSHM

options SHMMAXPGS=4096

options SHMSEG=256

options SYSVSEM

options SEMMNI=256

options SEMMNS=512

options SEMMNU=256

options SEMMAP=256

你可能原意使用 sysctl 设置将共享内存锁在 RAM 中以避免它们被交换出去,我们可以用 sysctl 设置kern.ipc.shm_use_phys 来实现这个目的。

HP-UX

缺省设置看来对普通安装是足够的了。 在 HP-UX 10,SEMMNS 的出厂缺省是 128,可能对大的数据库节点来说太小了。

IPC 可以在 System Administration Manager(系统管理器) (SAM )下面的 Kernel Configuration ->Configurable Parameters 配置。你配置完了以后敲 Create A New Kernel 选项。

linux共享内存变量 tiaojianbianliang,修改linux共享内存大小相关推荐

  1. linux时间变成英文,查看/修改Linux时区和时间

    一.时区 1. 查看当前时区 date -R 2. 修改设置时区 方法(1) tzselect 方法(2) 仅限于RedHat Linux 和 CentOS timeconfig 方法(3) 适用于D ...

  2. linux+nginx+mysql+php系统修改文件上传大小限制

    linux+nginx+mysql+php系统修改文件上传大小限制 对于LNMP框架的一些网站,上传文件大小会受到多个方面的限制,一个是nginx本身的限制,限制了客户端上传文件的大小,会报错&quo ...

  3. 在装完Linux系统之后自己去修改Swap分区的大小(两种方法)

    在装完Linux系统之后自己去修改Swap分区的大小(两种方法)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:o ...

  4. linux path环境变量检索目录,Linux下动态链接库加载路径及搜索路径问题

    引子 近日,服务器迁移后,偷懒未重新编译nginx的,直接./nginx启动,结果遇到如下问题: "error while loading shared libraries" 这是 ...

  5. Linux内核启动去掉企鹅,修改linux内核kernel开机logo(小企鹅)

    修改linux内核kernel的开机图片(原为小企鹅图片). 转载请注明出处:http://blog.csdn.net/wang_zheng_kai 导航制导与控制实验室 2014年12月10日 本文 ...

  6. 安卓Android调用C语言实现其他进程应用app的内存变量读取修改与利用BusyBox实现应用暂停和恢复(Native层)

    写在前面需要一定的计算机基础 安卓编译运行环境 已root手机 C4droid + SDL + GCC 中文版下载链接 https://www.lanzous.com/b958367 GameGuar ...

  7. linux测试最大文件句柄数,修改linux最大文件句柄数

    在linux中执行ulimit -a 即可查询linux相关的参数,如下所示: [root@mongodb11 ~]# ulimit -a core file size (blocks, -c) 0 ...

  8. linux共享内存变量 tiaojianbianliang,低压集抄系统中Linux共享内存使用分析

    1.   概述 Linux由于历史原因,其IPC分为SYSTEM V版本和POSIX版本.本文主要讨论在共享内存方面这两个版本之间的区别. 各共享内存IPC的函数对照表: IPC POSIX SYST ...

  9. linux 查看环境变量和修改环境变量

    一.查看环境变量  $ env 二.查看PATH   $ echo $PATH 三.修改PATH   在Linux里设置环境变量的方法(export PATH) 一般来说,配置交叉编译工具链的时候需要 ...

最新文章

  1. 2019 年,10篇新颖到出格的 AI 论文
  2. Android内核剖析 目录
  3. 深度剖析Kubernetes API Server三部曲 - part 1
  4. VC如何在编译链接程序过程中在输出窗口看到链接的顺序
  5. #1300 : 展胜地的鲤鱼旗(dp)
  6. 到底什么是RestFul架构?
  7. Shell脚本中循环select命令用法笔记
  8. 关于erlang的套接字编程
  9. mysql操作库命令_MYSQL数据库------操作命令笔记
  10. 无人机图像的目标检测的学习
  11. docker 使用非加密registry
  12. gbq6什么软件能打开_各种格式的文件用什么软件打开
  13. alexa前100万个域名下载
  14. 显卡参数详解[原创]
  15. [ZZ] Adventures with Gamma-Correct Rendering
  16. [转帖]江湖高手专用的“隐身术”:图片隐写技术
  17. 区块链技术及其在信息安全领域的研究进展 简单概括
  18. cloudstack GuestNetwork Ingress-Egress rule
  19. JME3播放背景音乐
  20. 重磅!L4级自动驾驶硬件方案来啦!

热门文章

  1. 用计算机打出圣诞树,手机计算器圣诞树的祝福输入方式,手机计算器圣诞树获得方法...
  2. class转java_java动态代理实现与原理详细分析
  3. 2012 人民搜索 实习生招聘 笔试题
  4. SpringCloud入门 - 分布式事务【概念、常见框架选择 - tx-lcn】
  5. DevExpress WPF v18.2新版亮点(四)
  6. PHP索引数组+unset使用不当导致的问题
  7. HNCU 1741: 算法3-2:行编辑程序
  8. android 数据存储路径
  9. SmtpClient 身份验证失败(authentication failed) 的原因分析
  10. 非递归生成的TreeView