Web服务器的理论性能限制是什么?

时间:2009-03-11 16:25:41

标签: performance c10k

在当前部署的Web服务器中,其性能的典型限制是什么?

我相信一个有意义的答案将是100,1,000,10,000,10000或1,000,000请求/秒之一,但今天这是真的吗? 5年前哪个是真的?我们可能在5年内期待哪一个? (即,带宽,磁盘性能,CPU性能等趋势如何影响答案)

如果它很重要,应该考虑HTTP over TCP是访问协议的事实。应该假设操作系统,服务器语言和文件系统效应是最佳的。

假设磁盘包含许多静态服务的小型唯一文件。我打算消除内存缓存的影响,并且CPU时间主要用于组装网络/协议信息。这些假设旨在将答案偏向“最坏情况”估计,其中请求需要一些带宽,一些CPU时间和磁盘访问。

我只是在寻找精确到一个数量级左右的东西。

9 个答案:

答案 0 :(得分:14)

阅读http://www.kegel.com/c10k.html。您还可以阅读StackOverflow questions tagged 'c10k'。 C10K代表10,000个并发客户。

长话短说 - 主要是限制既不是带宽也不是CPU。它是并发性的。

答案 1 :(得分:4)

六年前,我看到一个8-proc Windows Server 2003框为每个提供了100,000个静态内容请求。那个盒子有8个千兆以太网卡,每个都在一个独立的子网上。限制因素是网络带宽。你无法通过互联网提供那么多内容,即使是真正庞大的管道。

实际上,对于纯静态内容,即使是适度的盒子也可能会使网络连接饱和。

对于动态内容,没有简单的答案。它可能是CPU利用率,磁盘I / O,后端数据库延迟,工作线程不够,上下文切换太多,......

您必须衡量您的应用程序,以找出您的瓶颈所在。它可能在框架中,它可能在您的应用程序逻辑中。它可能随着工作量的变化而变化。

答案 2 :(得分:2)

我认为这实际上取决于你所服务的内容。

如果您正在提供动态呈现html的Web应用程序,则CPU是最常用的。

如果您提供相当少量的静态项目很多次,您可能会遇到带宽问题(因为静态文件本身可能会发现自己在内存中)

如果您正在提供大量静态项目,则可能首先遇到磁盘限制(寻找和读取文件)

答案 3 :(得分:2)

如果您无法将文件缓存在内存中,则磁盘搜索时间可能会成为限制因素,并将性能限制为低于1000个请求/秒。使用固态磁盘时,这可能会有所改善。

答案 4 :(得分:2)

  

100,1,000,10,000,10000或1,000,000请求/秒,但今天是真的吗?

这个测试是在一台适度的i3笔记本电脑上完成的,但它评测了Varnish,ATS(Apache Traffic Server),Nginx,Lighttpd等。

http://nbonvin.wordpress.com/2011/03/24/serving-small-static-files-which-server-to-use/

有趣的一点是,使用高端8核服务器对其中大多数服务器(Apache,Cherokee,Litespeed,Lighttpd,Nginx,G-WAN)的推动力非常小:

http://www.rootusers.com/web-server-performance-benchmark/

由于测试是在localhost上进行的,以避免将网络作为瓶颈,因此问题在于内核无法扩展 - 除非你tune its options

因此,要回答您的问题,进度差距是服务器处理IO的方式。 他们将不得不使用更好的数据结构(等待)。

答案 5 :(得分:1)

我认为这里有太多变数来回答你的问题。

什么处理器,什么速度,什么缓存,什么芯片组,什么磁盘接口,什么主轴速度,什么网卡,如何配置,列表是巨大的。我认为你需要从另一方面解决问题......

“这就是我想做和实现的目标,我需要做什么?”

答案 6 :(得分:0)

这将取决于您的CPU核心 你的磁盘有多快? 什么是'胖''中等'规模的托管公司管道。 什么是网络服务器?

问题太笼统了

使用http://jmeter.apache.org/之类的工具部署服务器测试它,看看你是如何继续的。

答案 7 :(得分:0)

OS,服务器语言和文件系统效果是这里的变量。如果你拿出它们,那么你就得到了一个没有开销的TCP套接字。

此时,它并不是服务器性能问题,而是网络性能问题。使用无开销的TCP套接字,您将遇到的限制很可能是在防火墙或网络交换机上,可以同时处理多少个连接。

答案 8 :(得分:0)

在任何使用数据库的Web应用程序中,您还可以开辟全新的优化需求。

索引,查询优化等

对于静态文件,您的应用程序是否将它们缓存在内存中?

等等等等