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 \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命令之前,首先要了解壓力測試的幾個概念:(自己可以上網查下具體的概念)
-
吞吐率(Requests per second)
概念:服務器並發處理能力的量化描述,單位是reqs/s,指的是某個並發用戶數下單位時間內處理的請求數。某個並發用戶數下單位時間內能處理的最大請求數,稱之為最大吞吐率。
計算公式:總請求數 / 處理完成這些請求數所花費的時間,即
Request per second = Complete requests / Time taken for tests -
並發連接數(The number of concurrent connections)
概念:某個時刻服務器所接受的請求數目,簡單的講,就是一個會話。 -
並發用戶數(The number of concurrent users,Concurrency Level)
概念:要註意區分這個概念和並發連接數之間的區別,一個用戶可能同時會產生多個會話,也即連接數。 -
用戶平均請求等待時間(Time per request)
計算公式:處理完成所有請求數所花費的時間/ (總請求數 / 並發用戶數),即
Time per request = Time taken for tests /( Complete requests / Concurrency Level) -
服務器平均請求等待時間(Time per request: across all concurrent requests)
計算公式:處理完成所有請求數所花費的時間 / 總請求數,即
Time taken for / testsComplete requests
可以看到,它是吞吐率的倒數。
同時,它也=用戶平均請求等待時間/並發用戶數,即
Time per request / Concurrency Level
-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 性能工具安裝部署