• Linux 性能工具安装部署


    docker

    一.运行docker Linux内核版本需要在3.8以上,针对centos6.5 内核为2.6的系统需要先升级内核.不然会特别卡
     在yum的ELRepo源中,有mainline(4.5)、long-term(4.4)这2个内核最新版本,考虑到long-term更稳定,会长期更新,所以选择这个版本。(在 http://hkg.mirror.rackspace.com/elrepo/kernel/el7/x86_64/RPMS/ 能查看最新内核版本)

    1.查看当前版本:

    [root@localhost ~]# more /etc/issue
    CentOS release 6.5 (Final)
    Kernel on an m
    [root@localhost ~]# uname -a
    Linux localhost.localdomain 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
    2.升级内核

    1.>导入public key

    rpm --import http://www.elrepo.org/RPM-GPG-KEY-elrepo.org
    2.>安装ELRepo到CentOS-6.5中

    rpm -ivh http://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm
    3.>安装**kernel-lt(lt=long-term)**

    yum --enablerepo=elrepo-kernel install kernel-lt -y
    或者安装kernel-ml(ml=mainline)

    yum --enablerepo=elrepo-kernel install kernel-ml -y
    4.>编辑grub.conf文件,修改Grub引导顺序


    vim /etc/grub.conf
    # grub.conf generated by anaconda
    #
    default=0
    timeout=5
    splashimage=(hd0,0)/grub/splash.xpm.gz
    hiddenmenu
    title CentOS (4.4.121-1.el6.elrepo.x86_64)
            root (hd0,0)
            kernel /vmlinuz-4.4.121-1.el6.elrepo.x86_64 ro root=UUID=9955fe5f-5015-4582-a9d5-60fedd85d282 rd_NO_LUKS rd_NO_LVM LANG=zh_CN.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
            initrd /initramfs-4.4.121-1.el6.elrepo.x86_64.img
    title CentOS (2.6.32-431.el6.x86_64)
            root (hd0,0)
            kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=UUID=9955fe5f-5015-4582-a9d5-60fedd85d282 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
            initrd /initramfs-2.6.32-431.el6.x86_64.img


    确认刚安装好的内核在哪个位置,然后设置default值(从0开始),一般新安装的内核在第一个位置,所以设置default=0

    5.>重启,查看内核版本号.

    [root@localhost ~]# reboot
    [root@localhost ~]# uname -r
    4.4.121-1.el6.elrepo.x86_64
    至此,CentOS6.5的内核升级完成,下面就可以安装docker了.

    二.安装docker
     直接使用命令: yum install docker-io   是会报错的!!!  提示:No package docker-io available.

     需要先安装yum 源.

    yum -y install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
    再执行

    yum install docker-io
    就可以正常安装了!!

    启动docker

    service docker start
    查看docker版本:


    [root@localhost ]# docker version
    Client version: 1.7.1
    Client API version: 1.19
    Go version (client): go1.4.2
    Git commit (client): 786b29d/1.7.1
    OS/Arch (client): linux/amd64
    Server version: 1.7.1
    Server API version: 1.19
    Go version (server): go1.4.2
    Git commit (server): 786b29d/1.7.1
    OS/Arch (server): linux/amd64

    查看docker日志.

    cat /var/log/docker
     至此,docker安装完成!!!

    三.卸载docker
    列出你安装过的包

    [root@localhost ~]# yum list installed | grep docker
    docker-io.x86_64 1.7.1-2.el6 @epel
    删除软件包

    yum -y remove docker-io.x86_64
    删除镜像/容器等
    rm -rf /var/lib/docker

    四.docker加速配置,配置国内源(docker1.7修改方法)
    vi /etc/sysconfig/docker

    加入下面两行
    other_args="--registry-mirror=https://wbtwgo1e.mirror.aliyuncs.com"  
    OPTIONS='--registry-mirror=https://wbtwgo1e.mirror.aliyuncs.com' 

    五.报错解决
    docker 已死,但 pid 文件仍存报错(service docker status)  

    yum install device-mapper-event-libs

    六.安装docker-compose,版本1.5.2,适配docker1.7
    Compose是Docker的服务编排工具,主要用来构建基于Docker的复杂应用,Compose 通过一个配置文件来管理多个Docker容器,非常适合组合使用多个容器进行开发的场景。

    安装

    sudo curl -L https://github.com/docker/compose/releases/download/1.5.2/docker-compose-`uname -s`-`uname -m` -o /usr/bin/docker-compose

    设置可执行

    sudo chmod +x /usr/bin/docker-compose 

    备注:V1 版本的 docker-compose.yml 只被支持到 docker-compose 1.6.x。再往后的 docker-compose 版本就不再支持 V1 版本的 docker-compose.yml。

    1.5.2就只能用V1 版本的 docker-compose.yml

    七.升级docker 1.9.1(升级docker1.10一直失败启动不了)(升级后docker-1.9.1里没php:7.1-fpmERROR: Service 'php' failed to build: Tag 7.1-fpm not found in repository docker.io/library/php)(建议不升)
    curl -sSL -O https://get.docker.com/builds/Linux/x86_64/docker-1.9.1 && chmod +x docker-1.9.1 && mv docker-1.9.1 /usr/local/bin/docker  
    cp /usr/local/bin/docker /usr/bin/docker  
    service docker start

    ab(apache bench)

      apache内集成了,安装了 apache 就无需再安装,假设没有就用:

    yum install httpd-tools

      之后直接就可以使用

      

    接下来要介绍的就是apache的ab命令压测:

    2.在学习使用ab命令之前,首先要了解压力测试的几个概念:(自己可以上网查下具体的概念)

    1. 吞吐率(Requests per second)
      概念:服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请求数。某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率。
      计算公式:总请求数 / 处理完成这些请求数所花费的时间,即
      Request per second = Complete requests / Time taken for tests

    2. 并发连接数(The number of concurrent connections)
      概念:某个时刻服务器所接受的请求数目,简单的讲,就是一个会话。

    3. 并发用户数(The number of concurrent users,Concurrency Level)
      概念:要注意区分这个概念和并发连接数之间的区别,一个用户可能同时会产生多个会话,也即连接数。

    4. 用户平均请求等待时间(Time per request)
      计算公式:处理完成所有请求数所花费的时间/ (总请求数 / 并发用户数),即
      Time per request = Time taken for tests /( Complete requests / Concurrency Level)

    5. 服务器平均请求等待时间(Time per request: across all concurrent requests)
      计算公式:处理完成所有请求数所花费的时间 / 总请求数,即
      Time taken for / testsComplete requests
      可以看到,它是吞吐率的倒数。
      同时,它也=用户平均请求等待时间/并发用户数,即
      Time per request / Concurrency Level

    3.ab工具的介绍
     
    ab是apache自带的压力测试工具。ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试。比如nginx、tomcat、IIS等。
      安装:
                    1.公司应该有程序员吧,可以安装一个wamp或者phpstudy,这样apache服务器和mysql数据库都有了,一举多得:
        文件位置:打开你安装的apache的位置:找到 bin文件夹下面的ab.exe
        在该文件夹下打开命令行,输入 ab.exe -help
     
    对上面的Options做下解释吧:
    -n 即requests,用于指定压力测试总共的执行次数。
    -c 即concurrency,用于指定压力测试的并发数。
    -t 即timelimit,等待响应的最大时间(单位:秒)。
    -b 即windowsize,TCP发送/接收的缓冲大小(单位:字节)。
    -p 即postfile,发送POST请求时需要上传的文件,此外还必须设置-T参数。
    -u 即putfile,发送PUT请求时需要上传的文件,此外还必须设置-T参数。
    -T 即content-type,用于设置Content-Type请求头信息,例如:application/x-www-form-urlencoded,默认值为text/plain。
    -v 即verbosity,指定打印帮助信息的冗余级别。
    -w 以HTML表格形式打印结果。
    -i 使用HEAD请求代替GET请求。
    -x 插入字符串作为table标签的属性。
    -y 插入字符串作为tr标签的属性。
    -z 插入字符串作为td标签的属性。
    -C 添加cookie信息,例如:"Apache=1234"(可以重复该参数选项以添加多个)。
    -H 添加任意的请求头,例如:"Accept-Encoding: gzip",请求头将会添加在现有的多个请求头之后(可以重复该参数选项以添加多个)。
    -A 添加一个基本的网络认证信息,用户名和密码之间用英文冒号隔开。
    -P 添加一个基本的代理认证信息,用户名和密码之间用英文冒号隔开。
    -X 指定使用的代理服务器和端口号,例如:"126.10.10.3:88"-V 打印版本号并退出。
    -k 使用HTTP的KeepAlive特性。
    -d 不显示百分比。
    -S 不显示预估和警告信息。
    -g 输出结果信息到gnuplot格式的文件中。
    -e 输出结果信息到CSV格式的文件中。
    -r 指定接收到错误信息时不退出程序。
    -h 显示用法信息,其实就是ab -help。
    4.实际测试:
     
     

    5.分析上面的压测结果:

    Server Software: Apache/2.2.25 (服务器软件名称及版本信息)

    Server Hostname: www.xxx.com(服务器主机名)

    Server Port: 80 (服务器端口)

    Document Path: /lol (供测试的URL路径)

    Document Length: 0 bytes (供测试的URL返回的文档大小)

    Concurrency Level: 100 (并发数)

    Time taken for tests: 0.800 seconds (压力测试消耗的总时间)

    Complete requests: 100 (压力测试的的总次数)

    Failed requests: 0 (失败的请求数)

    Total transferred: 16342 bytes (传输的总数据量)

    HTML transferred: 0 bytes (HTML文档的总数据量)

    Requests per second: 125.03 [#/sec] (mean) (平均每秒的请求数)

    Time per request: 799.805 [ms] (mean) (所有并发用户(这里是100)都请求一次的平均时间)

    Time per request: 7.998 [ms] (mean, across all concurrent requests) (单个用户请求一次的平均时间)

    Transfer rate: 19.95 [Kbytes/sec] received (传输速率,单位:KB/s)

    在上面的测试中,我们设置的压力测试总次数以及并发数并没有让服务器感觉到什么「压力」,现在我们再来看一个「压力山大」的执行命令:

         ab -n 1000 -c 100 localhost/index.php,这个时候apache就直接罢工——拒绝访问了:

    	D:studyApachein>ab -n 100 -c100 http://www.xxx.com;
    	This is ApacheBench, Version 2.3 <$Revision: 1748469 $>
    	Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
    	Licensed to The Apache Software Foundation, http://www.apache.org/

    在上面的压力测试中,Apache使用的是默认配置,并没有经过任何优化措施处理。实际上,Apache在经过配置优化

    后,只要服务器硬件够用,Apache服务器是能够撑起1000的并发量的。

    6.ab进行app接口的压测:

     ab -n 400 -c20  "http://www.xxx.com/api.php?sig=......";

    将需要压测的接口,用 " " ;

    7.ab进行post传参的压测

     ab -n 400 -c20  -p parm.txt -T "application/x-www-form-urlencoded" http://localhost:3000/login

    将 parm.txt放在和ab.exe相同的文件夹中,parm.txt中存放的是需要post格式传递的参数。

    -T :post请求的head头。

    stress sysstat

      下载下来,传进服务器,解压。cd 进路径,直接 ./configure 即可

  • 相关阅读:
    JSON对象和字符串之间的相互转换
    Loadrunner 运行场景时:missing newline in XXX.dat 错误解决
    linux grep详解
    Object 保存到文件中
    'libxml/tree.h' file not found
    具有相同值的不同字符串常量在内存中是分开存储的
    为右键添加快速进入CMD的选项,Win7更简单
    iOS KVO & KVC
    南阳数乌龟——递归超时
    LibSVM笔记系列(3)——初学移植libsvm的C/C++版本
  • 原文地址:https://www.cnblogs.com/xiaowenshu/p/10265753.html
Copyright © 2020-2023  润新知