當我們在搞壓力測試的時候,我們在搞些什么

why

保證服務(wù)在高壓的時候不會出現(xiàn)異常

what

多線程 重復(fù)地對服務(wù)的接口進行調(diào)用尤仍,去看服務(wù)的表現(xiàn):

  • tps (transaction peer second)服務(wù)每秒可以處理的請求個數(shù)
  • tpr (time peer request)每條請求的處理時間 平均值 99.9%的情況 99%的情況
  • errorrate 錯誤率

how

開始壓之前

首先二汛,我們要有一個并發(fā)測試的工具
  • 定時執(zhí)行
  • 壓力逐漸增加
    都是通過修改config.xml來實現(xiàn)

<?xml version="1.0" encoding="UTF-8"?>
<tasks>
<task>
<suitename>ApiPayTest</suitename>
<methodname>queryUserByOutId</methodname>
<israndom>true</israndom>
<isrampup>true</isrampup>
<interval>100</interval>
<poolcount>5</poolcount>
<threadcount>10</threadcount>
<sampletype>bouncetime</sampletype>
<client_timeout>3000</client_timeout>
<sleeptime>100</sleeptime>
<value>false</value>
<startTime>2014/10/15/10/35</startTime>
<stopTime>2014/10/15/10/50</stopTime>
</task>
</tasks>
</pre>

然后,我們寫測試用例
  • 繼承Worktest俭嘁,重寫working方法
  • 準備工作寫到構(gòu)造函數(shù)中
  • 返回多余時間

<pre><code>package com.xiaomi.cashpay.works;
import java.util.UUID;
public class Notifytest extends Worktest {
private static IdManager.Iface idManagerService;
public Notifytest() {
init();
}
private void init() {
notifyService = ThriftClientFactory.createClient(Notify.Iface.class,
1000);
this.idManagerService = ThriftClientFactory.createClient(
IdManager.Iface.class, 1000);
receiver = "http://10.101.30.185/cashpay/notify1.php";
}
@Override
public String working() throws TException {
long s1 = System.currentTimeMillis();
try {
notifyid = this.logic_Merchant_UniqueId();
} catch (TException e) {
e.printStackTrace();
System.out.println("idmanager TException" + e.getMessage());
}
long s2 = System.currentTimeMillis();
long extratime = (s2 - s1);
SendResponse res = notifyService.send(req);
return res.getResEnum().toString() + " " + notifyid+ "~" + extratime ;
}
public static void main(String[] argv) {
Notifytest test = new Notifytest();
try {
System.out.println(test.working());
} catch (TException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
</code></pre>

其實躺枕,我們還需要一個壓測環(huán)境
  • zookeeper
  • resin
  • db

終于開始壓了

看服務(wù)的性能
  • top
  • vmstat
  • collectl
看數(shù)據(jù)庫的性能

壓完之后

用腳本static.py分析我們的log
xiaoguo.jpg

<pre><code>import os
fp=open('Pthread-info.log','r+')
fpnew=open('b.txt','a+')
count=0
linenumber = 0
first=True
processtime =[]
for line in fp:
linenumber = linenumber+1
s = line.split()

    if True == first:
            minutetemp=s[1][0:16]
            first=False
            count = count+1
            processtime.append(int(float(s[4])))
    elif minutetemp==s[1][0:16]:
            processtime.append(int(float(s[4])))
            count = count+1
    else:
            processtime.sort()
            pos_eighty =int(len(processtime)*0.8)
            pos_ninty = int(len(processtime)*0.9)
            pos_doublenine = int(len(processtime)*0.99)
            sum(processtime)
            fpnew.write(minutetemp+" "+str(int(count/60.0))+" "+str(sum(processtime)/len(processtime))+" "+str(processtime[pos_eighty])+" "+str(processtime[pos_ninty])+" "+str(processtime[pos_doublenine])+'\n')
            minutetemp=s[1][0:16]
            count = 1
            processtime=[]
            processtime.append(int(float(s[4])))

processtime.sort()
pos_eighty =int(len(processtime)0.8)
pos_ninty = int(len(processtime)
0.9)
pos_doublenine = int(len(processtime)*0.99)
fpnew.write(minutetemp+" "+str(int(count/60.0))+" "+str(sum(processtime)/len(processtime))+" "+str(processtime[pos_eighty])+" "+str(processtime[pos_ninty])+" "+str(processtime[pos_doublenine])+'\n')
print(linenumber)
</code></pre>

看服務(wù)本身的log
  • awk
    分割
    默認為空格
    -F ''
    修改為需要的分割符
    自定義變量
    awk '{begin{count=0}}'

  • grep
    -E

  • sort -r

  • unique

log.jpg

通用的幾個腳本:
分析服務(wù)處理請求的平均時間,最大值兄淫,最小值
<pre><code>ls cashpay-core.log.2014121522* cashpay-core.log.2014121523* cashpay-core.log.2014121600* cashpay-core.log.2014121601* cashpay-core.log.2014121602* | xargs zgrep "INFO" | grep queryAccountByUserId | awk 'BEGIN {max=-1;print ""; print "count,total time, average, max, min"}; {gsub(":","",$3); gsub("\.","",$3); gsub("]","",$3); if (!s[$5]) {s[$5]=$3; e[$5]=$3} else {e[$5]=$3; t=(e[$5]-s[$5]); if (t < 40000 && t >0) { count++; sum+=t; if (max==-1) {max = t; min =t; } if (t>max) {max =t;} if ( t<min) min=t } }}; END {if (count >0) {print count"\t"sum"\t"sum/count"\t"max"\t"min}}'
</code></pre>
找到服務(wù)的具體處理時間和這次調(diào)用對應(yīng)的logid
<pre><code>zgrep "100%] - createCharge" cashpay-core.log.2014121720 | awk -F'[' '{print $2}' | awk -F 'ms,' '{print$1 $2}'|awk '{print$1" " $4}'|awk -F':' '{print $1" "$2}'|awk '{print$1" " $3}'|awk -F',' '{if(NF>1)print $0}'|sort</code>
</pre>
分析Pthread-error.log中的connection-refused錯誤
<pre><code>
grep -B 12 "HttpHostConnectException" Pthread-error.log.2014121615|awk '{if (NR%14==1){ printf$0} else if(NR%14==13){print" "$0}}'|awk '{print$2" "$3" " $10}'|awk -F ']' '{print$1$2}'|awk -F'.' '{print $1}'|awk -F ':' '{print $1":"$2}'|awk '{print$2}'|awk 'begin{count=0;minute="start"} {if($1!=minute){minute=$1; print $0" " count;count=0}else{ count++;}}'
</code></pre>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末屯远,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子捕虽,更是在濱河造成了極大的恐慌慨丐,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泄私,死亡現(xiàn)場離奇詭異房揭,居然都是意外死亡,警方通過查閱死者的電腦和手機晌端,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門捅暴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人咧纠,你說我怎么就攤上這事蓬痒。” “怎么了漆羔?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵梧奢,是天一觀的道長狱掂。 經(jīng)常有香客問我,道長亲轨,這世上最難降的妖魔是什么趋惨? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮惦蚊,結(jié)果婚禮上器虾,老公的妹妹穿的比我還像新娘。我一直安慰自己蹦锋,他們只是感情好兆沙,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著晕粪,像睡著了一般挤悉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上巫湘,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天装悲,我揣著相機與錄音,去河邊找鬼尚氛。 笑死诀诊,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的阅嘶。 我是一名探鬼主播属瓣,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼讯柔!你這毒婦竟也來了抡蛙?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤魂迄,失蹤者是張志新(化名)和其女友劉穎粗截,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捣炬,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡熊昌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了湿酸。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片婿屹。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖推溃,靈堂內(nèi)的尸體忽然破棺而出昂利,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布页眯,位于F島的核電站梯捕,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏窝撵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一襟铭、第九天 我趴在偏房一處隱蔽的房頂上張望碌奉。 院中可真熱鬧,春花似錦寒砖、人聲如沸赐劣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽魁兼。三九已至,卻和暖如春漠嵌,著一層夾襖步出監(jiān)牢的瞬間咐汞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工儒鹿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留化撕,地道東北人。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓约炎,卻偏偏與公主長得像植阴,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子圾浅,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理掠手,服務(wù)發(fā)現(xiàn),斷路器狸捕,智...
    卡卡羅2017閱讀 134,659評論 18 139
  • 國家電網(wǎng)公司企業(yè)標準(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 10,985評論 6 13
  • 《莊子》解喷鸽,每章一讀。 文: 柏矩學(xué)于老聃府寒,曰:“請之天下游魁衙。”老聃曰:“已矣株搔!天下猶是也剖淀。”又請之纤房,老聃曰:“汝...
    千里飄蓬閱讀 2,681評論 0 3