1. 程式人生 > 其它 >could not create semaphores: No space left on device

could not create semaphores: No space left on device

在postgres中,當max_connect設定過大,啟動的時候會報錯:

FATAL: could not create semaphores: No space left on device

建立semaphores時空間引數不夠,查詢官網,有這麼一段解釋:

HINT: This error does *not* mean that you have run out of disk space. It occurs when either the system limit for the maximum number of semaphore sets (SEMMNI), or the system wide maximum number of semaphores (SEMMNS), would be exceeded. You need to raise the respective kernel parameter. Alternatively, reduce PostgreSQL's consumption of semaphores by reducing its max_connections parameter.
The PostgreSQL documentation contains more information about configuring your system for PostgreSQL.
解決的方法是改小max_connect,當業務不允許的情況下,修改核心引數,max_connect相關的核心引數有:

下面介紹如何修改核心引數

# ipcs -ls
 
------ Semaphore Limits --------
max number of arrays = 1280
max semaphores per array = 50100
max semaphores system wide = 64128000
max ops per semop call = 50100
semaphore max value = 32767
 
 
# cat  /proc/sys/kernel/sem
SEMMSL   SEMMNS         SEMOPM  SEMMNI
50100   128256000       50100   2560
SEMMSL每個訊號量set中訊號量最大個數 SEMMNSlinux系統中訊號量最大個數 SEMOPMsemop系統呼叫允許的訊號量最大個數設定,設定成和SEMMSL一樣即可 SEMMNI linux系統訊號量set最大個數 所以SEMMNS=SEMMSL*SEMMNI 修改vi /etc/sysctl.conf 的以下引數 kernel.sem = 50100 128256000 50100 2560 sysctl -p生效 重啟資料庫即可 但行好事,莫問前程