这是实际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 
| 名字 | 描述 | 合理取值 | 
|---|---|---|
| SHMMAX | 最大共享内存段尺寸(字节) | 最少若干兆(见文本) | 
| SHMMIN | 最小共享内存段尺寸(字节) | 1 | 
| SHMALL | 可用共享内存的总数量(字节或者页面) | 如果是字节,就和 | 
| SHMSEG | 每进程最大共享内存段数量 | 只需要 1 个段,不过缺省比这高得多。 | 
| SHMMNI | 系统范围最大共享内存段数量 | 类似 | 
| SEMMNI | 信号灯标识符的最小数量(也就是说,套) | 至少ceil(max_connections / 16) | 
| SEMMNS | 系统范围的最大信号灯数量 | ceil(max_connections / 16) * 17 | 
| SEMMSL | 每套信号灯最小信号灯数量 | 至少 17 | 
| SEMMAP | 信号灯映射里的记录数量 | 参阅文本 | 
| SEMVMX | 信号灯的最大值 | 至少 1000 (缺省通常是32767,除非被迫,否则不要修改) | 
 最重要的共享内存参数是 shmget 
 有些系统对系统里面共享内存的总数(SHMALL 
 系统里的最大信号灯数目是由SEMMNS semget 
 有时候还可能有必要增大SEMMAP 
 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
-  
    编译内核时需要把选项 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 选项。 
 
 OpenBSD
-  
    
 
                   
                   
                   
                   
                             本文介绍了如何查看和修改Linux系统的共享内存参数,包括SHMMAX、SHMALL、SEMMNS、SEMMNI等,以解决可能出现的内存限制问题。通过调整这些参数,可以避免Invalid argument错误和No space left on device等问题,确保系统稳定运行。
本文介绍了如何查看和修改Linux系统的共享内存参数,包括SHMMAX、SHMALL、SEMMNS、SEMMNI等,以解决可能出现的内存限制问题。通过调整这些参数,可以避免Invalid argument错误和No space left on device等问题,确保系统稳定运行。
           
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
              
             
                   941
					941
					
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
            


 
            