篆体字网 > 知识库

shm

来源:篆体字网 2024-01-05 00:47:21 作者:篆字君

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 sysptsize0x9=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 SYSVSHMoptions SHMMAXPGS=4096options SHMSEG=256options SYSVSEMoptions SEMMNI=256options SEMMNS=512options SEMMNU=256options 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

缺省设置只适合小安装(缺省最大共享内存是 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
MacOS X

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

sysctl -w kern.sysv.shmmaxsysctl -w kern.sysv.shmminsysctl -w kern.sysv.shmmnisysctl -w kern.sysv.shmsegsysctl -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,运行

http://www.360doc.cn/article/configure -y SHMMAX

设置 SHMMAX的新值:

http://www.360doc.cn/article/configure SHMMAX=value

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

http://www.360doc.cn/article/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=0x2000000set shmsys:shminfo_shmmin=1set shmsys:shminfo_shmmni=256set shmsys:shminfo_shmseg=256set semsys:seminfo_semmap=256set semsys:seminfo_semmni=512set semsys:seminfo_semmns=512set 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

然后重起。

上一篇:win8快捷键

下一篇:阿蛮歌霸点歌系统

相关阅读