读《构建高性能Web站点》服务器并发处理能力 - 1

一台Web服务器在单位时间内能处理的请求越多越好,这也成了Web服务器的能力高低所在,它体现了我们常说的"服务器并发处理能力"。

吞吐量

Web服务器的并发处理能力,一般使用单位时间内服务器处理的请求数来描述其并发能力,习惯称其为吞吐率(Throughput),单位是"reqs/s"。

  • 并发用户数

人们常常把并发用户数和吞吐率混淆,实际上,它们并不是一回事,吞吐率是指在一定并发用户数的情况下,服务器处理请求能力的量化体现;并发用户数就是指在某一时刻同时向服务器发送请求的用户总数。

采用多线程的并发对于同一个域名下的URL的并发下载数是有最大限制的,具体限制视浏览器的不同而不同,比如,在HTTP/1.1下,IE7支持两个并发连接,IE8支持6个并发连接,Firefox3支持4个并发连接。另一方面,Web服务器一般也会限制同时服务的最多用户数,比如Apache的MaxClients参数。

CPU并发计算

服务器之所以可以同时处理个请求,在于操作系统通过多执行流体系设计使得多个任务可以轮流使用系统资源,这些资源包括CPU、内存以及I/O等。

进程

多执行流的一般实现便是进程。

进程的调度有内核来进行,从内核的观点来看,进程的目的就是担当分配系统资源的实体。同时,进程也可以理解为记录程序实例当前运行到什么程度的一组数据,多个进程通过不同的进程描述符与这些数据进程关联。

每个进程都有自己独立的内存地址和生命周期。进程的创建使用fork()系统调用。

轻量级进程

由于进程之间相对独立,无法共享数据。为此,在Linux2.0之后,提供了对轻量级进程的支持,它由一个新的系统调用clone()来创建,并由内核直接管理,像普通的进程一样独立存在,各自拥有进程的描述符,但是这些进程已经允许共享一些资源。

轻量级进程减少了内存的开销,并为多进程应用程序的数据共享提供了直接支持。

线程

POSIX 1003.1c为Linux定义了现成的接口"pthread"。从内核角度来看,多线程只是一个普通的进程,它是由用户态通过一些库函数模拟实现的多执行流,所以多现成的管理完全在用户态完成。这种实现方式下线程切换的开销相比于进程和轻量级进程要少,但它在多处理器的服务器(SMP)表现较差,因为只有内核的进程调度器才有权分配多个CPU的时间。

POSIX线程的另一种是现实LinuxThreads,它可以说是内核级线程(Kernel-Level Threads),因为它通过clone()来创建线程,也就是说,它的实现原理是将线程和轻量级进程一对一关联,每个线程实际上就是一个轻量级进程,这样使得线程完全由内核的进程调度器来管理,所以他对于SMP的支持较好,但线程切换的开销要比用户态线程多一些。

LinuxThreads已经加入了glibc和libc的目前版本。

进程调度器

内核中的进程调度器(Scheduler)维护着各种状态的进程队列。在Linux中,进程调度器维护者一个包含所有可运行进程的队列,称为"运行队列",一集一个包括所有休眠进程和僵尸进程的列表。

进程调度器的一项重要工作就是决定下一个运行的进程,这个执行先后顺序通过进程优先级进行处理,进程优先级由进程自己决定,但在进程运行时进程调度器会动态的调整它们的优先级。

Linux中进程的优先级属性为Priority,在top结果中用PR表示,而对于进程的动态调整体现在进程的nice属性,在top结果中用NI表示。

PR所代表的是进程调度器分配给进程的时间片长度,单位是时钟个数,一个时钟需要多长时间跟CPU的主频以及操作系统平台有关,比如Linux上一般为10ms,那么PR值为20则表示这个进程的时间为200ms。

Linxu2.6的进程调度器偏爱I/O操作密集型的进程,因为这些进程在发起I/O操作后通常都会阻塞(除异步I/O),不会占用太多CPU时间,。

系统负载

在任何时刻通过 /proc/loadavg,可以查看系统运行队列的情况。

其中6/1564,6表示测试运行队列中的进程个数,而1564则表示此时的进程总数。最右边的25689表示到此时为止,最后创建的一个进程ID。左边的0.24、0.52、0.58三个数值分别表示最近1分钟、5分钟、15分钟的系统负载。

系统负载是在单位时间内运行队列中就绪等待的进程的平均值,系统负载越高,代表CPU越繁忙。

进程切换

为了让所有的进程可以轮流使用系统资源,进程调度器在必要的时候挂起正在运行的进程,同时恢复以前挂起的某个进程,这种行为称为进程切换,也就是"上下文"。

一个进程被挂起的本质就是将它在CPU寄存器中的数据拿出来暂存在内核态堆栈中,而一个进程恢复工作的本质就是将它的数据重新载入CPU寄存器。

Nmon是一个Linux监视工具,它可以提供基于服务器终端命令的监视页面。利用Nmon对服务器某个时刻的抽样结果如下:

ContextSwitch表示这时上下文切换平均每秒12614.9次,这是操作系统正常运转所进行的必要工作。

IOWait

IOWait是指CPU空闲并且等待I/O操作完成的时间比例。IOWait往往不能代表I/O操作的性能,它的设计出发点是用来衡量CPU性能的。

IOWait很高的时候,说明当前任务的CPU时间比I/O操作时间比较少,通过Nmon得到CPU监控数据如下图:

此时IOWait为0%,系统不繁忙。

—————————— 本文同步发布于 ZHANGSR 我的个人博客  ——————————

时间: 2024-10-13 01:59:28

读《构建高性能Web站点》服务器并发处理能力 - 1的相关文章

【读书笔记】2016.12.10 《构建高性能Web站点》

本文地址 分享提纲: 1. 概述 2. 知识点 3. 待整理点 4. 参考文档 1. 概述 1.1)[该书信息] <构建高性能Web站点>: -- 百度百科 -- 本书目录: 第1章 绪论 1.1 等待的真相 1.2 瓶颈在哪里 1.3 增加带宽 1.4 减少网页中的HTTP请求 1.5 加快服务器脚本计算速度 1.6 使用动态内容缓存 1.7 使用数据缓存 1.8 将动态内容静态化 1.9 更换Web服务器软件 1.10 页面组件分离 1.11 合理部署服务器 1.12 使用负载均衡 1.1

《构建高性能 Web站点》笔记

书名:构建高性能Web站点 出版社: 电子工业出版社 ISBN:9787121170935 一  绪论 等待的时间: (1) 数据在网络上的传输时间 (2) 站点服务器处理请求并生成回应数据的时间 (3) 浏览器本地计算和渲染的时间 二  数据的网络传输 数据如何发送 (1) 应用程序通过系统函数库接口(如send)向内核发出系统调用 (2) 系统内核将数据从用户态内存区复制到由内核维护的内核缓冲区(这块地址空间的大小有限,需要发送的数据以队列的形式进入) (3) 内核通知网卡来取数据,网卡将数

《构建高性能web站点》随笔 无处不在的性能问题

前言– 追寻大牛的足迹,无处不在的“性能”问题. 最近在读郭欣大牛的<构建高性能Web站点>,读完收益颇多.作者从HTTP.多级缓存.服务器并发策略.数据库.负载均衡.分布式文件系统多个方面娓娓道来,洋洋洒洒,甚是精彩,想来让人心旷神怡.     但“纸上得来终觉浅,绝知此事要躬行”,要消化本书的内容,绝不是一件简单的事情,更重要的还是实践.在实践和学习的过程中,我会把自己的经验和感悟分享出来,一方面权当做笔记,另一方面,对于后来的童鞋,希望能提供一丝一毫的帮助,不胜欣慰.     由于是读书

构建高性能web站点

以下为阅读<构建高性能web站点>郭欣 著 第一章的重点总结 1.等待的真相 a) 在用户等待的时间里,大概发生了以下几部分时间: i. 数据在网络上传输的时间:包括两个部分,浏览器端主机发出请求经过网络到达服务器的时间,服务器回应数据经过网络到达浏览器主机的时间.也称为响应时间,他的决定因素主要包括发送的数据量和网络带宽.站点服务器处理请求并回应数据的时间- ii. 站点服务器处理请求并生成回应数据的时间.主要消耗在服务器端,包括非常多的环节,我们一般用"每秒处理请求数"

学习笔记大型《构建高性能web站点》

吞吐率 ab -n1000 -c 100 http://new.dangdang.com/ 测试结果重点关注:1个Requests per second,2个Time per request 影响吞吐率的因素: 并发策略.I/O模型.I/O性能.CPU核数.程序本身逻辑复杂度 1.CPU并发计算 系统负载: cat proc/loadavg 结果:0.00 0.00 0.00 1/130 12041 左边三个数字代表1.5.15分钟的系统负载,数字越小,系统响应速度越快 学习笔记大型<构建高性能

构建高性能Web站点(修订版)笔记

构建高性能Web站点(修订版)2012.6 p14 '反馈机制':逐包确认 --> 小batch连续发送 一定需要全局编址吗?(可以使用邻居路由+端到端IBE) 电磁波速度:铜线中电信号2.3*10^8,光纤约2*10^8(全反射增加了传输距离) 系统负载:/proc/loadavg 上下文切换:Nmon IOWait(注意一点:磁盘IO是串行的!) 减少系统调用... ZeroCopy?AIO? strace:每次请求都要检测.htaccess?(哦,设置了AllowOverride all)

读书笔记-构建高性能Web站点

基本概念 带宽:通常说的带宽比如8M带宽,是指主机与互联网运营商的交换机之间的数据传输速度,因为数据链路层的流量是通过控制接收方实现的.而百兆网卡则是指网卡的发送速度为100Mbit/s,则是指网卡发送数据的速度 吞吐率:单位是reqs/s,指服务器的并发能力,就是单位时间内服务器处理的请求数.最大吞吐率是指单位时间内服务器能够处理的最大请求数.通常使用压力测试的方法通过模拟足够数目的并发用户数,分别连续发送一定的Http请求,并统计测试持续的总时间,计算出基于这种压力下的吞吐率,即为一个平均计

读《构建高性能Web站点》服务器并发处理能力 - 2

系统调用 进程有两种运行模式:用户态和内核态.进程通常在用户态,这时可以使用CPU和内存,而当进程需要对硬件外设进行操作的时候(如读取磁盘文件.发送网络数据),就必须切换到内核态,当在内核态的任务完成后,进程又切回到用户态. 由于系统调用涉及进程从用户态到内核态的切换,导致一定的内存空间交换,这也是一定程度上的上下文切换,所以系统调用的开销通常是比较昂贵的. 减少不必要的系统调用,也是Web服务器性能优化的一个方面. 内存分配 Apache在运行时的内存使用量是非常惊人的,这主要归咎于它的多进程

构建高性能web站点-阅读笔记(一)

看完前9章,也算是看完一半了吧,总结一下. 郭欣这个名字或许并不响亮,但是这本书写的确实真好!百度一下他的名字也能够看到他是某些公司的创始人和投资者,当然他本人必定是大牛无疑. 从网页的动静分离到网络带宽限制,然后是页面缓存.浏览器缓存,web服务器缓存,再到反向代理,web应用分离,整个流程下来厘清了架构web的所有层面,可以说到目前为止是我读过的最好的一本web架构书.书中都是一些概念和经验之谈,无法具体总结,也就只能写个总结吧,以表示自己在读或者读过.