1. 程式人生 > >Linux 性能工具安裝部署

Linux 性能工具安裝部署

更新 使用命令 tps cti soft ins kernel erb form

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 \r 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:\study\Apache\bin>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 即可

Linux 性能工具安裝部署