Db2
SQL2043N 無法啟動子程序或執行緒
SQL2043N Unable to start a child process or thread
自從升級到 rhel7 和 db2 10.5 後,我每隔一段時間就會看到該消息。db2diag.log 並沒有透露太多出於興趣,此外:FUNCTION: DB2 UDB, oper system services, sqlo_waitlist::initialize, probe:10 MESSAGE : SysV semget failed with errno: DATA #1 : Hexdump, 4 bytes
目標機器用於單元測試和開發,相關的核心參數似乎是合適的:
]$ cat /proc/meminfo MemTotal: 12140640 kB ]$ ipcs -l [...] ------ Semaphore Limits -------- max number of arrays = 3072 max semaphores per array = 250 max semaphores system wide = 256000 max ops per semop call = 32 semaphore max value = 32767
目前機器上沒有數據庫,但是——我相信——大量的信號量與 db2fenc1 相關聯:
]$ ipcs -s | grep db2fenc1 | wc -l 2800 [1]
$$ 1 $$數字 2800 不是確切的數字,但接近這個數字
]$ db2stop force
對 中的信號量數量沒有影響
ipcs -s
。為了釋放我必須做的信號量ipclean
我能想到的唯一可能導致 db2fenc1 獲取大量信號量的是一個受保護的 java 函式:
CREATE FUNCTION NYA.REMOVE_DIACRITICS( S VARCHAR(50)) RETURNS varchar(50) FENCED THREADSAFE DETERMINISTIC NO SQL LANGUAGE JAVA PARAMETER STYLE JAVA RETURNS NULL ON NULL INPUT EXTERNAL NAME 'StringUtil:se.vhs.nya.framework.common.util.db.DiacriticUtil!removeDiacritics' NO EXTERNAL ACTION @
這些函式在生成的列中使用:
CREATE TABLE ... ( [...] , <COLNAME2> VARCHAR(25) NOT NULL GENERATED ALWAYS AS ( NYA.REMOVE_DIACRITICS( <COLNAME1> ) ) , [...] ) @
但在測試期間沒有針對此表的大量插入/更新。
有沒有人遇到過類似的未釋放信號量的情況,在這種情況下,解決方案是什麼?
PS。不確定它是否相關,但它
JAVA_HEAP_SZ
是:(JAVA_HEAP_SZ) = 2048
該問題已被 IBM 確定為缺陷,即使停止/啟動也會洩漏一個信號量。由於我們可以解決這個問題,我們不需要立即修復。一個修復將包含在未來的修復包中。
在將此報告為錯誤之前,應檢查並增加實例所有者的最大程序數 (ulimit -u)。我相信他們無論如何都會問。