Chinaunix首页 | 论坛 | 博客
  • 博客访问: 323203
  • 博文数量: 100
  • 博客积分: 2620
  • 博客等级: 少校
  • 技术积分: 920
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-16 02:50
文章分类

全部博文(100)

文章存档

2011年(5)

2010年(12)

2009年(83)

分类:

2009-09-18 15:57:58

epoll, kqueue等单进程IO多路复用接口, 只在处理大批闲置连接时才能体现出优势. 如果每一个连接都很活跃, 请求的操作都是高IO和高CPU的, 那么瓶颈是机器本身的计算能力, 而不是连接的管理能力(这也是epoll等的作用). 这时, 如果能预先确定机器的计算能力所能处理的客户数量, 且数量较小的, 那么很多时候使用多线程/多进程(workers)更高效.

分析一下下面的攻击场景:

一种设想中的针对使用epoll模型的web服务器(如lighttpd)的攻击手法: 同服务器创建大量的连接, 在客户端禁用nagle算法, 以使客户端的数据立即发送到服务器. 然后, 客户端周期性地发送1个字节的数据.

这样, 导致服务器的每一个epoll_wait循环都会返回大量的就绪socket, 服务器迭代读取这些socket, 将导致一个循环消耗大量的时间, 最终影响对正常请求的响应.

这种场景设想, 大量慢速但不闲置的连接, 将导致服务器的计算资源消耗在对就绪连接的迭代和read调用上. 这种攻击只是一种设想, 有待实践验证.

你现在看的文章是:

阅读(1041) | 评论(0) | 转发(0) |
0

上一篇:正则表达式

下一篇:网游开发blog

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