每个可以处理多少请求?需要多少 RAM?
我记得FastCGI是打开的初始化进程,每个进程可以处理一个请求。
那么多线程怎么样?
答案1
大约一年前,微软发布了 IIS + WCF 的基准测试,名为股票交易员。不完全是面向网页的基准。无论如何,它使用 IIS、工作进程和 .NET 代码表现出了非常好的性能。
7 或 8 年前,对 Web 负载的基准测试更为活跃。但在某些时候,性能似乎非常好,以至于在单个标准的高容量英特尔服务器上,无论您使用的是 Linux+??? 还是 Windows+.NET,您都会获得非常好的性能。(假设应用程序设计合理)。
不过,我实际上无法对 PHP 和 FastCGI 发表评论。
而且我不知道有谁在相同硬件上对 Linux+Mono+XSP 与 Windows+.NET+ASPNET 进行过基准测试。
答案2
我正在积极开发 PHP 和 ASP.Net。我不能说我对 IIS 或 NGINX 有很深的了解,但我对 Apache 和 Lighttpd 非常熟悉。
ASP.Net 使用线程架构,这是 Web 服务器本身的重要组成部分。静态变量在请求之间和用户之间保留其值。这就是 ASP.Net 获得大部分速度优势的地方。共享内存存储在每个单独的进程内以及线程之间。单独的进程不共享内存。因此,当您扩展到一台服务器以上时,大部分优势就会丧失。
PHP 是按照老式 CGI 风格构建的,每个请求都是一张白纸。这意味着任何公共信息要么必须从公共存储中获取,要么完全重新生成。PHP 并不慢,它与众不同。PHP 中的大多数主要操作都是调用用 C 编写的模块,因此它们的速度非常快。PHP 本身的执行速度不如编译语言快,但绝不慢。PHP 有一些(非常常见的)模块,它们缓存编译后的(内存中)代码版本,可以将性能提高 4 到 10 倍。
PHP 已经存在一段时间了,并且存在许多针对其 CGI 风格的解决方案。xcache 提供的值存储与 ASP.Net 的静态变量非常相似。Memcache 为持久共享变量提供了一种稍慢但更好的扩展(在物理服务器之间)解决方案。
ASP.Net 提供了更多的形式主义和结构。但是糟糕的程序员会用任何语言把事情搞得一团糟。如果你选择 ASP.Net,你应该研究一些优秀的非微软开发库。(例如 NHIbernate 和http://www.castleproject.org/)
我个人的偏好(当我没有其他工作报酬时)是 PHP。尽管速度会受到影响,但它更容易开发,扩展起来也更简单(即使它需要比 .Net 更多的 PHP 服务器)。服务器比程序员便宜得多。
无论哪种情况,任何 Web > 2.0 应用程序都将受到数据约束,并且数据库配置对性能的影响将比语言选择更为深远。
答案3
我对在 Windows 7 上的 IIS7 中运行的 asp.net mvc3 网站和在 centos 6.2 上使用 mod_mono 和 mono 2.11.2 运行的同一网站进行了一些简单的基准测试。它们都是在 Virtual Box 中运行的同一硬件上的虚拟机。实际的机器是 Core i5。
在同一网络上的另一台 Linux 机器上使用 apache bench(ab -n 1000 -c 100)
Centos 6.2 (default settings, no other sites running on 8088)
Server Software: Apache/2.2.15
Server Hostname: 192.168.1.208
Server Port: 8088
Document Path: /
Document Length: 24 bytes
Concurrency Level: 100
Time taken for tests: 3.401 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 354000 bytes
HTML transferred: 24000 bytes
Requests per second: 294.01 [#/sec] (mean)
Time per request: 340.124 [ms] (mean)
Time per request: 3.401 [ms] (mean, across all concurrent requests)
Transfer rate: 101.64 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 3 6.4 0 25
Processing: 14 321 71.1 325 483
Waiting: 14 321 71.1 325 483
Total: 39 324 67.8 326 483
Percentage of the requests served within a certain time (ms)
50% 326
66% 344
75% 358
80% 370
90% 408
95% 426
98% 441
99% 445
100% 483 (longest request)
(Again default settings, Windows 7 x64)
Server Software: Microsoft-IIS/7.5
Server Hostname: 192.168.1.115
Server Port: 8088
Document Path: /
Document Length: 27 bytes
Concurrency Level: 100
Time taken for tests: 0.469 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 294783 bytes
HTML transferred: 27351 bytes
Requests per second: 2131.09 [#/sec] (mean)
Time per request: 46.924 [ms] (mean)
Time per request: 0.469 [ms] (mean, across all concurrent requests)
Transfer rate: 613.48 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 4 17 4.6 17 27
Processing: 12 28 6.9 28 61
Waiting: 9 22 6.9 22 55
Total: 24 45 7.0 45 67
Percentage of the requests served within a certain time (ms)
50% 45
66% 48
75% 49
80% 50
90% 52
95% 55
98% 59
99% 62
100% 67 (longest request)
我确信您可以调整设置等。但除非我忽略了一些简单的东西,否则 IIS 运行 asp.net mvc 似乎要快很多倍。
视图本身基本上是空的,其中只有一个单词。
这不是一个很好的基准测试,我肯定不会把它交给我的老板。我怀疑 mono 搭配 nginx 或 lighttpd 会表现得更好,但我现在还没有设置它们。
答案4
这里有针对 IIS 和 nginx 的出色基准测试: (以及 Apache、Cherokee、G-WAN、Lighttpd、Ulib 等)
在Linux:
在视窗:
http://gwan.ch/en_windows.html
使用PHP、Java 和 C#:
我从未在其他任何地方看到过如此清晰的比较。测试源代码(PHP、Java、C#)也可在此处获取:
希望能帮助到你。