Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9299
  • 博文数量: 3
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 21
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-18 09:42
文章分类
文章存档

2014年(2)

2013年(1)

我的朋友

分类: 系统运维

2013-07-18 09:43:36

       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/OAPI,它可以高效地将I/O事件通知给应用程序。与使用select()或是其它异步方法不同的是,一个套接字[socket]与一个完成端口关联了起来,然后就可继续进行正常的Winsock操作了。然而,当一个事件发生的时候,此完成端口就将被操作系统加入一个队列中。然后应用程序可以对核心层进行查询以得到此完成端口。
   
IOCPI/OCompletion PortI/O完成端口)是性能最好的一种I/O模型。它是应用程序使用线程池处理异步I/O请求的一种机制。在处理多个并发的异步I/O请求时,以往的模型都是在接收请求是创建一个线程来应答请求。而IOCP模型是事先开好了N个线程,存储在线程池中,让他们hold。然后将所有用户的请求都投递到一个完成端口上,然后N个工作线程逐一地从完成端口中取得用户消息并加以处理。这样就避免了为每个用户开一个线程。既减少了线程资源,又提高了线程的利用率。

    这就是IOCP实现高容量网络服务器的原理啦!!!

阅读(1007) | 评论(0) | 转发(0) |
1

上一篇:没有了

下一篇:CPU利用率与Load Average的区别

给主人留下些什么吧!~~