压力测试 订阅
作者: 蒂莫西·F·盖特纳 出版社: 中信出版社副标题: 对金融危机的反思译者: 益智 出版年: 2015-4-1页数: 456定价: 58.00元装帧: 假精装ISBN: 9787508649436 展开全文
作者: 蒂莫西·F·盖特纳 出版社: 中信出版社副标题: 对金融危机的反思译者: 益智 出版年: 2015-4-1页数: 456定价: 58.00元装帧: 假精装ISBN: 9787508649436
信息
作    者
蒂莫西·F·盖特纳
译    者
益智
定    价
58.00元
装    帧
假精装
书    名
压力测试
出版时间
2015-4-1
出版社
中信出版社
副标题
对金融危机的反思
ISBN
9787508649436
页    数
456
压力测试内容简介
拯救美国经济的焦点人物——美国有史以来最年轻的财政部长盖特纳,反思整个金融危机始末!在这本充满启迪的回忆录中,蒂莫西·盖特纳解释了美国如何成功渡过了其政治和金融系统的最终压力测试。作为纽约联邦储备银行的主席和美国总统贝拉克·奥巴马的财政部长,盖特纳帮助美国渡过了大萧条以来最严重的金融危机,从繁荣到萧条到抢救再到复苏。在这部坦诚、吸引人、有历史价值的回忆录中,带领读者领略危机的台前幕后,解释他如何做出各种艰难抉择以及在政治上不受欢迎的决定,用以修复一个破碎的金融体系,防止国家经济走向崩溃,避免了第二次经济大萧条,但却失去了美国人民的支持。《压力测试》揭示了盖特纳部长鲜为人知的一面。他讲述了早期作为一个年轻的财政部官员帮助应对1990年的国际金融危机,然后描述了在华尔街繁荣破灭之前他所看到的一切,所做的事情和他错过的事情。他带领读者进入其间,从危机开始,到加剧。然后失控,讨论他在纽约联储和财政部期间最具争议的任期,包括拯救贝尔斯登、雷曼兄弟破产时悲惨的周末,对AIG的救援和公司大量分红的愤怒,以及在奥巴马政府内部对他的广受批评但最终成功结束危机的计划所做的斗争,并将争取到在70多年来最全面的金融改革。 [1] 
收起全文
精华内容
下载资源
问答
  • 压力测试

    2018-11-16 11:18:27
    压力测试概述 压力测试用来检测函数(方法)的性能,和编写单元功能测试的方法类似,但需要注意以下几点: 文件名命名规则:xxx_test.go 函数名命名规则:func BenchXxx(b *testing.B),其中XXX可以是任意字母数字的...

    压力测试概述
    压力测试用来检测函数(方法)的性能,和编写单元功能测试的方法类似,但需要注意以下几点:

    • 文件名命名规则:xxx_test.go
    • 函数名命名规则:func BenchXxx(b *testing.B),其中XXX可以是任意字母数字的组合,但是首字母不能是小写字母
    • 函数内必须使用b.N进行轮询测试
    • 函数内可以选择使用b.ReportAllocs()汇报内存开销
    • 在GoLandIDE中你可以在待测包上右键,Run->gobentch xxx,以执行整包的压力测试,默认从上向下依次执行所有
    • 终端执行当前包下的所有压力测试:
    go test -bench=.
    
    • 终端执行多次求平均值
    go test -bench=. -count=3
    

    定义待测的工具函数
    这里给出了斐波那契数列的递归和非递归两种算法实现

    //获取斐波那契数列第n项的递归实现
    //1,1,2,3,5,8,13,21,34,55
    func GetFibonacci1(n int) int {
    	if n == 0 || n == 1 {
    		return 1
    	} else {
    		return GetFibonacci1(n-1) + GetFibonacci1(n-2)
    	}
    }
    
    //获取斐波那契数列第n项的非递归实现
    //1,1,2,3,5,8,13,21,34,55
    func GetFibonacci2(n int) int {
    	x, y := 1, 1
    	for i := 0; i < n; i++ {
    		x, y = y, x+y
    	}
    	return x
    }
    

    定义测试用例

    //导入测试工具包
    import "testing"
    
    //测试用例1:多次测试函数GetFibonacci1,获得平均执行时间
    func BenchmarkGetFibonacci1(b *testing.B) {
    	b.Log("BenchmarkGetFibonacci1")
    	
    	//汇报内存开销
    	b.ReportAllocs()
    	for i := 0; i < b.N; i++ {
    		GetFibonacci1(10)
    	}
    }
    
    //测试用例2:多次测试函数GetFibonacci2,获得平均执行时间
    func BenchmarkGetFibonacci2(b *testing.B) {
    	b.Log("BenchmarkGetFibonacci2")
    	
    	//汇报内存开销
    	b.ReportAllocs()
    	for i := 0; i < b.N; i++ {
    		GetFibonacci2(10)
    	}
    }
    

    执行结果
    这里写图片描述
    不难看出,算法2的执行效率6.55纳秒/次要远远优于算法1的503纳秒/次

    定义待测试的结构体

    //导入包
    import (
    	"encoding/json"
    	"os"
    	"fmt"
    )
    
    //定义待测的结构体
    type Student struct {
    	Name string
    	Age  int
    }
    
    //将当前对象存入JSON文件
    func (s *Student) Save() error {
    	dstFile, _ := os.OpenFile("d:/temp/student.json", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666)
    	defer dstFile.Close()
    
    	//fmt.Println("Save:s=",s)
    	encoder := json.NewEncoder(dstFile)
    	err := encoder.Encode(s)
    	if err != nil {
    		fmt.Println("保存失败,err=", err)
    		return err
    	}
    
    	//fmt.Println("保存成功!")
    	return nil
    }
    
    //读取JSON文件,转化为一个student对象,加载的结果存入s中
    func (s *Student) Load() error {
    	srcFile, _ := os.OpenFile("d:/temp/student.json", os.O_RDONLY, 0666)
    	defer srcFile.Close()
    	decoder := json.NewDecoder(srcFile)
    	err := decoder.Decode(s)
    	if err != nil {
    		fmt.Println("加载失败,err=", err)
    		return err
    	}
    
    	//fmt.Println("加载成功!")
    	return nil
    }
    

    定义结构体函数的性能测试用例

    //导入测试工具包
    import "testing"
    
    //测试用例1:多次测试学生的保存方法,获得平均执行时间
    func BenchmarkStudentSave(b *testing.B) {
    	b.Log("BenchmarkStudentSave")
    	
    	//汇报内存开销
    	b.ReportAllocs()
    	for i := 0; i < b.N; i++ {
    		student := &Student{"张全蛋", 20}
    		student.Save()
    	}
    }
    
    //测试用例2:多次测试学生的加载方法,获得平均执行时间
    func BenchmarkStudentLoad(b *testing.B) {
    	b.Log("BenchmarkStudentLoad")
    	
    	//汇报内存开销
    	b.ReportAllocs()
    	for i := 0; i < b.N; i++ {
    		student := &Student{}
    		student.Load()
    	}
    }
    

    执行效果
    这里写图片描述

    学院Go语言视频主页
    https://edu.csdn.net/lecturer/1928

    [清华团队带你实战区块链开发]
    (https://ke.qq.com/course/344443?tuin=3d17195d)
    扫码获取海量视频及源码 QQ群:
    721929980
    在这里插入图片描述

    展开全文
  • Jmeter接口测试+压力测试

    万次阅读 多人点赞 2017-05-14 14:01:50
    jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简单。因为jmeter是java开发的,所以运行的时候必须先要安装jdk才可以。jmeter是...

      jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简单。因为jmeter是java开发的,所以运行的时候必须先要安装jdk才可以。jmeter是免安装的,拿到安装包之后直接解压就可以使用,同时它在linux/windows/macos上都可以使用。
      jmeter可以做接口测试和压力测试。其中接口测试的简单操作包括做http脚本(发get/post请求、加cookie、加header、加权限认证、上传文件)、做webservice脚本、参数化、断言、关联(正则表达式提取器和处理json-json path extractor)和jmeter操作数据库等等。

    接口测试

    Jmeter-http接口脚本

    一般分五个步骤:(1)添加线程组 (2)添加http请求 (3)在http请求中写入接入url、路径、请求方式和参数 (4)添加查看结果树 (5)调用接口、查看返回值

    • jmeter 发get请求

      这里写图片描述

    这里写图片描述

    • jmeter 发post请求

      这里写图片描述

    • jmeter 添加cookie

      需要在线程组里添加配置元件—HTTP Cookie 管理器

    这里写图片描述

    这里写图片描述

    • jmeter 添加header
      需要在线程组里面添加配置元件—HTTP信息头管理器
      这里写图片描述

    这里写图片描述

    • jmeter 上传文件

      这里写图片描述

    • jmeter 参数化
      入参经常变化的话,则可以设置成一个变量,方便统一修改管理;如果入参要求随机或可多种选择,则通过函数生成器或者读取文件形成一个变量。所以参数化有三种方式:用户定义的变量、函数生成器、读取文件。

      (1)用户定义的变量
        需要添加配置元件-用户定义的变量。

    这里写图片描述

    这里写图片描述

    (2)函数生成器
      需要用到函数助手功能,可以调用函数生成一些有规则的数据。常用的几个函数有_uuid、_random、_time。_uuid会生成一个随机唯一的id,比如在避免java请求重发造成未处理数据太多的情况,接口请求可加一个唯一的请求id唯一的响应id进行一一对应;随机数_random,可以在你指定的一个范围里取随机值;取当前时间_time,一些时间类的入参可以使用,如{__time(,)} 是生成精确到毫秒的时间戳、{__time(/1000,)}是生成精确到秒的时间戳、${__time(yyyy-MM-dd HH:mm:ss,)} 是生成精确到秒的当前时间。

    这里写图片描述

    (3)从文件读取
      需要在线程组里面添加配置元件-CSV Data Set Config
      其中Recycle on EOF:设置True后,允许循环取值
    这里写图片描述
      具体的例子如下所示:

    这里写图片描述

    这里写图片描述

    这里写图片描述

    • jmeter 断言
        jmeter断言用来检测响应返回的结果和我们预期的是否一致。若针对整个线程组的话,则在线程组下添加断言-响应断言;若只是针对某个请求的话,则在请求下添加断言-响应断言。

    这里写图片描述

    这里写图片描述

    • jmeter关联

        接口请求之间存在参数调用,为了保存这个参数,建立jmeter关联。比如登陆接口和购买商品接口,购买商品接口就需要登陆接口返回的token等登陆信息,jmeter关联就可以保存这个token信息,方便购买商品接口使用。
        jmeter关联可以通过二种方式来完成,获取到返回结果中指定的值。它们分别是正则表达式提取器、 json path extractor。
      (1)正则表达式提取器
      若想获取的返回值未匹配到,可以把正则表达式两边匹配的数据扩大点。

      这里写图片描述

      a. 关于正则表达式

      ():括起来的部分就是要提取的。
      .:匹配除换行外的任何字符串。
      +:代表+号前面的字符必须至少出现一次(一次或多次)。
      ?:代表?前面的字符最多可以出现一次,在找到第一个匹配项后停止(0次或1次)。
      :代表号前面的字符可以不出现,也可以出现一次或者多次(0次、1次或者多次)
      (.*):贪婪模式,匹配尽可能多的字符
      (.*?)或(.+?):匹配尽可能少的字符,一旦匹配到第一个就不往下走了。

      b. 关于模板

      若想提取多个值的话,比如是a和b这两个值,则可以写成:$1$$2$。无论要提取多少个值,引用名称就是一个的,比如名称为id,${id_go}:获取整个字符串ab,${id_g1}:获取的是a,${id_g2}:获取的是b。
      下面有一个具体的实例,如下图所示:

    这里写图片描述

    这里写图片描述

    这里写图片描述

    (2)json path extractor
      jmeter通过安装json path extractor插件来处理json串,提取json串中的字段值。插件的下载地址:https://jmeter-plugins.org/?search=jpgc-json,下载完成,解压后,直接把lib文件夹放到jmeter相应目录下面。特别说明:jmeter 2.xx左右的版本尝试过无法使用该插件,在jmeter 3.xx左右的版本装完插件后能正常使用。
      需要在请求下创建后置处理器-jp@gc-JSON Path Extractor,具体的实例如下所示:

    这里写图片描述

    这里写图片描述

    这里写图片描述

      关于json path相关插件的方法和使用,推荐可以看这篇博客: http://www.jianshu.com/p/56a607fc0d8f

    • jmeter 操作数据库
        操作数据库基本有四个步骤:(1)导入mysql的jdbc的jar包 (2)创建数据库的连接配置,线程组里添加配置元件-JDBC Connection Configuration (3)线程组里添加jdbc request,写sql语句 (4)添加察看结果树,点击启动按钮,就能看到执行的SQL。具体的实例如下截图所示:

      这里写图片描述

    这里写图片描述

    这里写图片描述

    这里写图片描述

      特别说明:jmeter还可以操作oracle、postgreSQL、msSQL、mongodb等等数据库,同时不同的数据库,JDBC Connection Configuration填写的Database url格式和JDBC Driver驱动名称也不相同。jmeter数据库驱动列表如下表所示:

    数据库 驱动 数据库url
    mysql com.mysql.jdbc.Driver jdbc:mysql://host:port/{dbname}?allowMultiQueries=true
    oracle org.postgresql.Driver dbc:postgresql:{dbname}

    Jmeter-webservice接口脚本

      基本分为五个步骤:(1)先需要通过soapui工具获取到webservice接口的请求地址、请求报文和请求soapaction。(2)jmeter新建一个线程组 (3)线程组下建立SOAP/XML-RPC Request,写入请求url、请求报文、请求soapaction。(3)启动jmeter,调用接口,通过察看结果树查看返回值。
      soapui获取信息的实例如下图所示:

    这里写图片描述

      soapui提交完后,点击raw,可看到soapation,有些接口若没返回soapation,则jmeter里也就不用填。

    这里写图片描述
       jmeter-webservice脚本实例如下图所示:

    这里写图片描述

    压力测试

      压力测试分两种场景:一种是单场景,压一个接口的;第二种是混合场景,多个有关联的接口。压测时间,一般场景都运行10-15分钟。如果是疲劳测试,可以压一天或一周,根据实际情况来定。

    压测任务需求的确认

    压测前要明确压测功能和压测指标,一般需要确定的几个问题:

    1. 固定接口参数进行压测还是进行接口参数随机化压测?
    2. 要求支持多少并发数?
    3. TPS(每秒钟处理事务数)目标多少?响应时间要达到多少?
    4. 压服务器名称还是压服务器IP,一般都是压测指定的服务器

    压测设置

    1. 线程数:并发数量,能跑多少量。具体说是一次存在多少用户同时访问
    2. Rame-Up Period(in seconds):表示JMeter每隔多少秒发动并发。理解成准备时长:设置虚拟用户数需要多长时间全部启动。如果线程数是20,准备时长为10,那么需要10秒钟启动20个数量,也就是每秒钟启动2个线程。
    3. 循环次数:这个设置不会改变并发数,可以延长并发时间。总请求数=线程数*循环次数
    4. 调度器:设置压测的启动时间、结束时间、持续时间和启动延迟时间。

    压测结果查看

      运行完后,聚合报告会显示压测的结果。主要观察Samples、Average、error、Throughput。

    1. Samples:表示一共发出的请求数
    2. Average:平均响应时间,默认情况下是单个Request的平均响应时间(ms)
    3. Error%:测试出现的错误请求数量百分比。若出现错误就要看服务端的日志,配合开发查找定位原因
    4. Throughput:简称tps,吞吐量,默认情况下表示每秒处理的请求数,也就是指服务器处理能力,tps越高说明服务器处理能力越好。

    压测结果的分析

    1. 有错误率同开发确认,确定是否允许错误的发生或者错误率允许在多大的范围内;

    2. Throughput吞吐量每秒请求的数大于并发数,则可以慢慢的往上面增加;若在压测的机器性能很好的情况下,出现吞吐量小于并发数,说明并发数不能再增加了,可以慢慢的往下减,找到最佳的并发数;

    3. 压测结束,·登陆相应的web服务器查看CPU等性能指标,进行数据的分析;

    4. 最大的tps:不断的增加并发数,加到tps达到一定值开始出现下降,那么那个值就是最大的tps。

    5. 最大的并发数:最大的并发数和最大的tps是不同的概率,一般不断增加并发数,达到一个值后,服务器出现请求超时,则可认为该值为最大的并发数。
    6. 压测过程出现性能瓶颈,若压力机任务管理器查看到的cpu、网络和cpu都正常,未达到90%以上,则可以说明服务器有问题,压力机没有问题。
    7. 影响性能考虑点包括:数据库、应用程序、中间件(tomact、Nginx)、网络和操作系统等方面。

    jmeter在linux下进行压力测试

    1. jmeter 在linux安装
        简单说下,就是要先安装jdk,同时再配置环境变量,最后再上传jmeter压缩的安装包,在linux下解压完安装包就可以使用了。推荐博客:http://blog.csdn.net/zhemeteor/article/details/51315874

    2. jmeter在linux运行
      进入jmeter下的bin目录下运行脚本,未配置jmeter环境变量的条件下,运行的命令:

    ./jmeter -n -t a.jmx -l res.jtl

    其中a.jmx是准备好的jmeter脚本,res.jtl是测试结果文件,测试结果文件可以导入到jmeter察看结果树下查看。

    jmeter添加负载机

    展开全文
  • JMeter做压力测试教程及结果分析

    万次阅读 多人点赞 2019-02-15 16:55:52
    用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 三、Java环境的安装与配置: (1)因为JMeter是使用JAVA写的,所以使用JMeter之前,先安装JAVA环境, oracle官网下载JDkht...

    一、测试工具:

           JMeter

    二、JMeter介绍

    Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域

    三、Java环境的安装与配置:

    (1)因为JMeter是使用JAVA写的,所以使用JMeter之前,先安装JAVA环境,

     

    配置变量

    • 系统变量→新建 JAVA_HOME 变量 。  变量值填写jdk的安装目录(本人是 E:\Java\jdk1.7.0)

    • 系统变量→寻找 Path 变量→编辑

      在变量值最后输入 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

      (注意原来Path的变量值末尾有没有;号,如果没有,先输入;号再输入上面的代码)

    • 系统变量→新建 CLASSPATH 变量

      变量值填写   .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(注意最前面有一点)

      系统变量配置完毕

    • 测试jdk是否安装成功,可在【开始】中搜索cmd,输入【java -version】

     

     

    四、JMeter下载与使用

       1.JMeter下载地址:在官网 http://jmeter.apache.org/ 

    2.解压下载的二进制包,使用cmd命令进入bin目录,使用jmeter.bat启动程序。(注意直接双击jmeter.bat无法启动时需要使用Window+R,输入cmd,然后进入bin目录如下)

     3.启动之后会有两个窗口,一个cmd窗口,一个JMeter的 GUI

    上面的意思就是:不要使用GUI运行压力测试,GUI仅用于压力测试的创建和调试;执行压力测试请不要使用GUI。使用下面的命令来执行测试:

    jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]

    五、创建测试

    1.创建线程组

    在“测试计划”上右键 【添加】-->【Threads(Users)】-->【线程组】

    2.设置线程数和循环次数。我这里设置线程数为500,循环一次。

    3..创建Http请求

    在“线程组”右键 【添加-】->【samlper】-->【HTTP 请求】

    4.添加察看结果树和聚合报告

    在我们刚刚创建的线程组上右键 【添加】-->【监听器】-->【察看结果树】。添加聚合报告,右键 【添加】-->【监听器】-->【聚合报告】。

    直接添加,然后点击运行按钮就可以看到结果了。

    结果树分析:

    通过察看结果树,我们可以看到每个请求的结果,其中红色的是出错的请求,绿色的为通过。

    Thread Name(线程组名称): 线程组 1-24

    Sample Start( 启动开始时间): 2019-02-15 15:00:14 CST

    Load time(加载时长): 290

    Connect Time:(连接时长) 86

    Latency(等待时长): 174

    Size in bytes(发送的数据总大小): 2212

    Sent bytes:821

    Headers size in bytes(发送数据的其余部分大小): 1162

    Body size in bytes: 1050

    Sample Count(发送统计): 1

    Error Count(错误统计): 0

    Data type ("text"|"bin"|""): text

    Response code(返回状态码): 200

    Response message(返回信息): OK

    这里绿色的就说明请求是通过的,返回值是200,如果出现红色的×就说明请求失败,这时候可以通过右边的取样器结果和响应数据来查看结果。

    聚合报告分析:

    Sample:本次测试场景共运行多少线程;

     Average:平均响应时间; 

     Median:统计意义上的响应时间中值;

      90% line:所有线程中90%的线程响应时间都小于xx的值;

      Min:响应最小时间;

     Max:响应最大时间;

     Error:出错率;

    Throughput - 吞吐量以“requests/second、requests /minute、 requests /hour”来衡量。 时间单位已经被选取为second,所以,显示速率至少是1.0,即每秒1个请求。 当吞吐量被保存到CVS文件时,采用的是requests/second,所以30.0 requests/second 在CVS中被保存为0.5

     

    Kb/sec - 以Kilobytes/seond来衡量的吞吐量

    六、测试结果

    (1)50个用户同时访问企业用户会议室预定页面,平均响应时间是0.146秒,最大的响应时间0.387秒,最小的响应时间是0.096秒,错误率为0。

    (2)100个用户同时访问企业用户会议室预定页面,平均响应时间是2.295秒,最大的响应时间8.132秒,最小的响应时间是0.425秒,错误率为0。

     

     

    展开全文
  • 使用hadoop官方工具遇到了一些问题(附录详写),所以自己编写了测试用例进行压力测试 首先pom文件引入lombok,hadoop和hdfs的依赖包 <properties> <lombok.version>1.16.20</lombok.version> &...

    使用hadoop官方工具遇到了一些问题(附录详写),所以自己编写了测试用例进行压力测试

    首先pom文件引入lombok,hadoop和hdfs的依赖包

    <properties>
        <lombok.version>1.16.20</lombok.version>
        <hadoop.version>2.7.7</hadoop.version>
    </properties>
    
    	<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
            <scope>provided</scope>
        </dependency>
    	<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs -->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs</artifactId>
            <version>${hadoop.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>${hadoop.version}</version>
        </dependency>
    

    下面是我编写的测试用例(需要配置的注释已给出,需要配置的路径需要自行配置),编译后直接放到一台有linux服务器上进行测试,测试命令为

    java -cp./*; hadoop.HLT
    

    其中-cp./*是要引入测试用例需要的jar包,请把项目打包后获取lib下的jar包

    import lombok.SneakyThrows;
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.FileSystem;
    import org.apache.hadoop.fs.Path;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.concurrent.CountDownLatch;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    
    /**
     * @ClassName HadoopLinuxTest
     * @Descriptiom TODO hadoop I/O test for linux
     * @Author KING
     * @Date 2019/4/1 17:26
     * @Version 1.2.1
     **/
    public class HLT implements Runnable
    {
        //测试文件地址
        private static final String src = "/root/32KB" ;
        //hadoop namenode 节点ip
        private static final String remote = "hdfs://192.168.1.191:9000/";
        //设定文件数偏移(用于中继上传)
        private static final int Offset = 0;
        //上传文件总数
        private static final int TOTAL_FILES = 100000000;
        //上传文件使用线程数
        private static final int TOTAL_THREADS = 200 ;
    
        private String dst ;
        private int FileStartNum;
        private int FileEndNum;
        private Configuration conf;
        private CountDownLatch Latch;
    
        public HLT(String dst, int fileStartNum, int fileEndNum, Configuration conf, CountDownLatch latch) {
            this.dst = dst;
            FileStartNum = fileStartNum;
            FileEndNum = fileEndNum;
            this.conf = conf;
            Latch = latch;
        }
    
        @SneakyThrows
        public static void main(String[] args) {
            ExecutorService ThreadPool = Executors.newFixedThreadPool(TOTAL_THREADS);
            CountDownLatch Latch = new CountDownLatch(TOTAL_THREADS);
            Configuration conf = new Configuration() ;
            conf.set("fs.defaultFS", "hdfs://192.168.1.191:9000"); // "hdfs://master:9000"
            int SingleFileNum = TOTAL_FILES/TOTAL_THREADS;
            File file = new File("/root/record.txt");
            FileOutputStream fileOut = new FileOutputStream(file,true);
            Long a = System.currentTimeMillis();
            String st ="start time sec :" + a +"\n";
            fileOut.write(st.getBytes());
    
            for (int i=0;i<TOTAL_THREADS;i++){
                int FileStartNum = i * SingleFileNum + Offset;
                int FileEndNum = (i+1) * SingleFileNum;
                //hadoop每个文件夹都有文件数量上限,所以此处为每个线程执行的上传新建一个目录
                String dst =remote + "linux_test"+i+"/";
                HLT hlt = new HLT(dst, FileStartNum, FileEndNum, conf ,Latch);
                ThreadPool.execute(hlt);
            }
            Latch.await();
    
            Long b = System.currentTimeMillis();
            String et ="end  time  sec :" + b +"\n";
            fileOut.write(et.getBytes());
            String allt = "all time :" + ((b-a)/1000) + "s" +"\n";
            fileOut.write(allt.getBytes());
            System.out.println("总用时:" + ((b-a)/1000) + "s");
    
            ThreadPool.shutdown();
        }
    
        @Override
        public void run() {
            //hadoop目录未指定时启用,修改为自己hadoop的根目录
    //        System.setProperty("hadoop.home.dir", "/root/hadoop-2.7.1");
            //用户名为非root时启用
    //        System.setProperty("HADOOP_USER_NAME", "root");
            for (int n = FileStartNum; n < FileEndNum ; n++){
                putToHDFS(src, dst + n, conf);
            }
            Latch.countDown();
        }
    
        /** 执行hadoop上传操作
         * @param src 本地资源全路径
         * @param dst 远程地址全路径
         * @param conf 对hadoop的设置
         * @return boolean 是否上传成功
         */
        public static boolean  putToHDFS(String src , String dst , Configuration conf){
            Path dstPath = new Path(dst) ;
            try{
                FileSystem hdfs = dstPath.getFileSystem(conf) ;
                hdfs.copyFromLocalFile(false, new Path(src), dstPath) ;
            }
            catch(IOException ie){
                ie.printStackTrace() ;
                return false ;
            }
            return true ;
        }
    }
    

    测试环境参数记录

    类别 型号 标准值 实际测试差异记录
    磁盘参数 磁盘型号 ST1000NM0018-2F2130
    - 磁盘类型 SATA-7200RPM SATA-7200RPM
    - 厂商 DELL
    - 单盘容量(GB) 1TB
    - FW版本 EA04
    - 磁盘所在位置 SPU:2个磁盘DSU2624(DSU-1:1:2):3个磁盘DSU2624(DSU-1:2:1):3个磁盘
    HADOOP环境参数 H节点个数 8个
    - 虚拟机CPU/内存 16线程/64GB内存
    - 前端网络 10GE 客户端为10GE,通过交换机连接10GE网络
    - 后端网络 10GE 同左
    - 其他 标准V2.7.7版本
    客户端参数 操作系统 CentOS Linux release 7.6.1810 (Core)
    - 内存 8GB
    - CPU Intel® Xeon® CPU E5-2609 v3 @ 1.90GHz(双CPU,每个CPU 6核12线程)
    - 访问hadoop速率 10Gb/s
    - 并发线程数 详见测试参数
    - 文件大小 32KB
    - 文件数量 100000000
    - 其他

    测试结果如下

    200并发情况下上传一亿个32KB文件

    操作总数 字节数 平均响应时间 平均处理时间 吞吐量 带宽 总用时
    100000000File 2.9795TB 1.08 ms 2.08 ms 481.25op/s 15.03MB/S 207792.21s≈58h

    附录

    官方工具的问题

    1.速度奇慢

    hadoop jar /home/hadoop/hadoop-2.7.7/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.7-tests.jar TestDFSIO -write -nrFiles 10000 -size 32KB
    

    这是官方的 TestDFSIO方法,蜗牛一般的速度,报异常还不少,远达不到hdfs的性能瓶颈

    2.TestDFSIO只能测试一个节点的性能,所有文件都会写在当前运行TestDFSIO方法的节点上,完全不是集群的压力测试,是单节点的测试。

    3.teragen 工具

    hadoop jar /home/hadoop/hadoop-2.7.7/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar teragen -Dmapred.map.tasks=100000000 -Ddfs.block.size=134217728 32 /terasort/output
    

    以上命令虽然定义了任务数量 -Dmapred.map.tasks=100000000,但事实上这个参数毫无作用,不论怎么设定这个参数,teragen 工具只能创建一个文件。然后无看了源码和官方介绍,teragen 工具只是为了给terasort测试工具生成一个测试用例,并不是什么压力测试工具。(网上的博客好深的水)

    展开全文
  • 想必很多人在第一次接触压力测试时都会发出如同题目中的疑惑,压力测试是什么?为什么要进行压力测试?我第一次接触压力测试是在电脑突然死机的情况下,装机师傅给我重装系统后进行了压力测试后才有所了解;这时候才...
  • 测试有压力测试、负载测试、性能测试、功能测试等等,但究竟什么是压力测试,初学者都能说上一两句,谁还不懂“压力”是什么意思?谁还没经历过压力?然而,压力测试的真正含义和目的,它和其它测试(特别是负载测试...
  • 文章目录一、运行压力测试二、停止压力测试 一、运行压力测试 用monkey对指定app做压力测试,让这个app运行100个随机事件。 adb shell monkey -p com.example.hello 100 参数 -p 是package的缩写,后面跟app...
  • Android App压力测试

    万次阅读 2019-11-24 21:01:19
    前言:写这篇文章的原因呢,一是因为不少同学作为Android开发,很少会自己去做压力测试,不了解相关的技术,不知道压力测试是什么、怎么工作的;二是询问过身边的一些测试同学,他们进行压力测试的时候,很多情况...
  • 使用jmeter 对APP进行压力测试

    万次阅读 多人点赞 2018-09-10 18:56:31
    使用jmeter 对APP进行压力测试 步骤一:jmeter设置 1.在jmeter/bin路径下双击jmeter.bat 等待jmeter启动 启动成功后的界面显示如下 2.添加线程组:右键测试计划→添加→Threads(Users)→线程组 3.添加...
  • CentOS服务器压力测试及MySQL压力测试

    千次阅读 2018-07-10 14:34:08
    基准测试可以理解为针对系统的一种压力测试。但基准测试不关心业务逻辑,更加简单、直接、易于测试,数据可以由工具生成,不要求真实;而压力测试一般考虑业务逻辑(如购物车业务),要求真实的数据。 系统环境:...
  • 在线压力测试,测试网站并发量

    万次阅读 2019-05-10 09:34:00
    原文 最近都在折腾这个站点,发现有时内存挺高的,本身使用的就是廉价小内存VPS,所以比较担心站点的稳定性,对运维压测也不是特别熟悉,所以找了两个...主要分“压力测试”和“负载测试”,压力测试可以测试网...
  • Redis02_redis-benchmark压力测试工具

    万次阅读 2020-08-27 21:29:17
    Redis02_redis-benchmark压力测试工具 测试100个并发连接,每个连接100000个请求 redis-benchmark -h localhost -p 6379 -c 100 -n 100000 分析示例: ====== SET ====== 100000 requests completed in 1.22 ...
  • Apache JMeter是一个纯Java开发的用于负载测试或者性能测试的开源软件。这篇文章介绍一下使用JMeter进行压力测试的两种压力测试报告生成的方法。
  • 压力测试——测试MySQL

    千次阅读 2016-10-24 17:30:24
    除了对Web服务器进行测试外,数据库服务器也是系统的瓶颈之一,因此,我们还可以对数据库进行压力测试。关于MySQL的慢查询、explain分析等,这些主要是针对单条SQL语句的,其结果反映了SQL语句的优劣;而对MySQL进行...
  • 如何保障企业应用高效运行,压力测试环节必不可少,那么压力测试到底测什么?如何制定适合自己都压力测试方案呢? 首先,进行总体测试规划,规划集成测试的目的、测试时间及人员安排等。其次,进行总体测试依据及...
  • 压力测试分析

    千次阅读 2019-12-04 18:46:34
    压力测试分析 1.从压力测试说起 压力测试的理解,xxx的性能10w/s,对你有意义么? 没有那家卖瓜的会说自己家的不甜,同样,没有哪个开源项目愿意告诉你在对它条件最苛刻的时候压力情况是多少,一般官网号称给...
  • 性能测试工具经常和压力测试一起进行,而且常常需要硬件和软件测试设备,这就是说,常常有必要的在一种苛刻的环境中衡量资源的使用。外部的测试设备可以监测测试执行,当出现情况时记录下来。通过对系统的检测,测试...
  • 一:负载测试,并发测试,压力测试区别 负载测试 1、定义: 负载测试是通过逐步增加系统负载,测试系统性能的变化,并最终确定在满足性能指标的情况下,系统所能承受的最大负载量的测试。 2、目的: 不把系统搞挂的...
  • 一、性能测试(Performance Test) ...压力测试,又叫强度测试,压力测试是评估系统处于或超过预期负载时系统的运行情况,关注点在于系统在峰值负载或超出最大载荷情况下的处理能力。 三、负载测试...
  • 文章目录系统测试概述功能测试性能测试负载测试压力测试性能测试、压力测试、负载测试的关系兼容性测试安全测试健壮性测试配置测试可用性测试文档测试 系统测试概述 系统测试的定义 将已经集成好的软件系统,作为...
  • 2、压力测试(Stress Test): 压力测试(又叫强度测试)也是一种性能测试,它在系统资源特别低的情况下软件系统运行情况,目的是找到系统在哪里失效以及如何失效的地方。 3、极限测试 Extreme testing:在过量用户...
  • postman压力测试

    千次阅读 2019-04-25 20:32:55
    今天公司的门锁设备可能需要压力测试,提供的接口API接口需要压力测试。 一、postman准备 其实也没有什么好准备的,唯一就是有些变量不能写死了,需要随机一个,然后再请求。 {{}}包裹的都是要随机的参数,...
  • Kafka压力测试

    千次阅读 2019-09-03 23:21:11
    使用用Kafka自带的脚本进行压力测试。 测试平台:CDH6.2,Kafka2.1 Kafka压测可以查看到哪个地方出现了瓶颈(CPU,内存,网络IO),一般都是网络IO达到瓶颈。 kafka-producer-perf-test.sh kafka-consumer-perf...
  • ab压力测试

    万次阅读 2019-01-15 19:37:51
    apache-ab并发负载压力测试   ab命令原理  Apache的ab命令模拟多线程并发请求,测试服务器负载压力,也可以测试nginx、lighthttp、IIS等其它Web服务器的压力。  ab命令对发出负载的计算机要求很低,既不会占用...
  • 压力测试数据

    千次阅读 2016-05-31 06:25:00
    压力测试等级,压力测试数据准备
  • jmeter进行http压力测试

    万次阅读 多人点赞 2018-04-23 17:33:14
    jmeter进行http压力测试下载地址 下载地址:http://jmeter.apache.org/download_jmeter.cgiJMeter基于Java开发,需要系统有安装JDK环境。解压后进入bin目录,点击jmeter.bat1、添加线程组:测试计划 -> 添加 -> ...
  • sysbench压力测试,mysql压力测试

    千次阅读 2015-06-23 21:39:33
    sysbenchsysbench压力测试工具简介:sysbench是一个开源的、模块化的、跨平台的多线程性能测试工具,可以用来进行CPU、内存、磁盘I/O、线程、数据库的性能测试。目前支持的数据库有MySQL、Oracle和PostgreSQL。以下...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 32,472
精华内容 12,988
关键字:

压力测试