linux下更改共享内存的最大值

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 查看共享内存最大值,linux上更改共享内存的最大值相关推荐

  1. linux查看设备在哪个cpu上,如何在linux中查看cpu信息、机器硬件型号

    原标题:如何在linux中查看cpu信息.机器硬件型号 # cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c 8 Intel(R) Xeon( ...

  2. linux查看端口占用终结,Linux查看端口占用

    ​ Linux查看端口占用得情况可以使用lsof和netstat 命令 lsof ​ lsof(list open files) 是一个列出当前系统打开文件的工具. lsf查看端口占用语法格式: ls ...

  3. linux查看显卡核心数,linux查看硬件信息,linux查看硬盘信息,linux查看CPU信息,linux查看显卡,硬件型号信息 | 帮助信息-动天数据...

    linux查看硬件信息,linux查看硬盘信息,linux查看CPU信息,linux查看显卡,硬件型号信息 作者:dthost | 时间:2015-09-30 | 8,325 次阅读 linux服务器 ...

  4. linux查看php日志命令,linux查看日志的三种命令是什么,linux查看进程命令

    linux查看日志的三种命令是什么Linux查看日志的三个命令是什么,linux查看日志有三个命令:1.查看实时更改日志,代码为[tail-f filename]:2.搜索关键字附近的日志代码为[ca ...

  5. linux查看程序的快捷键,linux操作系统的快捷键及命令讲解

    GNU是为Linux提供免费软件支持的工具;红帽与乌邦图都是Linux的一个版本. Linux登入时登入名为root的是最高级别 Linux系统中的文件夹: /:根目标 bin:二进制可执行文件 li ...

  6. linux查看系统资源使用情况,Linux查看系统资源占用

    在系统维护的过程中,随时可能有需要查看 CPU和内存的使用率,并根据相应信息分析系统状况的需求.本文介绍一下几种常见的Linux系统资源查看命令. 1.总体内存占用的查看 命令:free 图1 fre ...

  7. linux查看显示器名称命令,linux 查看显示器信息Linux下查看硬件信息命令大全

    /proc 虚拟的目录,是系统内存的映射.可直接访问这个目录来获取系统信息.其中也包含下面的信息: 主机CPU信息:cpuinfo 主机DMA通道信息:dma 文件系统信息:filesystems 主 ...

  8. linux查看和结束进程,Linux查看和结束进程命令详解

    在ubuntu中,终止一个进程或终止一个正在运行的程序,一般是通过 kill .killall.pkill.xkill 等进行. ----------------------------------- ...

  9. linux查看usb驱动版本号,linux查看硬件信息及驱动设备相关整理

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 联系我登录 首页 业界新闻 技术文章 资源分享 微语 linux查看硬件信息及驱动设备相关整理[转] 蓝猫 发布于:2014-5-30 17:48 分类: ...

最新文章

  1. C语言12变21,【C语言】21-结构体
  2. 4.2 数据集划分-机器学习笔记-斯坦福吴恩达教授
  3. java中map转为json数据_Java技术-将java中Map类型数据转化为json数据并以Ajax形式返回...
  4. svg 折线添加新的折点
  5. 解释一下全连接层CNN中全连接层是什么样的
  6. 融合智能将成时代方舟?中科创达技术大会向未来答疑
  7. “集百度AI技术之大成的终极硬件形态”发布
  8. 慎用 apt-get autoremove !
  9. 使用DbFunctions来解决EF按照日期分组数据
  10. 【树叶分类】基于matlab GUI BP神经网络植物叶片识别分类【含Matlab源码 916期】
  11. Python3.5学习之旅——day5
  12. 网页html生成图片的常用方案
  13. Shell 通过sed替换文件字符串
  14. 这一周CSDN人都看了些什么?(5.14-5.20)
  15. Anaconda点开一直处于loading application状态
  16. 并查集(Union-Find) (图文详解)
  17. 什么是爬电距离?宽爬电距离光耦为什么越来越受大家青睐?
  18. 到底什么是幸存者偏差?有哪些例子?
  19. 年薪30万、50万、100万的管理者,有啥分别?
  20. 心脏和字节只有一个跳动,生命和工资只能拼一个多多

热门文章

  1. 解决win10资源管理器右键菜单卡死问题
  2. i.MX 系列CPU HAB漏洞SecureBoot漏洞
  3. 机器人演唱邓丽君是真的吗_20年后,高科技让她与邓丽君终相逢
  4. sqlserver exec查询存储过程取某一个字段_ORC文件存储格式的深入探究
  5. 支付宝服务商子商户_支付宝推广数字化经营服务商应该怎么做?
  6. 企业计算机管理制度论文,082208计算机信息管理制度毕业论文.doc
  7. android 弹窗圆角,Android 自定义底部圆角弹窗的实现
  8. win10内核linux,windows 10中发布完整的Linux内核
  9. linux java 生成证书_Java 制作证书(Windows 和Linux)
  10. arrays中copyof_在内存只有10M的空间中申请一块5M的数组空间,会导致OOM吗?