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

内核参数SEMMSL SEMMNS SEMOPM SEMMNI参数的设置的更多相关文章

  1. linux 内核参数VM调优 之 参数调节和场景分析

    1. pdflush刷新脏数据条件 (linux IO 内核参数调优 之 原理和参数介绍)上一章节讲述了IO内核调优介个重要参数参数. 总结可知cached中的脏数据满足如下几个条件中一个或者多个的时 ...

  2. java基础:所有参数皆是按值参数

    c#中对于参数的传递,有二种处理方式,默认情况下:值类型的参数,按值传递(即:方法体内的参数是原值的副本):引用类型的参数,"加ref关键字后“,按引用传递(即:方法体内的参数,是对象的指针 ...

  3. Swift 1.1语言函数参数的特殊情况本地参数名外部参数名

    Swift 1.1语言函数参数的特殊情况本地参数名外部参数名 7.4  函数参数的特殊情况 声明定义有参函数时,为函数的每一个参数都定义了参数名称.根据参数名定义的形式不同,函数参数包括本地参数和外部 ...

  4. CAS登录后回传除了ticket参数以外的其他自定义参数

    在一次项目的技术选型中,选择了easyui+cas+shiro+spring的组合,cas实现了单点登录,这使得在一个应用中嵌入另一个应用的页面来展示数据所涉及到的授权方面变得简单. 由于shiro在 ...

  5. C#语法糖之第二篇: 参数默认值和命名参数 对象初始化器与集合初始化器

    今天继续写上一篇文章C#4.0语法糖之第二篇,在开始今天的文章之前感谢各位园友的支持,通过昨天写的文章,今天有很多园友们也提出了文章中的一些不足,再次感谢这些关心我的园友,在以后些文章的过程中不断的完 ...

  6. C# ref_out_params方法的参数_4种类型的参数

    之前学习C#没有做笔记的习惯,因此有些基础上的东西并没有很好地整理起来,虽然这些东西比较常用,因此也没什么影响,但总觉得不整理一下感觉老是有种陌生感.今天特别整理一下C#4种类型的参数. 一.按值传递 ...

  7. <原>ASP.NET 学习笔记之HTML helper中参数何时会是路由参数,何时又会是query string?

    HTML helper中参数何时会是路由参数,何时又会是query string?   @Html.ActionLink("Edit", "Edit", new ...

  8. 【又长见识了】函数传参,params参数,ref和out参数详解

    一.原来函数这样传参 先看一个函数和函数调用. static void Main(string[] args) { ; Test(num);//局部变量在使用之前赋值 //Test(10); //直接 ...

  9. SpringCloud使用Feign调用其他客户端带参数的接口,传入参数为null或报错status 405 reading IndexService#del(Integer);

    SpringCloud使用Feign调用其他客户端带参数的接口,传入参数为null或报错status 405 reading IndexService#del(Integer); 第一种方法: 如果你 ...

随机推荐

  1. Navicat sqlserver2016 08001

    环境: Windows10(主机是联想的) SqlServer2016 Navicat11 错误: 启动SqlServer各种服务, 端口1433 没错, Navicat连接时08001错误 分析: ...

  2. std::string std::wstring 删除最后元素 得到最后元素

    std::string str = "abcdefg,"; std::cout << "last character:"<<str.ba ...

  3. 线程同步之mutex和event区别

    之前只是用过 关键段来对同进程不同线程进行互斥,防止对同一份资源或代码段的竞争: mutex可以理解为不同进程或者同一进程内防止对同一份资源的竞争: event更多的是同步,当然也是不同进程或者同一进 ...

  4. placement new 笔记

    之前看到 偶尔用placement new 的用法,当分配内存频繁,而且对效率要求很高的情况下,可以先申请一块大内存,然后在此内存上构建对象,关键是可以自动调用其构造函数,否则要悲剧. 但是之后要自己 ...

  5. Tomcat之如何使用Nginx进行集群部署

    目录结构: contents structure [+] 1,为什么需要集群 2,如何使用Nginx部署tomcat集群 2.1,下载Nginx 2.2,在同一台电脑上部署多个Tomcat服务器 2. ...

  6. 【struts2】自定义更强大的logger拦截器

    Struts2自带的logger拦截器只是打印出了Action所对应的URL以及执行的方法名称,这对实际开发来说是肯定不够的.实际开发中为了调试方便,要记录的信息比较多,通常需要把这次请求相关的几乎所 ...

  7. jquery实现点击展开列表同时隐藏其他列表 js 对象操作 对象原型操作 把一个对象A赋值给另一个对象B 并且对象B 修改 不会影响 A对象

    这篇文章主要介绍了jquery实现点击展开列表同时隐藏其他列表的方法,涉及jquery鼠标事件及节点的遍历与属性操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了jquery实现点击 ...

  8. Win7系统计算机中Msvcr100.dll丢失的解决办法

    1.使用安全卫士里的人工服务. 在搜索框里输入msvcr100.dll. 点击查找方案. 2.点击msvcr100.dll问题后面的立即修复. 只要等待片刻就好了.

  9. State Threads 回调终结者

    上回写了篇<一个“蝇量级”C语言协程库>,推荐了一下Protothreads,通过coroutine模拟了用户级别的multi-threading模型,虽然本身足够“轻”,杜绝了系统开销, ...

  10. SharePoint下在Feature中动态Register/Remove HttpModule

    在SharePoint开发时,你会遇到这样一个问题,Global.asax去哪儿?怎样添加一个Global.asax?怎样在Application_Start这个事件处理程序里设置初始化?似乎在Vis ...