postgresql设置max_connections太大无法启动
在生产环境postgresql中,需要调整最大链接数,但是调整后无法启动,报错如下: [postgres@vm1_210_3data]$FATAL:couldnotcreatesemaphores:设备上没有空间 DETAIL:Failedsystemcallwassemget(5432064,17,03600). HINT:Thiserrordoes*not*meanthatyouhaverunoutofdiskspace.Itoccurswheneitherthesystemlimitforthemaximumnumberofsemaphoresets(SEMMNI),orthesystemwidemaximumnumberofsemaphores(SEMMNS),wouldbeexceeded.Youneedtoraisetherespectivekernelparameter.Alternatively,reducePostgreSQL'sconsumptionofsemaphoresbyreducingitsmax_connectionsparameter. ThePostgreSQLdocumentationcontainsmoreinformationaboutconfiguringyoursystemforPostgreSQL. 错误的意思就是内核中信号量集和信号量的配置太小了。信号量在内核中,主要解决进程间同步、异步的锁问题,因为PostgreSQL的每个链接是一个进程,所以需要更多的锁来使用。查看方法: [root@vm1_210_3~]#sysctl-a|grepsem kernel.sem=250 16500 250 65 这四个数字分别是:SEMMSL,SEMMNS,SEMOPM,SEMMNI SEMMSL:内核参数,控制每个信号量集合的最大信号数。 SEMMNS:内核参数,控制系统范围内能使用的最大信号量数。 SEMOPM:semop()函数(内核函数,用来操作信号量)每次调用锁能操作的一个信号量集中的最大信号量。 SEMMNI:内核中信号量集的最大数量。 SEMMNS=SEMMSL*SEMMNI SEMOPM=SEMMSL,这两个参数一般设置为相同。 对于PostgreSQL数据库来说: SEMMNI >=ceil((max_connections + autovacuum_max_workers + 4) / 16) SEMMSL >= 17 假设一个PG库如下设置: max_connections=1000,autovacuum_max_workers =3, 则这几个参数的设置是: SEMMNI = ceil((1000+3+4))/16)=63,因为考虑到其他进程使用,一般设置为63+25=88 SEMMSL要求大于17,保持默认250 SEMOPM=SEMSL=250 SEMMNS=SEMMNI*MSMMSL=88*250=22000 设置命令: sysctl-wkernel.sem="2502200025088" 如果重启也生效,在/etc/sysctl.conf文件中添加: kernel.sem=250 22000 250 88 运行:sysctl -p 使配置生效 设置完成之后,如果启动数据库还是报同样的错误,那么可以重启操作系统。(具体什么原因,我也不知道,如果有哪位明白的大神,请赐教) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- logback 源码--看配置文件logback.xml的加载位置
- ruby-on-rails – 从子目录运行Rails Passenger Devise?
- iphone – 如何从ipodlibrary获取歌曲并使用AVPlayer播放
- c# – 不支持的媒体类型web api帖子
- xml – xslt优化:多次访问子进程或使用变量
- Flex中的弹出窗口(mx.managers.PopUpManager)
- 正则表达式 – 在最后一个字符旁边分割字符串
- 针对flex Channel.Connect.Failed error NetConnection.Cal
- 使用SAX解析XML
- C# 参数按照ASCII码从小到大排序(字典序)