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