欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

java接口限流代碼 java semaphore限流

jmeter用java代碼怎樣編寫(xiě)接口測(cè)試源碼

我們?cè)谧鲂阅軠y(cè)試時(shí),有時(shí)需要自己編寫(xiě)測(cè)試腳燃拆猛本,很多測(cè)試工具都支持自定義編寫(xiě)測(cè)皮橋試腳本,比如LoadRunner就有很多自定義腳本的協(xié)議,比如"C Vuser","Java Vuser"等協(xié)議.同樣,Jmeter也支持自定義編寫(xiě)的測(cè)試代碼,不過(guò)與LoadRunner不御扒同的是,Jmeter沒(méi)有自帶編譯器,需要借助第三方編譯器才能實(shí)現(xiàn).下面舉一個(gè)簡(jiǎn)單的Java自定義測(cè)試代碼例子,使用Java編譯器編寫(xiě)測(cè)試代碼(Java編譯器可以用Eclipse,JBulider等),實(shí)現(xiàn)功能為:在測(cè)試前輸入任意一個(gè)字符串,然后判斷該字符串的長(zhǎng)度是否大于5,如果大于則測(cè)試結(jié)果成功,否則測(cè)試結(jié)果位失敗,然后在放到Jmeter中模擬10個(gè)用戶(hù)測(cè)試,同時(shí)運(yùn)行這段代碼,具體實(shí)現(xiàn)如下:

專(zhuān)注于為中小企業(yè)提供成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)義縣免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上1000+企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

1.打開(kāi)Java編譯器,新建一個(gè)項(xiàng)目"TestLength",然后新建一個(gè)包"app".

2.從Jmeter的安裝目錄lib/ext中拷貝兩個(gè)文件"ApacheJMeter_core.jar"和"ApacheJMeter_java.jar"到"Tester"的項(xiàng)目中,然后引入這兩個(gè)JAR文件.(具體的引入方法參考各個(gè)Java編譯器的使用方法)

3.在"app"包中新建一個(gè)類(lèi),名字叫"TestLength",不過(guò)這個(gè)類(lèi)要繼承"AbstractJavaSamplerClient"類(lèi),如果項(xiàng)目引入步驟二中的兩個(gè)文件,就可以找到"AbstractJavaSamplerClient"類(lèi)了.

4."TestLength"類(lèi)在繼承"AbstractJavaSamplerClient"類(lèi)的同時(shí)也會(huì)繼承四個(gè)方法,分別是"getDefaultParameters","setupTest","runTest"和"teardownTest"方法."getDefaultParameters"方法主要用于設(shè)置傳入的參數(shù);"setupTest"方法為初始化方法,用于初始化性能測(cè)試時(shí)的每個(gè)線程."runTest"方法為性能測(cè)試時(shí)的線程運(yùn)行體;"teardownTest"方法為測(cè)試結(jié)束方法,用于結(jié)束性能測(cè)試中的每個(gè)線程.

5.具體實(shí)現(xiàn)代碼如下:

package app;

import org.apache.jmeter.config.Arguments;

import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;

import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;

import org.apache.jmeter.samplers.SampleResult;

import com.passpod.core.t8.*;

/**

* @author樂(lè)以忘憂

*

* TODO To change the template for this generated type comment go to

* Window - Preferences - Java - Code Style - Code Templates

*/

public class TestLength extends AbstractJavaSamplerClient{

private SampleResult results;

private String testStr;

//初始化方法,實(shí)際運(yùn)行時(shí)每個(gè)線程僅執(zhí)行一次,在測(cè)試方法運(yùn)行前執(zhí)行,類(lèi)似于LoadRunner中的init方法

public void setupTest(JavaSamplerContext arg0) {

results = new SampleResult();

testStr = arg0.getParameter("testString", "");

if (testStr != null testStr.length() 0) {

results.setSamplerData(testStr);

}

}

//設(shè)置傳入的參數(shù),可以設(shè)置多個(gè),已設(shè)置的參數(shù)會(huì)顯示到Jmeter的參數(shù)列表中

public Arguments getDefaultParameters() {

Arguments params = new Arguments();

params.addArgument("testStr", ""); //定義一個(gè)參數(shù),顯示到Jmeter的參數(shù)列表中,第一個(gè)參數(shù)為參數(shù)默認(rèn)的顯示名稱(chēng),第二個(gè)參數(shù)為默認(rèn)值

return params;

}

//測(cè)試執(zhí)行的循環(huán)體,根據(jù)線程數(shù)和循環(huán)次數(shù)的不同可執(zhí)行多次,類(lèi)似于LoadRunner中的Action方法

public SampleResult runTest(JavaSamplerContext arg0) {

int len = 0;

results.sampleStart(); //定義一個(gè)事務(wù),表示這是事務(wù)的起始點(diǎn),類(lèi)似于LoadRunner的lr.start_transaction

len = testStr.length();

results.sampleEnd(); //定義一個(gè)事務(wù),表示這是事務(wù)的結(jié)束點(diǎn),類(lèi)似于LoadRunner的lr.end_transaction

if(len 5){

System.out.println(testStr);

results.setSuccessful(false); //用于設(shè)置運(yùn)行結(jié)果的成功或失敗,如果是"false"則表示結(jié)果失敗,否則則表示成功

}else

results.setSuccessful(true);

return results;

}

//結(jié)束方法,實(shí)際運(yùn)行時(shí)每個(gè)線程僅執(zhí)行一次,在測(cè)試方法運(yùn)行結(jié)束后執(zhí)行,類(lèi)似于LoadRunner中的end方法

public void teardownTest(JavaSamplerContext arg0) {

}

}

6.把上面的例子打包,然后把生成的"TestLength.jar"文件拷貝到Jmeter的安裝目錄lib/ext下.

7.運(yùn)行Jmeter,添加一個(gè)線程組,然后在該線程組下面添加一個(gè)Java請(qǐng)求(在Sampler中),在Java請(qǐng)求的類(lèi)名稱(chēng)中選擇咱們剛創(chuàng)建的類(lèi)"app.TestLength",在下面參數(shù)列表的"testStr"后面輸入要測(cè)試的字符串,然后添加一個(gè)監(jiān)聽(tīng)器(聚合報(bào)告),設(shè)置一下模擬的用戶(hù)數(shù)就可以測(cè)試了.如果測(cè)試不成功,Jmeter會(huì)在它自己個(gè)輸出框中拋出這個(gè)字符串.

通過(guò)上面的例子我們可以發(fā)現(xiàn),使用Jmeter自定義Java測(cè)試代碼,配合Jmeter自帶的函數(shù),就可以實(shí)現(xiàn)出LoadRunner中"Java Vuser"協(xié)議的絕大多數(shù)功能,而且是沒(méi)有用戶(hù)數(shù)限制和完全免費(fèi)的(嘿嘿).上面的例子非常簡(jiǎn)單,而且沒(méi)有任何實(shí)際意義,只是一個(gè)簡(jiǎn)單的Jmeter測(cè)試代碼示例,用于拋磚引玉,希望大家一起交流,共同 進(jìn)步.

Java 接口調(diào)用速度限制一般是怎么實(shí)現(xiàn)的?

1秒30次也是太快了,這個(gè)要看接口的更新速度

而且你根本沒(méi)必要多線程調(diào)用皮御雀,因?yàn)槎鄠€(gè)線程同時(shí)調(diào)用,接口的數(shù)據(jù)還是那些,根本就不會(huì)變

你應(yīng)該一個(gè)線程定時(shí)調(diào)用,把結(jié)果放入公共變量里,然后其它線程 都從這個(gè)公用的燃早變量獲取數(shù)拆吵據(jù)

Java編程中的性能優(yōu)化如何實(shí)現(xiàn)?

性能優(yōu)化我伍敏覺(jué)得應(yīng)該分兩步走,第一步:尋找性能瓶頸,第二步:性能調(diào)優(yōu);

下面分別進(jìn)行分析:

第一步:尋找性能腔差枝瓶頸

通常性能瓶頸的表象是資源消耗過(guò)多、外部處理系統(tǒng)的性能不足;或者資源消耗不多,但是程序效應(yīng)還是很慢;

資源主要消耗在cpu,文件io,網(wǎng)絡(luò)io以及內(nèi)存方面,當(dāng)某一資源消耗過(guò)多會(huì)造成系統(tǒng)響應(yīng)慢;

外部處理系統(tǒng)的性能不足主要是所調(diào)用其他系統(tǒng)提供的功能或數(shù)據(jù)庫(kù)的響應(yīng)速度不夠,外部系統(tǒng)慢可能也是資源消耗過(guò)多導(dǎo)致,數(shù)據(jù)庫(kù)響應(yīng)慢可以對(duì)數(shù)據(jù)庫(kù)進(jìn)行調(diào)優(yōu);

資源消耗不多但仍然慢主要原因是程序代碼運(yùn)行效率不高,未充分使用資源或程序結(jié)構(gòu)不合理;

1.1cpu消耗分析

可以通過(guò)相關(guān)命令比如top,pidstat,找出各個(gè)類(lèi)型消耗cpu的占比,最常見(jiàn)的就是us和sy類(lèi)型分別代表用戶(hù)進(jìn)程消耗和線程間切換消耗;如果us過(guò)高可以找到相關(guān)的線程ID然后分析代碼;如果sy過(guò)高是不是啟動(dòng)了過(guò)多的線程導(dǎo)致線程切慶扮換過(guò)多;

1.2文件io消耗

要跟蹤線程的文件IO消耗,可以通過(guò)pidstat來(lái)查找,可以查到每秒的讀寫(xiě)kb數(shù);找到讀寫(xiě)kb數(shù)多個(gè)線程,然后結(jié)合jstack找到相關(guān)的java代碼,然后分析;

1.3網(wǎng)絡(luò)io消耗

可以通過(guò)sar來(lái)分析網(wǎng)絡(luò)的消耗狀況,但是不能具體到每個(gè)線程所消耗的網(wǎng)絡(luò)IO,只能對(duì)線程dump,查找產(chǎn)生了大量網(wǎng)絡(luò)io的線程;

1.4內(nèi)存消耗

結(jié)合top或pidstat,以及jvm的內(nèi)存分析工具來(lái)分析內(nèi)存消耗;要區(qū)分是jvm外的物理內(nèi)存還是jvmheap區(qū)內(nèi)存;如果是jvm外的物理內(nèi)存要分析程序中DirectByteBuffer,如果是jvmheap可以通過(guò)jvisualvm來(lái)分析;

1.5資源消耗不多但仍然慢

主要原因是:鎖競(jìng)爭(zhēng)激烈,未充分使用硬件資源,數(shù)據(jù)量增長(zhǎng)

第二步:性能調(diào)優(yōu)

2.1jvm調(diào)優(yōu)

主要包括各個(gè)代的大小、GC策略等;代大小的設(shè)置:避免新生代大小設(shè)置過(guò)小,或者過(guò)大;避免Survivor區(qū)過(guò)小或過(guò)大;合理設(shè)置新生代存活周期;GC策略根據(jù)吞吐量?jī)?yōu)先還是延遲優(yōu)先進(jìn)行設(shè)置策略;

2.2程序調(diào)優(yōu)

1.CPU消耗嚴(yán)重解決

us過(guò)高主要是執(zhí)行線程無(wú)任何掛起動(dòng)作,可以進(jìn)行Thread.sleep操作;sy過(guò)高主要是因?yàn)閯?chuàng)建了過(guò)多的線程導(dǎo)致線程上下文切換;

2.文件IO消耗嚴(yán)重解決

造成文件IO消耗嚴(yán)重的原因主要是多個(gè)線程寫(xiě)大量的數(shù)據(jù)到同一個(gè)文件,導(dǎo)致文件很快變的很大,從而寫(xiě)入速度越來(lái)越慢,并造成各線程激烈競(jìng)爭(zhēng)爭(zhēng)搶文件鎖,常用的調(diào)優(yōu)方法:異步寫(xiě)文件,批量讀寫(xiě),限流,限制文件大小;

3.網(wǎng)絡(luò)IO消耗嚴(yán)重解決

主要原因是同時(shí)發(fā)送或者接受的包太多,解決辦法就是限流;

4.內(nèi)存消耗嚴(yán)重解決

解決:釋放不必要的引用,使用對(duì)象緩存池,采用合理的緩存失效策略,合理使用softReference和WeakReference;

2.3資源消耗不多但仍然慢

主要原因是:鎖競(jìng)爭(zhēng)激烈,未充分使用硬件資源

本文標(biāo)題:java接口限流代碼 java semaphore限流
分享網(wǎng)址:http://chinadenli.net/article46/dsppeeg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開(kāi)發(fā)企業(yè)網(wǎng)站制作域名注冊(cè)品牌網(wǎng)站建設(shè)網(wǎng)站排名外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

微信小程序開(kāi)發(fā)