溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

informix初始化的時候報: semget: errno = 28該怎么辦

發(fā)布時間:2021-11-04 17:36:49 來源:億速云 閱讀:163 作者:柒染 欄目:建站服務器

informix初始化的時候報: semget: errno = 28該怎么辦,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

[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 shared 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 creation
Initializing rhead structure...FAILED


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

在函數(shù)運行時出錯,查找日志發(fā)現(xiàn)semget函數(shù)報錯,errno設置為28。遇到系統(tǒng)調(diào)用發(fā)生錯誤的情況,可以嘗試以下幾種思路:

1. 使用strerror函數(shù)或者perror函數(shù)輸出錯誤說明。

2. 如果第一步還不是很清楚,可以根據(jù)errno的值找出對應的錯誤標示,然后再詳細查閱出錯系統(tǒng)函數(shù)的man手冊,找到對應錯誤標示的含義。

PS:大部分時候還是需要采用方法2,例如這次semget函數(shù)報錯,errno設置為28,我一開始根本不記得28的錯誤標示是什么,采用strerror函數(shù)返回的錯誤說明為“No space left on device”,我還誤以為系統(tǒng)內(nèi)存不夠。最后通過查看errno.h頭文件才發(fā)現(xiàn)28的錯誤標示是ENOSPC,再去查semget函數(shù)的man手冊,查看ENOSPC的具體含義是信號量超出系統(tǒng)限制: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。

解決辦法:可以臨時修改內(nèi)核參數(shù)(當然這只是權(quán)宜之計,我們最好是找到為什么信號量會超出系統(tǒng)限制,因為正常情況下可能性不大。)

1)sysctl命令可以查看和設置系統(tǒng)內(nèi)核參數(shù)

sysctl -a | grep sem        #查看系統(tǒng)信號量的設置值

kernel.sem = 250        32000   32      128

對應的4個值從左到右分別為SEMMSL、SEMMNS、SEMOPM和SEMMNI。

2)修改方法有三種:數(shù)字只作為參考

方法一: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

看完上述內(nèi)容,你們掌握informix初始化的時候報: semget: errno = 28該怎么辦的方法了嗎?如果還想學到更多技能或想了解更多相關內(nèi)容,歡迎關注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI