zoukankan      html  css  js  c++  java
  • 内核参数SEMMSL SEMMNS SEMOPM SEMMNI参数的设置

    内核参数SEMMSL SEMMNS SEMOPM SEMMNI参数的设置

     

    这四个参数自己一直没搞清楚

    今天问了下同事,大概整了一下,后面会再补充。

    以下是linux文档上的说明:

    /proc/sys/kernel/sem (since Linux 2.4)

        This file contains 4 numbers defining limits for System V IPC semaphores.  These fields are, in order:

    SEMMSL  The maximum semaphores per semaphore set.

    SEMMNS  A system-wide limit on the number of semaphores in all semaphore sets.

    SEMOPM  The maximum number of operations that may be specified in a semop(2) call.

    SEMMNI  A system-wide limit on the maximum number of semaphore identifiers.

    semaphore set:信号量集。

    semaphore :信号量。

    自己根据这个说明,画了一个图。

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    SEMMSL,SEMOPM:设置process+10

    SEMMNI:设置为100。这个参数决定了操作系统启动时初始化信号集的个数。

    SEMMNS:SEMMSL*SEMMNI

     SEMOPM主要的限制体现在:                             

         1.lgwr写完之后通知应用进程的过程中,也就是主要影响log file sync(如设置250,一次semops最多可以通知250个应用进程,当应用commit厉害时,semops会大大增加,会到影响系统性能)。

        2.发生大规模enqueue lock时,通知等待在此锁资源上的进程(如果有500个进程等待同一个锁,则需要进行2次semops调用,来通知等待的进程,锁可以使用了)。

    补充:SEMOPM是一个系统调用,类似的还有semtimedop调用。

    可以跟踪一下oracle的lgwr进程,可以看到秒隔3秒调用一次semtimedop,是一个超时调用,当semtimedop()调用致使lgwr进程进入睡眠,因为logbuffer在空闲的情况下有一个3秒刷一次的机制:

    [oracle@fd_perf4 ~]$ ps -ef|grep lgwr

    oracle   15341  1934  0 19:49 pts/0    00:00:00 grep lgwr

    oracle   15445     1  0  2010 ?        00:14:06 ora_lgwr_fd_perf4

    [oracle@fd_perf4 ~]$ strace -p 15445

    Process 15445 attached – interrupt to quit

    times(NULL)                             = 2742619382

    semtimedop(98304, 0x7fbfffde70, 1, {1, 420000000}) = -1 EAGAIN (Resource temporarily unavailable)

    times(NULL)                             = 2742619524

    times(NULL)                             = 2742619524

    times(NULL)                             = 2742619524

    semtimedop(98304, 0x7fbfffde70, 1, {3, 0}) = -1 EAGAIN (Resource temporarily unavailable)

    times(NULL)                             = 2742619824

    times(NULL)                             = 2742619824

    getrusage(RUSAGE_SELF, {ru_utime={237, 721860}, ru_stime={608, 380512}, …}) = 0

    getrusage(RUSAGE_SELF, {ru_utime={237, 721860}, ru_stime={608, 380512}, …}) = 0

    times(NULL)                             = 2742619824

    semtimedop(98304, 0x7fbfffde70, 1, {3, 0}) = -1 EAGAIN (Resource temporarily unavailable)

    times(NULL)                             = 2742620124

    times(NULL)                             = 2742620124

    times(NULL)                             = 2742620124

  • 相关阅读:
    C++ 复制控制之复制构造函数
    static关键字总结
    C++ 隐式类类型转换
    Unity 移动端触摸屏操作
    【原创】为什么要用规则引擎?
    【原创】你的Redis怎么持久化的
    【原创】JAVA中令人眼花撩乱的数字魔法
    【原创】谈谈redis的热key问题如何解决
    【原创】Mysql中事务ACID实现原理
    【原创】杂谈自增主键用完了怎么办
  • 原文地址:https://www.cnblogs.com/jimeper/p/3141975.html
Copyright © 2011-2022 走看看