Web服务器的性能估计

标签: 高并发编程 | 发表时间:2015-07-01 10:03 | 作者:
出处:http://colobu.com/

在给客户做方案的时候,或者在软件设计的时候,或者在软件测试的时候,我们经常会估算我们的web应用程序的性能。这样,我们才能正确的设计方案。
如果估算误差太大,你给客户的方案是10台服务器,实际部署时确需要20台机器,客户绝对要疯了。同样对我们的代码设计和测试方案影响重大。
那么在带宽和内存都很充足的情况下我们如何大致估算出一个web应用程序的性能呢?

首先,我们看一张Tengine/Nginx的性能图,根据这个例子来演示一下性能的估算。此图摘自 Tengine & Nginx Benchmark

可以看到Tengine的 RPS (requests per seconds)可以达到90000多,并发数大一点的时候RPS会大一点,随后随之并发数的增大RPS并没有随之增大,而是略微减小。这也可以理解,对大部分web应用来说,连接数增多了,资源占用和维护的花费也增多了。
作为粗略的估算方法,我们忽略并发数的影响,可以大致Tengine可以达到90000请求每秒。
这个测试是利用apache ab访问一个gif文件进行测试的:

     
1
     
ab -r -n 10000000 -c 100 http://ip:81/empty.gif

测试环境是:

     
1
2
3
4
5
6
7
8
     
CPU: Intel(R)Xeon(R)[email protected] 32core
Memory: 128GB
NIC: Intel Corporation 82599EB 10-Gigabit SFI/SFP+ Network Connection
Kernel: Linux-3.17.2.x86_64
Tengine-2.1.0
Nginx-1.6.2
ApacheBench-2.3

这是一台32个core的服务器,10G带宽。

基本上每个core可以达到90000/32 ≈ 2800 请求每秒。 因此我们可以估算8个core的服务器可以达到2800 * 8 ≈ 22000请求每秒。
当然这些是大致估算,实际RPS并不和core的数量成严格正比关系,但在请求之间没有影响或者影响不大(比如数据库操作)的情况下误差应该不是很大。
平均每个请求的花费的时间大约为1000 / 2800 ≈ 0.36ms。

根据上面的估算方法,我们可以得出估算的公式:

  1. 在带宽和内存不是问题的时候,全部的core都用来处理请求的情况下,
    如果一个请求花费的时间是 t毫秒,
    单个core的RPS可以达到 1000 /t
    n个core的RPS可以达到 n * 1000 /t

  2. 在带宽和内存不是问题的时候,全部的core都用来处理请求的情况下,
    如果 n个core的RPS是 N,
    单个core的RPS是 N /n,
    一个请求的平均花费是 1000 * n / N毫秒。

举个例子,如果我们的业务比较复杂,每个请求大约需要100ms才能,完成,那么单个core所能达到的RPS = 1000/100 = 10 requests/s,在32个core的服务器
上也只能达到32 * 10 =320 requests/s。 如果我们能将业务处理时间压缩到 10ms, 32个core的服务器能够达到3200 requests/s。
因此业务处理的时间和我们服务器的性能息息相关。

相关 [web 服务器 性能] 推荐:

Web服务器的性能估计

- - 鸟窝
在给客户做方案的时候,或者在软件设计的时候,或者在软件测试的时候,我们经常会估算我们的web应用程序的性能. 如果估算误差太大,你给客户的方案是10台服务器,实际部署时确需要20台机器,客户绝对要疯了. 同样对我们的代码设计和测试方案影响重大. 那么在带宽和内存都很充足的情况下我们如何大致估算出一个web应用程序的性能呢.

Go 和 Python Web 服务器性能对比

- Ken - python.cn(jobs, news)
我通常使用 Python 来构建 Web 应用. 一年前,在兴趣的驱使下,我开始学习 Go. 在此期间,我重写了一些原本由 C 开发的 CGI 应用,包括运行于 chroot 环境下的同 thttpd 服务器一起的应用. 我开始寻找可以开发易于 chroot、且内置 Web 服务器的独立 Web 应用的工具.

Python 和 PHP 的 Web 服务器性能测试

- 非狐外传 - python.cn(jobs, news)
这几天一直在玩虚拟机,测了几种Python和PHP的Web服务器的性能,顺便记录下来. 宿主:MacBook Pro MC700. 操作系统:Mac OS X 10.6.8. CPU: 2.3GHz Intel Core i5(双核). 虚拟机:Virtual Box. 操作系统:Linux version 2.6.32-5-686 (Debian 2.6.32-35).

Python和PHP的Web服务器性能测试

- phus - keakon的涂鸦馆
这几天一直在玩虚拟机,测了几种Python和PHP的Web服务器的性能,顺便记录下来. 宿主:MacBook Pro MC700. 操作系统:Mac OS X 10.6.8. CPU: 2.3GHz Intel Core i5(双核). 虚拟机:Virtual Box. 操作系统:Linux version 2.6.32-5-686 (Debian 2.6.32-35).

高性能非阻塞Web 服务器Undertow

- - 互联网 - ITeye博客
WildFly 8 包含了一个全新的Web服务器(Undertow),WildFly 8 默认的Web服务器为Undertow. 一句话概括什么是Undertow - 高性能非阻塞 Web 服务器. Undertow 主要有以下几个特点:. 轻量化 - Undertow 是一个Web 服务器,但它不像传统的Web 服务器有容器的概念,它由两个核心jar包组成,使用API加载一个Web应用可以使用小于10MB的内存.

浅谈web服务器—Nginx

- - CSDN博客推荐文章
常见的web服务器有apache,Nginx,lighttpd等. 但Nginx作为一款高性能的Http和反向代理服务器,由于其高效率、简配置等优势在业内被广泛使用. 目前Taobao、新浪、赶集网、金山、豆瓣网、网易新闻等众多知名互联网企业的服务器都是采用Nginx. 根据url的不同,将HTTP请求转发到后端的应用服务器集群.

简易的python web服务器用途

- Ruby - Erlang非业余研究
原创文章,转载请注明: 转载自Erlang非业余研究. 本文链接地址: 简易的python web服务器用途. 我们在工作中经常会需要看下报表,如tsung的统计报表或者lcov的覆盖情况,这些报表通常为了方便都会作成html格式的. 我们可以把这些html网页打包拉回去用浏览器慢慢看,但是每次都要打包,拉数据非常麻烦.

Node.js 的简易web服务器

- bingo - 走走停停看看
网上关于Node.js的介绍已经铺天盖地了,但我就没找到一个简单的web服务器给我做测试用. 实际上Node.js只需要一个exe文件和一个js文件就可以搭建服务器了,用来随便测试页面之类的用起来比nginx还方便. 只可用于http服务,没有更多功能的js文件. 1,先去 http://nodejs.org/下载最新的Node.js可执行的exe文件.

优秀的轻量级Web服务器

- - Solidot
Alison Neville 写道 "Web服务器是一种使用超文本传输协议(HTTP)响应客户端请求提供网页的计算机软件,以HTML文件、图像、样式表和脚本的形式构成网页内容. Apache是​​最流行的Web服务器软件,提供了最新的协议实现,优秀的特性集,具有高可配置和可扩展性. Apache被一半以上的活跃网站所使用.

web服务器访问流程

- - ITeye博客
 问题1:DNS解析是什么,简述如图步骤1、2做了什么. 人们习惯记忆域名,但机器间互相只认ip,域名和ip可以是多对一的关系,他们之间的转换工作称为域名解析,域名解析需要有专门的域名解析服务器来完成. 在浏览器中输入域名www.iteye.com,操作系统会向检查自己本地的hosts. 是否有这个网址映射,如果有就直接调用这个ip地址,完成域名解析.