红联Linux门户
Linux帮助

CGSL系统中为什么设置32位系统的内核参数SHMMAX为较大值时会变为0?

发布时间:2014-03-18 16:05:06来源:红联作者:jeeding
CGSL系统中为什么设置32位系统的内核参数SHMMAX为较大值时会变为0?
文章评论

共有 2 条评论

  1. 志在远方 于 2014-03-29 13:32:53发表:

    支持

  2. linuxgd 于 2014-03-19 11:54:19发表:

    广东省linux公共服务技术支持中心分析与处理:
    在安装第三方软件时,如Oracle数据库,会推荐设置内核参数SHMMAX为某一特定值。这个参数定义了Linux程序能在其虚拟地址空间中分配单个共享内存段的最大值。在32位CGSL系统上设置内核参数SHMMAX大于4GB,设置完后却变为0。例如,默认的SHMMAX值如下:
    # cat /proc/sys/kernel/shmmax
    4294967295
    给SHMMAX设置新值,其值比默认值大1 byte:
    # echo 4294967296 > /proc/sys/kernel/shmmax
    查看其值却为0:
    # cat /proc/sys/kernel/shmmax
    0
    原因:32位的操作系统的寻址空间最大为4294967296 bytes (4 * 1024 * 1024 * 1024 = 4GB),所以设置的共享内存大小不能大于等于4G。
    解决:在32位系统上设置SHMMAX值不能大于或等于4294967296 bytes,这是32位系统的限制,升级到64位系统能够规避此问题。