开发者社区> 问答> 正文

linux默认共享内存大小

今天修改eAccelerator配置的时候需要修改sysctl.conf里面的共享内存大小,发现个奇怪的问题

kernel.shmmax = 68719476736

默认就是64G

可是看到很多论坛上的配置都是说默认是16M 32M 64M啥的

呵呵,不知道这默认设置设置的这么大,对软件的执行有啥影响不。。。

展开
收起
a123456678 2016-06-12 14:07:02 4205 0
1 条回答
写回答
取消 提交回答
  • 至少 对ORACLE,是很有影响的

    这是一个非常核心的参数

    摘一段

    inux 下核心参数调整

    kernel.shmmax ----

    SHMMAX Available physical memory Defines the maximum allowable size
    of one shared memory segment. The SHMMAX setting should be large enough
    to hold the entire SGA in one shared memory segment. A low setting can
    cause creation of multiple shared memory segments which may lead to
    performance degradation.

    Shmmax 是核心参数中最重要的参数之一,用于定义单个共享内存段的最大值,
    shmmax 设置应该足够大,能在一个共享内存段下容纳下整个的SGA ,设置的过低可能会
    导致需要创建多个共享内存段,这样可能导致系统性能的下降 。

    http://www.itpub.net/showthread.php?threadid=551229&pagenumber

    论坛上的一些说法: SHMMAX 仅仅是在共享内存段被创建的时候用来比较的一个数

    字,当共享内存段被一个进程(Process)创建,操作系统检查是否被要求的共享内存段
    的值大于shmmax 的值 ,如果是,那么将会抛出一个错误。这个时候系统会创建另外的
    一个或多个共享内存段满足进程的需求 。一般来说,共享内存段个数和系统性能没有
    太直接的关系,也不会对性能产生太大的影响。

    Steve Adams 在他的小册子中说过,在实例启动以及Server Process 创建的时候,

    多个小的共享内存段可能会导致当时轻微的系统性能的降低(在启动的时候 需要去创
    建多个虚拟地址段,在进程创建的时候要让进程对多个段进行“识别”,会有一些影响),
    但是其他时候都不会有影响。这意味着如果你的程序不是经常Create Processes(以及
    Destroy Them),性能方面就不是考虑的问题。

      当然Oralce 的建议是希望一个大的共享内存段能容纳整个SGA,这样在任何时候

    都不会有甚至轻微的性能下降的隐患。

      Oracle 安装文档建议 32Bit Linux 系统设置shmmax 为32Bit 最大的限制值

    (setting shmmax to the 32-bit number limit),也就是4G 。

       所以一般来说,1-4G 的物理内存,可以直接设置shmmax 为最大物理内存即可,那

    么SGA 肯定在一个共享内存段中,32Bit Linux 系统物理内存大于4G 的设置为4G 即可 。
    总之,一般设置shmmax >=SGA (32Bit 系统是否支持到1.7G 以上SGA 需要注意) 。
    如果是64Bit 的Linux 操作系统,shmmax 设置为大于SGA_MAX_SIZE 即可。
    (仅供参考)

    2019-07-17 19:33:57
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Alibaba Cloud Linux 3 发布 立即下载
ECS系统指南之Linux系统诊断 立即下载
ECS运维指南 之 Linux系统诊断 立即下载