在当前部署的Web服务器中,其性能的典型限制是什么?
我相信一个有意义的答案将是100,1,000,10,000,10000或1,000,000请求/秒之一,但今天这是真的吗? 5年前哪个是真的?我们可能在5年内期待哪一个? (即,带宽,磁盘性能,CPU性能等趋势如何影响答案)
如果它很重要,应该考虑HTTP over TCP是访问协议的事实。应该假设操作系统,服务器语言和文件系统效应是最佳的。
假设磁盘包含许多静态服务的小型唯一文件。我打算消除内存缓存的影响,并且CPU时间主要用于组装网络/协议信息。这些假设旨在将答案偏向“最坏情况”估计,其中请求需要一些带宽,一些CPU时间和磁盘访问。
我只是在寻找精确到一个数量级左右的东西。
答案 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应用程序中,您还可以开辟全新的优化需求。
索引,查询优化等
对于静态文件,您的应用程序是否将它们缓存在内存中?
等等等等