hotmail
作者hotmail·2015-03-31 16:47
软件开发工程师·hotmail

db2从V9.1升级至V9.7后报错IOCP错误问题解决

字数 1724阅读 2259评论 0赞 0

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实现高容量网络服务器的原理啦!

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广