您好,登錄后才能下訂單哦!
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è)資訊頻道,感謝各位的閱讀!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。