下面这些概念对于专业做性能测试的会比较熟悉,但是对于开发人员不一定都那么清楚。

  • 并发用户数: 某一时刻同时请求服务器的用户总数,通常我们也称并发数,并发连接数等。
  • 吞吐率:对于web服务器来说就是每秒处理的请求数,req/sec.
  • 服务器平均请求处理时间:服务内部的处理时间,可以理解为我们平时log里的时间。
  • 用户平均请求延迟时间:用户发送一个请求到接收到响应的时间间隔。

并发用户数和吞吐率容易被人混淆,除非服务器刚好1秒内能处理完并发用户的请求,否则两者数值上没有必然联系。一般的服务器都有并发的限制,比如MongoDB的maxConns,Tomcat的maxThreads。

吞吐率和服务器的请求处理时间则互为倒数,其实都是用来衡量服务器内部质量的,而用户平均请求延迟时间则是在一定并发下用来衡量对单个用户的服务质量。

一般的随着并发越来越大,吞吐率是先升后降,因为平均服务器处理时间是吞吐率的倒数,所以它是先降后升,存在一个平衡点,往往超过这个点,吞吐率明显下降,服务器平均处理时间也会明显变大。这个平衡点就是我们做压力测试要寻找的,叫做服务器的最大吞吐率,有时候我们习惯了干脆直接叫做吞吐率了,这时的并发可以叫做最大并发数或者叫最佳并发数。很多人习惯说:某某服务支持多大多大并发,我理解应该就是指的这个数。

而用户平均请求延迟时间则会随着并发数的增加而变大,一般在达到服务器的最大并发数之前增加的会比较缓慢,超过之后会骤增。如果一直只有一个用户请求,那么用户平均请求延迟时间自然等于服务器平均请求处理时间(忽略网络耗时),但随着并发用户的增加,无论服务器的并发策略如何,用户的等待时间都会变长,因为假设理想情况,服务器资源无限,所有的请求都是并行处理也仅仅是“等于”,但现实是上下文切换,请求排队等等的代价不可忽略,所以具体到某个用户的等待时间就会变长。而服务器平均请求处理时间,随着资源的充分利用一开始反而可能会下降。

综上所述,如果用户平均请求延迟时间 » 服务器平均处理时间,忽略网络耗时的话,可以说服务器已经存在瓶颈了,说明实际大并发数已经超过服务器的最大并发处理能力了。

我们的生产环境现在就面临这样的问题,每天的峰值期间从前面Nginx看平均的响应时间已经达到了3s,但是Tomcat内部的处理时间其实并不到1s,剩下的时间耗在了哪?线程切换,请求排队…

那么如何在不加机器的情况下优化这个问题呢?既然瓶颈是服务器并发,那么就得想办法提高并发能力。具体到Tomcat可能是一些参数调优之内的,比如NIO,APR,但这些都做过了之后还有没有优化的空间呢。最近我准备验证下Servlet3.0的异步和Jetty的Continuation,总体的思路就是将容器线程和业务线程分开,减小并发的粒度来提高并发。但具体有没有效果很难说,只有测了才知道,想要并发越高,逻辑就得拆的越细,代价就越高。

最后,实际情况要复杂的多,考虑网络因素,用户实际的平均请求延迟时间会更大,而且通常我们缺少这样的数据参考,所以现在很多都在做端到端的监控。

关于高性能Web服务的一点思考的更多相关文章

  1. 高性能Web服务之lnmp架构应用

    传统上基于进程或线程模型架构的web服务通过每进程或每线程处理并发连接请求,这势必会在网络和I/O操作时产生阻塞,其另一个必然结果则是对内存或CPU的利用率低下.生成一个新的进程/线程需要事先备好其运 ...

  2. 高性能Web服务端 PHP vs Node.js vs Nginx-Lua 的对比分析

    1. ngx_lua nodejs php 比较 我在研究一阵子ngx_lua之后发现lua语法和js真的很像,同时ngx_lua模型也是单线程的异步的事件驱动的,工作原理和nodejs相同,代码甚至 ...

  3. 关于纯移动web优点的一点思考

    自己造个小概念,纯移动web就是手机浏览器上访问的网站^_^ 缺点就不说了,说几个随着硬件和网络发展会放大的优势. 1 相对app来说,完全无缝对接,只要符合html标准,一次开发全平台部署 2 推广 ...

  4. 尹吉峰:使用 OpenResty 搭建高性能 Web 应用

    2019 年 8 月 31 日,OpenResty 社区联合又拍云,举办 OpenResty × Open Talk 全国巡回沙龙·成都站,原贝壳找房基础架构部工程师尹吉峰在活动上做了<使用 O ...

  5. [技术博客] 软工-Ruby on Rails前端工具链的配置以及对Web应用结构设计的一点思考

    一.相关工具链简介 HAML HAML是专门面向Ruby on Rails模版语法设计的一门标记语言,其结合RoR的views部分模版语法的特点,对原来的*.html.erb(嵌入Ruby代码的HTM ...

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

    本文地址 分享提纲: 1. 概述 2. 知识点 3. 待整理点 4. 参考文档 1. 概述 1.1)[该书信息] <构建高性能Web站点>: -- 百度百科 -- 本书目录: 第1章 绪论 ...

  7. 编写高性能Web应用程序的10个技巧

    这篇文章讨论了: ·一般ASP.NET性能的秘密 ·能提高ASP.NET表现的有用的技巧和窍门 ·在ASP.NET中使用数据库的建议 ·ASP.NET中的缓存和后台处理 使用ASP.NET编写一个We ...

  8. web服务器之nginx与apache

    最近准备架设php的web服务器,以下内容可供参考. 1.nginx相对于apache的优点: 轻量级,同样起web 服务,比apache占用更少的内存及资源 抗并发,nginx 处理请求是异步非阻塞 ...

  9. 构建高性能web站点--读书大纲

    用户输入你的站点网址,等了半天..还没打开,裤衩一下就给关了.好了,流失了一个用户.为什么会有这样的问题呢.怎么解决自己站点“慢”,体验差的问题呢. 在这段等待的时间里,到底发生了什么?事实上这并不简 ...

随机推荐

  1. Handlers

    示例: - name: Configure webserver with nginx and tls hosts: webservers sudo: True vars: conf_file: /et ...

  2. CSS基础知识真难啊-background-渐变

    文章参考 http://www.zhangxinxu.com/wordpress/?p=727 http://www.uqu8.com/html/2014/html-css_1105/176.html ...

  3. Linux下安装webstorm

    Linux下安装webstorm 1--在webstorm官网里面下载最新的版本 WebStorm-11.0.3.tar.gz 2--创建webstorm的安装目录 #mkdir /usr/webst ...

  4. bootstrap学习总结-03 常用标签1

    1 显示段落 在HTML中,段落使用p标签包起来,重要的文字使用strong标签,em标签.<em> 标签告诉浏览器把其中的文本表示为强调的内容.对于所有浏览器来说,这意味着要把这段文字用 ...

  5. JZOJ P1830[9.30]送牛奶

    传送门 临近NOIp,写一些简单题. 二分+BFS,注意的是要把数组开小点,有效减少memset的时间. //OJ 1830 //by Cydiater //2016.9.22 #include &l ...

  6. 深入JVM-性能监控工具

    一.Linux下的性能监控工具 1.1 显式系统整体资源使用情况-top命令 top命令的输出可以分为两个部分:前半部分是系统统计信息,后半部分是进程信息. 在统计信息中,第一行是任务队列信息,他的结 ...

  7. IOS OC 计算器算法(不考虑优先级)

    个人见解:为还在计算器算法方面迷惑的同学一个数据处理解决方案:定义一个可变数组array,一个可变字符串str,使字符通过[array addObject:str];方法添加到可变数组,每当触发运算符 ...

  8. js时间戳转成日期不同格式 【函数】

    //第一种 function getLocalTime(nS) { ).toLocaleString().replace(/:\d{,}$/,' '); } alert(getLocalTime()) ...

  9. CentOS编译安装NodeJS+Express

    NodeJS是基于Chrome’s Javascript runtime,也就是Google V8引擎执行Javascript的快速构建网络服务及应用的平台,其优点有: 在CentOS编译安装Node ...

  10. 20145212 《Java程序设计》第5周学习总结

    20145212 <Java程序设计>第5周学习总结 教材学习内容总结 第八章 1.Java中所有错误都会被打包为对象,通过try和catch语法可以对代表错误的对象做处理. try{ . ...