• 内核参数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

  • 相关阅读:
    5-1 Leetcode中和链表相关的问题
    4-7 带有尾指针的链表:使用链表实现队列
    4.6 使用链表实现栈
    4.5 链表元素的删除
    4.4 链表的遍历、查询和修改
    4.3 为链表设置虚拟头结点dummyhead
    4.2在链表中添加元素
    4.1链表
    mybatis 力量操作参数为List的非空校验
    linux 运行和停止jar的shell 脚本
  • 原文地址:https://www.cnblogs.com/jimeper/p/3141975.html
Copyright © 2020-2023  润新知