informix初始化的时候报: semget: errno = 28该怎么办

2023-10-17 1130阅读

informix初始化的时候报: semget: errno = 28该怎么办,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。succeeded Reading configuration file ‘/home/informix/etc/S302.cfg’…succeeded Allocating and attaching to s开发云主机域名hared memory…succeeded Allocating 200016 kbytes for buffer pool of 2K page size…WARNING: server initialization failed, or possibly timed out . Check the message log, online.log, for errors. [informix@onxrjs302 ~]$onstat -m shared memory not initialized for INFORMIXSERVER ‘onxrjs302’。在函数运行时出错,查找日志发现semget函数报错,errno设置为28。这些标示实际上是定义在下面两个头文件中: /usr/include/asm-generic/errno-base.h /usr/include/asm-generic/errno.h看完上述内容,你们掌握informix初始化的时候报: semget: errno = 28该怎么办的方法了吗?

informix初始化的时候报: semget: errno = 28该怎么办,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

[informix@onxrjs302 ~]$oninit -ivy

Checking group membership to determine server run mode…succeeded

Reading configuration file ‘/home/informix/etc/S302.cfg’…succeeded

Creating /INFORMIXTMP/.infxdirs…succeeded

Checking config parameters…succeeded

Allocating and attaching to s开发云主机域名hared memory…succeeded

Creating resident pool 280260 kbytes…succeeded

Allocating 200016 kbytes for buffer pool of 2K page size…succeeded

Creating infos file “/home/informix/etc/.infos.onxrjs302″…succeeded

Linking conf file “/home/informix/etc/.conf.onxrjs302″…succeeded

oninit: Fatal error in shared memory cr开发云主机域名eation

Initializing rhead structure…FAILED

informix初始化的时候报: semget: errno = 28该怎么办

WARNING: server initialization failed, or possibly timed out (if -w was used).

Check the message log, online.log, for errors.

[informix@onxrjs302 ~]$onstat -m

shared memory not initialized for INFORMIXSERVER ‘onxrjs302’

Message Log File: /home/informix/S302.log

09:24:30 IBM Informix Dynamic Server Started.

09:24:31 semget: errno = 28

09:24:31 create_vp: cannot allocate semaphore

[informix@onxrjs302 ~]$

解决办法参考如下:http://blog.csdn.net/miss_acha/article/details/10976635

函数运行时出错,查找日志发现semget函数报错,errno设置为28。遇到系统调用发生错误的情况,可以尝试以下几种思路:

1. 使用strerror函数或者perror函数输出错误说明。

2. 如果第一步还不是很开发云主机域名清楚,可以根据errno的值找出对应的错误标示,然后再详细查阅出错系统函数的man手册,找到对应错误标示的含义。

PS:大部分时候还是需要采用方法2,例如这次semget函数报错,errno设置为28,我一开始根本不记得28的错误标示是什么,采用strerror函数返回的错误说明为“No space left on device”,我还误以为系统内存不够。最后通过查看errno.h头文件才发现28的错误标示是ENOSPC,再去查semget函数的man手册,查看ENOSPC的具体含义是信号量超出系统限制:A semaphore set has to be created but the system limit for the maximum number of semaphore sets (SEMMNI), or the system wide maximum number of semaphores。

解决办法:可以临时修改内核参数(当然这只是权宜之计,我们最好是找到为什么信号量会超出系统限制,因为正常情况下可能性不大。)

1)sysctl命令可以查看和设置系统内核参数

sysctl -a | grep sem #查看系统信号量的设置值

kernel.sem = 250 32000 32 128

对应的4个值从左到右分别为SEMMSL、SEMMNS、SEMOPM和SEMMNI。

2)修改方法有三种:数字只作为参考

方法一:echo 610 86620 100 142 > /proc/sys/kernel/sem

方法二:sysctl -w kernel.sem=”610 86620 100 142″

方法三:echo “kernel.sem=610 86620 100 142” >> /etc/sysctl.conf

errno的值对应的错误标示,定义在/usr/include/errno.h头文件中,但是该头文件也是包含其他头文件的。这些标示实际上是定义在下面两个头文件中:

/usr/include/asm-generic/errno-base.h

/usr/include/asm-generic/errno.h看完上述内容,你们掌握informix初始化的时候报: semget: errno = 28该怎么办的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注开发云行业资讯频道,感谢各位的阅读!

本文从转载,原作者保留一切权利,若侵权请联系删除。

《informix初始化的时候报: semget: errno = 28该怎么办》来自互联网同行内容,若有侵权,请联系我们删除!

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]