关于web:构建高性能Web站点学习笔记03

47次阅读

共计 1763 个字符,预计需要花费 5 分钟才能阅读完成。

第 3 章 服务器并发解决能力

3.1 吞吐率
  • 吞吐率:Web 服务器单位工夫内解决的申请数
  • 最大吞吐率:单位工夫内服务器可能解决的最大申请数
  • 压力测试:模仿大量并发用户继续发送 HTTP 申请,统计测试继续的总工夫,据此计算吞吐率。(个别会简化模型,对有代表性的特定申请进行压力测试)
3.1.1 压力测试的前提条件
  • 并发用户数:某一时刻同时向服务器发送申请的用户总数。
  • 总申请数
  • 申请资源形容
3.1.2 申请等待时间
  • 用户均匀申请等待时间:肯定并发用户数下,对于单个用户的服务质量
  • 服务器均匀申请解决工夫:吞吐率的倒数
  • Web 服务器应用多个执行流并发解决申请(交织应用 CPU 工夫片),单个用户的申请等待时间会拉长,但服务器均匀申请工夫可能缩小。
3.1.3 来一次压力测试
  • 压力测试软件:ab,LoadRunner,Jmeter
  • ab 测试:

    ab -n1000 -c10 http://xxx.com/test.html
    
    #-n1000 示意总申请数 1000
    #-c10   示意并发用户数 10

    申请后果

    Concurrency Level:      10
    Time taken for tests:   7.616 seconds
    Complete requests:      1000
    Failed requests:        0
    Non-2xx responses:      1000
    Total transferred:      374000 bytes
    HTML transferred:       178000 bytes
    Requests per second:    131.30 [#/sec] (mean)
    Time per request:       76.161 [ms] (mean)
    Time per request:       7.616 [ms] (mean, across all concurrent requests)
    Transfer rate:          47.96 [Kbytes/sec] received

    吞吐率
    Requests per second = Complete requests / Time taken for tests
    用户均匀申请等待时间
    Time per request = Time per request / (Complete requests / Concurrency Level)
    服务器均匀申请解决工夫
    Time per request(across all concurrent requests) = Time taken for tests / Complete requests

3.1.4 持续压力测试
  • 并发策略的设计,就是在服务器同时解决较多申请的时候,正当协调并充分利用 CPU 计算和 I / O 操作,使其在较大并发用户的状况下提供较高吞吐率。
3.2 CPU 并发计算
  • 过程(fork):由内核调度,担当分配资源的实体,通过过程描述符与数据关联
  • 子过程:将父过程所以数据复制到本人的地址空间,继承父过程所有上下文信息
  • 轻量级过程(clone):容许共享地址空间,文件,反对数据共享
  • 线程:pthread 在用户态实现多线程治理;LinuxThreads 将线程和轻量级过程一对一关联,由内核过程调度器治理
  • 过程调度器(Scheduler):保护所有可运行过程队列(Run Quere),和一个包含所有休眠过程,僵尸过程的列表
  • 过程优先级:通过 top 察看

    PR 优先级属性:过程调度器调配给过程的工夫片长度,单位为时钟个数,Linux 个别为 10ms
    NI 优先级动静调整值
  • 零碎负载:运行队列中任何时刻至多存在一个过程,那就是正在运行的过程。

    cat /proc/loadavg
    0.00 0.01 0.00 1/382 4154 前 3 个数 最近 1,5,15 分钟的零碎负载
    // 1 此时运行队列中的过程数
    // 382 过程总数
    // 4154 最初创立的过程 ID
  • 过程切换:挂起正在运行的过程,复原以前挂起的过程,称为过程切换(上下文切换)
  • 过程挂起:将过程在 CPU 寄存器中的数据拿进去暂存在内核态堆栈中
  • Nmon 监控:ContextSwitch 上下文每秒切换次数
  • 查看某时刻 httpd 过程数

    ps afx | grep httpd | wc -l
  • 总结:如果心愿服务器反对较大并发数,就要尽量减少上下文切换次数,最简略的做法就是缩小过程数,应用线程并配合其余 I / O 模型来设计并发策略
  • IOWait:CPU 闲暇并且期待 I / O 操作实现的工夫比例(通过 Nmon 失去 CPU 监控数据)
  • 锁竞争:当一个工作占用锁住资源的时候,其余工作都在期待锁的开释。要尽量减少并发申请对于共享资源的占用。

正文完
 0