文档章节

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

十年一剑
 十年一剑
发布于 2015/04/23 16:35
字数 1750
阅读 14
收藏 0
点赞 0
评论 0

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

吞吐量

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

  • 并发用户数

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

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

服务器之所以可以同时处理个请求,在于操作系统通过多执行流体系设计使得多个任务可以轮流使用系统资源,这些资源包括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 我的个人博客  ——————————

© 著作权归作者所有

共有 人打赏支持
十年一剑
粉丝 0
博文 7
码字总数 9417
作品 0
朝阳
构建高性能web站点

分层网络模型:OSI七层网络模型、TCP四层网络模型 带宽-数据的发送速度,而不是信号在线路中的传播速度 web服务器并发能力强弱的关键在于如何针对不同的请求性质设计最佳并发策略 并发用户数...

Redding ⋅ 2013/01/20 ⋅ 0

大型站点高并发架构技术

大型站点高并发架构技术 高并发: 高并发主要是由于网站PV访问量大,单台服务器涌承载大量访问所带来的压力,所以会采用多台服务器进行分流,采用服务器集群技术,对于每个访问会被发送到哪台...

浮躁的码农 ⋅ 01/15 ⋅ 0

关于高并发的优化处理

关于高并发的优化处理 1、数据库 分区分表分库(数据路由开销),读写分离(主从数据库同步开销) 2、后台系统 负载均衡——静态映射hash表(对不够灵活),后端服务器从分类者上取任务 3、异...

kanlianhui ⋅ 2014/04/16 ⋅ 0

构建高性能站点系列文章目录

由于构建高性能站点文章比较多,所以整理成目录方便阅读。 构建高性能站点系列文章-服务器性能(一) 构建高性能站点系列文章-服务器性能(二) 构建高性能站点系列文章-浏览器缓存 构建高性能站...

wwww6662003 ⋅ 2014/05/05 ⋅ 0

构建Nginx网站服务

随着计算机与Internet技术的蓬勃发展,各种Web站点成为直接面向用户的中坚力量,在各种网站服务器软件中,除了Apache外,还有一款轻量级的HTTP服务器软件——Nginx,其稳定性、高效的特性逐渐...

杨书凡 ⋅ 01/12 ⋅ 0

架构知识整理

架构概念 一套系统的软件架构就是这个系统所需的结构体的集合,包括:软件元素,软件元素之间的关系,以及二者的属性。 从视角不同一般分为: 逻辑架构 关注于各个组件之间的关系,如:用户界...

古城痴人 ⋅ 2015/08/19 ⋅ 0

《构建高性能web站点》笔记--基础架构篇

起因 大概花了一个月不到的时间,看完了这本400页不到的书《构建高性能web站点》,不得不说这是我第一次真正意义上完全看完一本书,尽管曾经看过许多技术类的书。其中一个原因,就是大部分的...

justjavac ⋅ 2014/12/17 ⋅ 0

高并发网站之解决策略

系统在正式上线后必将会面对大量用户访问,面对各种层级的高并发请求,因此我们会采用高性能的服务器、高性能的数据库、高效率的编程语言、高性能的Web容器等。但是这几个方面,还无法从根本...

lindianlide ⋅ 2014/09/05 ⋅ 0

WEB服务器如何选择 Apache or Nginx?

Web服务器是直接影响网站性能的关键因素,也是每个站长选择网站运营环境时必然考虑的问题。目前Web服务器市场产品众多,最为主流和代表性的当属Apache、Nginx以及微软的IIS。本文目的是通过A...

it1000001001 ⋅ 2017/05/12 ⋅ 0

如何测试Nginx的高性能

简介 Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器; 作为一款轻量级的Web服务器,具有占有内存少,并发能力强等优势,是高连接并发场景下Apa...

xxrenzhe11 ⋅ 2014/05/01 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

解决CentOS6、7,/etc/sysconfig/下没有iptables的问题

一、Centos 6版本解决办法: 1.任意运行一条iptables防火墙规则配置命令: iptables -P OUTPUT ACCEPT 2.对iptables服务进行保存: service iptables save 3.重启iptables服务: service ...

寰宇01 ⋅ 38分钟前 ⋅ 2

数据库备份和恢复

备份:mysqldump -u root -p 数据库>磁盘路径 恢复:mysql -u root -p 数据库<sql脚本的磁盘路径

anlve ⋅ 今天 ⋅ 0

发生了什么?Linus 又发怒了?

在一个 Linux 内核 4.18-rc1 的 Pull Request 中,开发者 Andy Shevchenko 表示其在对设备属性框架进行更新时,移除了 union 别名,这引发了 Linus 的暴怒。 这一次 Linus Torvalds 发怒的原...

问题终结者 ⋅ 今天 ⋅ 0

在树莓派上搭建一个maven仓库

在树莓派上搭建一个maven仓库 20180618 lambo init 项目说明 家里有台树莓派性能太慢。想搭建一个maven私服, 使用nexus或者 jfrog-artifactory 运行的够呛。怎么办呢,手写一个吧.所在这个...

林小宝 ⋅ 今天 ⋅ 0

Spring发展历程总结

转自与 https://www.cnblogs.com/RunForLove/p/4641672.html 目前很多公司的架构,从Struts2迁移到了SpringMVC。你有想过为什么不使用Servlet+JSP来构建Java web项目,而是采用SpringMVC呢?...

onedotdot ⋅ 今天 ⋅ 0

Python模块/包/库安装(6种方法)

Python模块/包/库安装(6种方法) 冰颖机器人 2016-11-29 21:33:26 一、方法1: 单文件模块 直接把文件拷贝到 $python_dir/Lib 二、方法2: 多文件模块,带setup.py 下载模块包(压缩文件zip...

cswangyx ⋅ 今天 ⋅ 0

零基础学习大数据人工智能,学习路线篇!系统规划大数据之路?

大数据处理技术怎么学习呢?首先我们要学习Python语言和Linux操作系统,这两个是学习大数据的基础,学习的顺序不分前后。 Python:Python 的排名从去年开始就借助人工智能持续上升,现在它已经...

董黎明 ⋅ 今天 ⋅ 0

openJdk和sun jdk的区别

使用过LINUX的人都应该知道,在大多数LINUX发行版本里,内置或者通过软件源安装JDK的话,都是安装的OpenJDK, 那么到底什么是OpenJDK,它与SUN JDK有什么关系和区别呢? 历史上的原因是,Ope...

jason_kiss ⋅ 今天 ⋅ 0

梳理

Redux 是 JavaScript 状态容器,提供可预测化的状态管理。 它是JS的状态容器,是一种解决问题的方式,所以即可以用于 react 也可以用于 vue。 需要理解其思想及实现方式。 应用中所有的 stat...

分秒 ⋅ 今天 ⋅ 0

Java 后台判断是否为ajax请求

/** * 是否是Ajax请求 * @param request * @return */public static boolean isAjax(ServletRequest request){return "XMLHttpRequest".equalsIgnoreCase(((HttpServletReques......

JavaSon712 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部