知识屋:更实用的电脑技术知识网站
所在位置:首页 > 操作系统 > linux

如何设置LINUX的共享内存

发布时间:2014-09-05 15:55:08作者:知识屋


如何设置LINUX的共享内存
 
安装postgresDB时,出现如下错误:
 
[postgres@localhost ~]$ /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data
FATAL:  could not create shared memory segment: 无效的参数
DETAIL:  Failed system call was shmget(key=5432001, size=38076416, 03600).
HINT:  This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter.  You can either reduce the request size or reconfigure the kernel with larger SHMMAX.  To reduce the request size (currently 38076416 bytes), reduce PostgreSQL's shared_buffers parameter (currently 4096) and/or its max_connections parameter (currently 100).  www.zhishiwu.com  
        If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for.
        The PostgreSQL documentation contains more information about  shared memory configuration.
 
解决方法:
  www.zhishiwu.com  
我们可以修改shmmax内核参数,使SGA存在于一个共享内存段中。
 
  通过修改/proc/sys/kernel/shmmax参数可以达到此目的。
 
[root@neirongroot]# echo 1073741824 > /proc/sys/kernel/shmmax
 
[root@neirongroot]# more /proc/sys/kernel/shmmax
 
1073741824这里设为1G。
 
对于shmmax文件的修改,系统重新启动后会复位。可以通过修改/etc/sysctl.conf使更改永久化。
 
  在该文件内添加以下一行    kernel.shmmax = 1073741824 这个更改在系统重新启动后生效.
 
1、设置 SHMMAX
 
SHMMAX
 
  参数定义共享内存段的最大尺寸(以字节为单位)。在设置 SHMMAX时,切记 SGA的大小应该适合于一个共享内存段。 SHMMAX设置不足可能会导致以下问题:
 
ORA-27123:unableto attach to shared memory segment
 
  您可以通过执行以下命令来确定 SHMMAX的值:
 
# cat/proc/sys/kernel/shmmax
  www.zhishiwu.com  
33554432
 
SHMMAX 的默认值是 32MB。我一般使用下列方法之一种将 SHMMAX参数设为 2GB:
 
  通过直接更改 /proc文件系统,你不需重新启动机器就可以改变 SHMMAX的默认设置。我使用的方法是将以下命令放入 /etc/rc.local启动文件中:
 
#>echo "2147483648" > /proc/sys/kernel/shmmax
 
  您还可以使用 sysctl命令来更改 SHMMAX的值:
 
# sysctl-w kernel.shmmax=2147483648
 
最后,通过将该内核参数插入到 /etc/sysctl.conf启动文件中,您可以使这种更改永久有效:
 
# echo"kernel.shmmax=2147483648" >> /etc/sysctl.conf
 
2、设置 SHMMNI
 
  我们现在来看 SHMMNI参数。这个内核参数用于设置系统范围内共享内存段的最大数量。该参数的默认值是 4096。这一数值已经足够,通常不需要更改。
 
  您可以通过执行以下命令来确定 SHMMNI的值:
 
# cat/proc/sys/kernel/shmmni
 
4096
 
3、设置 SHMALL
 
  最后,我们来看 SHMALL共享内存内核参数。该参数控制着系统一次可以使用的共享内存总量(以页为单位)。简言之,该参数的值始终应该至少为:
  www.zhishiwu.com  
ceil(SHMMAX/PAGE_SIZE)
 
SHMALL 的默认大小为 2097152,可以使用以下命令进行查询:
 
# cat/proc/sys/kernel/shmall
 
2097152
 
SHMALL 的默认设置对于我们的 Oracle9 i RAC安装来说应该足够使用。
 
  注意:在 i386平台上 Red Hat Linux的页面大小为 4096字节。但是,您可以使用 bigpages,它支持配置更大的内存页面尺寸。
 
(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜