informix初始化的時候報: semget: errno = 28該怎么辦,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
鐵西網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)公司于2013年成立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(liá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設(shè)置為28。遇到系統(tǒng)調(diào)用發(fā)生錯誤的情況,可以嘗試以下幾種思路:
1. 使用strerror函數(shù)或者perror函數(shù)輸出錯誤說明。
2. 如果第一步還不是很清楚,可以根據(jù)errno的值找出對應(yīng)的錯誤標示,然后再詳細查閱出錯系統(tǒng)函數(shù)的man手冊,找到對應(yīng)錯誤標示的含義。
PS:大部分時候還是需要采用方法2,例如這次semget函數(shù)報錯,errno設(shè)置為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命令可以查看和設(shè)置系統(tǒng)內(nèi)核參數(shù)
sysctl -a | grep sem #查看系統(tǒng)信號量的設(shè)置值
kernel.sem = 250 32000 32 128
對應(yīng)的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的值對應(yīng)的錯誤標示,定義在/usr/include/errno.h頭文件中,但是該頭文件也是包含其他頭文件的。這些標示實際上是定義在下面兩個頭文件中:
/usr/include/asm-generic/errno-base.h
/usr/include/asm-generic/errno.h
看完上述內(nèi)容,你們掌握informix初始化的時候報: semget: errno = 28該怎么辦的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!