名词解释

PV

  Page View,网页浏览量。网页被读者调用浏览的次数。网页每次打开或刷新一次页面,记录一次。用户对同一页面的多次访问,访问量累计。

UV

  Unique Visitor,独立访问者。是指通过互联网访问、浏览这个网页的自然人。在一定时间内,访问网站的不同访客的数量,且每个访客只被统计一次。同一个客户端的电脑,00:00~24:00访问页面多次,只计算1次。例如,假设用户周三访问3次,周四访问1次,则周三记为1次PV,周四也记为1次PV。一般通过Cookies进行计算。

TPS

  Transactions Per Second(每秒传输的事物处理个数),即服务器每秒处理的事务数。PS包括一条消息入和一条消息出,加上一次用户数据库访问。

QPS(或RPS Request Per Second)

  Queries Per Second。每秒查询率。在规定时间内所处理流量多少的衡量标准。
  对应fetches/sec,即每秒的响应请求数,也即是最大吞吐能力。

QPS = 并发数 / 平均响应时间

系统服务端性能影响的因素

衡量服务性能的指标,主要有两个:

  • QPS(Query Per Second,每秒请求数)
  • 响应时间(Response Time,RT),它可以理解为服务器处理响应的耗时。

正常情况下,响应时间越短,QPS则越高。在单线程的情况下,是呈线性关系。但也不是无限增长,RT总会有极限值。

多线程时,总QPS = (1000ms/ 响应时间)* 线程数。

响应时间与QPS的关系

对于Web系统,响应时间一般由CPU的处理时间和线程的等待时间组成。

通过减少线程的等待时间,对于系统的性能提升并不是很大。真正对性能有影响的是 CPU 的执行时间。

经过实际的测试,如果减少 CPU 一半的执行时间,就可以增加一倍的 QPS。

线程数对QPS的影响

根据公式 总QPS = (1000ms/ 响应时间)* 线程数,直觉上,线程数增多QPS越高。实际上,线程数并不是越多越好。因为线程本身也占用资源,也受其他因素制约。例如,线程越多系统的线程切换成本就会越高,而且每个线程也都会耗费一定内存。(单线程语言,即使是在单台服务器上建立多个实例,也会受到服务器本身资源的限制。例如,nodeJS可以使用PM2,在一台服务器上启动多个线程,但是服务器本身资源的有限。)

如何设置合理的线程数

那么如何设置服务器上的线程数呢?通用公式如下:

线程数 = 2 * CPU核数 + 1

最佳实践的公式:

线程数 = [(线程等待时间 + 线程 CPU 时间) / 线程 CPU 时间] × CPU 数量

当然,最好的办法是通过性能测试发现系统的最佳线程数。

如何发现瓶颈

我们可以通过系统的监控工具,发现系统的性能瓶颈。通常会发生性能瓶颈的地方有CPU、内存、磁盘、网络、数据库等。

常见地,缓存系统容易发生瓶颈的地方是内存,储存型系统则是I/O。

如何简答判断CPU是否发生瓶颈了?我们可以观察,当 QPS 达到极限时,服务器的 CPU 使用率是不是超过了 95%,如果没有超过,那么表示 CPU 还有提升的空间。

性能优化的过程

  1. 发现短板。
  2. 减少数据。事实上,有两个地方特别影响性能。一是服务端在处理数据时不可避免地存在字符到字节的相互转化,二是 HTTP 请求时要做 Gzip 压缩,还有网络传输的耗时,这些都和数据大小密切相关。
  3. 数据分级。首屏数据、重要信息优先,次级信息异步加载。
  4. 减少中间环节。

附:性能测试指标

并发 响应时间 应用服务器cpu 数据库服务器cpu TPS
50 1s 50% 20% 50

压测工具:stresstester

pom.xml文件引入包

<dependency>
<groupId>com.taobao.stresstester</groupId>
<artifactId>stresstester</artifactId>
<version>1.0</version>
</dependency>

编写测试代码:

/**
* @Title: PressTest
* @Description: 压力测试,测试一下获取用户信息的方法的qps
* @param 参数
* @return void 返回类型
* @throws
*/
@Test
public void PressTest(){
int concurrencyLevel =100;//并发数
int totalRequest = 1000;//总请求数
StressResult result = StressTestUtils.test(concurrencyLevel, totalRequest, new StressTask() {
  @Override
  public Object doTask() throws Exception {
  getUserDetail();
  return “”;
  }
  });
System.out.println(StressTestUtils.format(result));
}

测试结果:

  上图测试结果很明显有问题,做长的请求3秒多,这是不能接受的,通过分析,定位到连接池设置过小,数据库连接过小,并发过大,导致请求阻塞等待资源中,优化方式:加大连接池线程数,加大数据库连接数

资料:https://mp.weixin.qq.com/s/4pjydskyaBqyjk0TDNtSVA

      https://www.jianshu.com/p/f38b3876f522

  

服务性能指标:PV、UV、TPS、QPS的更多相关文章

  1. PV UV TPS QPS

    名词解释 PV Page View,网页浏览量.网页被读者调用浏览的次数.网页每次打开或刷新一次页面,记录一次.用户对同一页面的多次访问,访问量累计. UV Unique Visitor,独立访问者. ...

  2. 关于IT术语---ip、uv、pv、tps、qps、rps

    涉及到IT方面的几条术语,这里要好好说道说道: 只要和网站打交道,难免会经常听到一系列的转有名词  >>>  系统今日UV多少.PV多少.QPS多少之类的问题.这里就对这些常见的术语 ...

  3. PV、TPS、QPS计算公式(转)

    英文解释: PV=page viewTPS=transactions per secondQPS=queries per secondRPS=requests per second RPS=并发数/平 ...

  4. 转 PV、TPS、QPS 计算方法

    PV.TPS.QPS是怎么计算出来的?   QPS = req/sec = 请求数/秒 [QPS计算PV和机器的方式] QPS统计方式 [一般使用 http_load 进行统计]QPS = 总请求数 ...

  5. PV、TPS、QPS是怎么计算出来的?

    PV=page viewTPS=transactions per secondQPS=queries per secondRPS=requests per second RPS=并发数/平均响应时间 ...

  6. PV、TPS、QPS是怎么计算出来的?(转载的)

    QPS = req/sec = 请求数/秒 [QPS计算PV和机器的方式] QPS统计方式 [一般使用 http_load 进行统计] QPS = 总请求数 / ( 进程总数 * 请求时间 ) QPS ...

  7. 网站性能测试PV到TPS的转换以及TPS的波动和淘宝性能测试要点

    <淘宝性能测试白皮书V0.3> 性能测试的难点不在于测,在于测出的数据和实际的对照关系,以及测试出来的数据对性能的评估(到底是好,还是不好). 淘宝性能测试白皮书,解决了我的4个问题:1. ...

  8. 有关“数据统计”的一些概念 -- PV UV VV IP跳出率等

    有关"数据统计"的一些概念 -- PV UV VV IP跳出率等 版权声明:本文为博主原创文章,未经博主允许不得转载. 此文是本人工作中碰到的,随时记下来的零散概念,特此整理一下. ...

  9. 日志分析_统计每日各时段的的PV,UV

    第一步: 需求分析 需要哪些字段(时间:每一天,各个时段,id,url,guid,tracTime) 需要分区为天/时 PV(统计记录数) UV(guid去重) 第二步: 实施步骤 建Hive表,表列 ...

  10. mysql中TPS, QPS 的计算方式

    今天突然有个同事问题一个问题, mysqlTPS和QPS的计算公式是什么? 以前确实也没有关注过这个计算公式,所以查了下学习了下: 下面是参考内容.  在做db基准测试的时候,qps,tps 是衡量数 ...

随机推荐

  1. MySQL概述 - 一条查询sql语句的执行过程

    Server层 连接器 建立连接.获取权限.维持和管理连接. 连接建立比较复杂,建议使用长连接 定期断开长连接 mysql_reset_connection指令 查询缓存 建议关闭,任何更新操作会此t ...

  2. ssh复制公钥成功后仍需输入密码

    1,网上说权限问题 登录流程: 被登录机器的文件权限: //用户权限 chmod 700 /home/username //.ssh文件夹权限 chmod 700 ~/.ssh/ // ~/.ssh/ ...

  3. php+大文件上传

    1.使用PHP的创始人 Rasmus Lerdorf 写的APC扩展模块来实现(http://pecl.php.net/package/apc) APC实现方法: 安装APC,参照官方文档安装,可以使 ...

  4. 文件操作:fread()和fwrite()

    fread和fwrite函数功能     用来读写一个数据块.   一般调用形式     fread(buffer,size,count,fp);     fwrite(buffer,size,cou ...

  5. smooth L1损失函数

    当预测值与目标值相差很大时,L2 Loss的梯度为(x-t),容易产生梯度爆炸,L1 Loss的梯度为常数,通过使用Smooth L1 Loss,在预测值与目标值相差较大时,由L2 Loss转为L1  ...

  6. java开发需掌握技能1

    1.熟练掌握Java基础.语法规范.集合框架等,基础语法.Java关键字.内部类.泛型.集合类使用场景2.Java io/nio框架体系.文本文件.二进制文件读写.nio.buffer机制3.Jsp. ...

  7. selenium+键盘鼠标

    一.简单操作 1.点击(鼠标左键)页面按钮:click() 2.请空输入框:clear() 3.输入字符串:send_keys() 二.模拟键盘 模拟键盘的操作需要先导入键盘模块:from selen ...

  8. linux系统下自动删除前N天的日志文件

    删除文件命令: find 对应目录 -mtime +天数 -name "文件名" -exec rm -rf {} \; 实例命令: find /opt/soft/log/ -mti ...

  9. nginx利用try_files实现多个源

    比如一个视频网站,视频资源分散在几台机器上,但是给用要提供统一的IP,路径,端口.就需要nginx,先检查本机是否有改文件,如果没有就代理其他地方 location / { root /data/ww ...

  10. 如何让你的JS代码写的更漂亮

    感觉这篇文章总结的js的规范写法不错,拿来收藏.转自:https://mp.weixin.qq.com/s/AtR94IL9BW9EXOTnKOilmA 1. 按强类型风格写代码 JS是弱类型的,但是 ...