使用db2命令连接数据库时报错如下
DB21018E A system error occurred. The command line processor could not continue processing.
查看日志/db2dir/db2diag.log,详细错误如下
2024-02-29-01.38.11.023038+480 E410318151A480 LEVEL: Severe (OS)
PID : 1697 TID : 1 PROC : db2
INSTANCE: db2u NODE : 000
HOSTNAME: M10-4-9-146
EDUID : 1
FUNCTION: DB2 UDB, oper system services, sqloForkDaemon, probe:20
MESSAGE : ZRC=0x870F00F2=-2029059854=SQLO_NORES
"no resources to create process or thread"
CALLED : OS, -, msgget
OSERR : ENOSPC (28) "no space left on device"
db2命令调用msgget函数时报错no space left on device,用这个错误信息为线索找到一个帖子
PeopleSoft: Fixing “msgget: No space left on device” Error on Solaris 10
根据该帖子的描述msgget的错误含义如下
A message queue identifier is to be created but the system-imposed limit on the maximum number of allowed message queue identifiers system wide would be exceeded.
See NOTES.
NOTES
The system-imposed limit on the number of message queue identifiers is maintained on a per-project basis using the project.max-msg-ids resource control
要创建一个消息队列标识符,但超过了系统对全系统允许的消息队列标识符最大数量的限制。
在 Solaris 10 之前,可以配置 /etc/system System V IPC 的 msgsys:msginfo_msgmni 来控制可创建消息队列的最大数量。Solaris 10 之前系统的默认值为 50。
在 Solaris 10 中,资源控制 project.max-msg-ids 取代了旧的 /etc/system 可调整项sginfo_msgmni,默认值提高到 128。
解决步骤如下
1.查看当前用户消息队列最大值
% id -p
uid=101(db2u) gid=1(other) projid=3(default)
% prctl -n project.max-msg-ids -i project 3
NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT
project.max-msg-ids
privileged 128 - deny -
system 16.8M max deny
2.修改最大值为512
% su - root
password:
# prctl -n project.max-msg-ids -r -v 512 -i project 3
# prctl -n project.max-msg-ids -i project 3
project: 3: default
NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT
project.max-msg-ids
privileged 512 - deny -
system 16.8M max deny -
3.永久生效,写入配置文件
# projadd -p 100 -c "db2 IPC Tuning" -K "project.max-msg-ids=(priv,512,deny)" db2appipc
# usermod -K project=db2appipc db2u
UX: usermod: db2u is currently logged in, some changes may not take effect until next login.