雄关漫道真如铁,而今迈步从头越。
全部博文(348)
分类: 系统运维
2013-06-21 20:50:33
DB2数据库从V9.1升级至V9.7后启动时报错如下:ADM0513W db2start succeeded. However, no I/O completion port (IOCP) is available.
报错的原因主要是因为AIX内核未将iocp模块设置为available导致,不排除AIX上没有安装该模块,如果没有安装我们可以从AIX的光盘中提取出bos.iocp进行安装。
以下是解决该问题的方法:
(一) 以root用户登录验证该模块是否存在
$ lslpp -l bos.iocp.rte
Fileset
Level State Description
Path: /usr/lib/objrepos
bos.iocp.rte
6.1.7.16 COMMITTED I/O Completion Ports API
Path: /etc/objrepos
bos.iocp.rte 6.1.7.0 COMMITTED
I/O Completion Ports API
#可以确认笔者的系统安装了该模块
(二) 确认该模块的状态
$ lsdev -Cc iocp
iocp0 Defined I/O Completion Ports
#该模块的状态为Defined所以我们需要继续往下走将其调整为available
(三) 使用smitty工具调整该模块状态为available 即选中下图黑色框中菜单项按回车进入子选项进行修改
$ smitty iocp
(四) 重启主机 reboot now
启动数据库db2start查看数据库日志不再报错,OK问题解决了。
(五) IOCP知识小结
IOCP全称I/OCompletion Port,中文译为I/O完成端口。IOCP是一个异步I/O的API,它可以高效地将I/O事件通知给应用程序。与使用select()或是其它异步方法不同的是,一个套接字[socket]与一个完成端口关联了起来,然后就可继续进行正常的Winsock操作了。然而,当一个事件发生的时候,此完成端口就将被操作系统加入一个队列中。然后应用程序可以对核心层进行查询以得到此完成端口。
IOCP(I/OCompletion Port,I/O完成端口)是性能最好的一种I/O模型。它是应用程序使用线程池处理异步I/O请求的一种机制。在处理多个并发的异步I/O请求时,以往的模型都是在接收请求是创建一个线程来应答请求。而IOCP模型是事先开好了N个线程,存储在线程池中,让他们hold。然后将所有用户的请求都投递到一个完成端口上,然后N个工作线程逐一地从完成端口中取得用户消息并加以处理。这样就避免了为每个用户开一个线程。既减少了线程资源,又提高了线程的利用率。
这就是IOCP实现高容量网络服务器的原理啦!!!