登录数据库时报错:"Requesting too many semaphores"
1. 首先清除db2diag.log,然后重新登录重现问题。
2. ipcs -l 检查semaphores的大小限制
------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 67108864
max total shared memory (kbytes) = 17179869184
min seg size (bytes) = 1
------ Semaphore Limits --------
max number of arrays = 4096
max semaphores per array = 250
max semaphores system wide = 256000
max ops per semop call = 100
semaphore max value = 32767
------ Messages: Limits --------
max queues system wide = 31905
max size of message (bytes) = 65536
default max size of queue (bytes) = 65536
3. 然后ipcs -s检查共享内存数量,这个问题的原因是因为实际数量超过了限制
结论:
每次instance重新启动前一定要*释放资源*!
包括
db2_kill
ipclean
ps -ef|grep -i db2
kill all processes left
Ps:最后发现原因是因为在备份数据库的时候,重启了服务器上的数据库,但是不知道什么原因Semaphore 变得异常增大,这时不要着急使用ipcrm终止数据库的相关共享进程,这样会导致数据丢失(我着急操作数据库,删除了部分共享内存导致一些数据丢失),应该首先试着试着重启数据库,看能不能解决问题。