色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

測(cè)試和性能監(jiān)控神器JMH和Arthas

jf_ro2CN3Fa ? 來(lái)源:芋道源碼 ? 作者:芋道源碼 ? 2022-11-09 17:19 ? 次閱讀

最近的工作日并不算太平,各種大大小小的case和解case,發(fā)現(xiàn)已經(jīng)有好久好久沒(méi)有靜下心來(lái)專心寫點(diǎn)東西了。不過(guò)倒還是堅(jiān)持利用業(yè)余時(shí)間學(xué)習(xí)了不少微課上的東西,發(fā)現(xiàn)大佬們總結(jié)的東西還是不一樣,相比于大學(xué)時(shí)的那些枯燥的課本,大佬們總結(jié)出來(lái)的內(nèi)容更活,更加容易理解。自己后面也會(huì)把大佬們的東西好好消化吸收,變成自己的東西用文字性的東西表達(dá)出來(lái)。

今天想總結(jié)的東西是最近工作中使用到的測(cè)試工具JMH以及Java運(yùn)行時(shí)監(jiān)控工具Arthas。他們?cè)谖业膶?shí)際工作中也算是幫了大忙。所以在這里拋磚引玉一下這些工具的使用方法。同時(shí)也加深一下自己對(duì)這些工具的熟悉程度。對(duì)這兩個(gè)工具,我都會(huì)首先簡(jiǎn)單介紹一下這些工具的大致使用場(chǎng)景,然后會(huì)使用一個(gè)在工作中真正遇到的性能問(wèn)題排查為例詳細(xì)講解這兩個(gè)工具的實(shí)際用法。話不多說(shuō),直奔主題。

問(wèn)題描述

為了能夠讓我后面的實(shí)例能夠貫穿這兩個(gè)工具的使用,我首先簡(jiǎn)單描述下我們?cè)陂_(kāi)發(fā)中遇到的實(shí)際的性能問(wèn)題。然后再引出這兩個(gè)性能工具的實(shí)際使用,看我們?nèi)绾问褂眠@兩個(gè)工具成功定位到性能瓶頸的。

問(wèn)題如下:為了能夠支持丟失率,我們將原先log4j2 的Async+自定義Appender的方式進(jìn)行了修正,把異步的邏輯放到了自己改版后的Appender中。但我們發(fā)現(xiàn)修改后日志性能要比之前Async+自定義Appender的方式下降不少。這里由于隱私原因我并沒(méi)有用實(shí)際公司中的實(shí)例,這里我用了一種其他同樣能夠體現(xiàn)問(wèn)題的方式。我們暫時(shí)先不給出具體的配置文件,先給出性能測(cè)試代碼和結(jié)果

代碼

packagecom.bryantchang.appendertest;

importorg.slf4j.Logger;
importorg.slf4j.LoggerFactory;

publicclassAppenderTest{

privatestaticfinalStringLOGGER_NAME_DEFAULT="defaultLogger";
privatestaticfinalStringLOGGER_NAME_INCLUDE="includeLocationLogger";
privatestaticfinalLoggerLOGGER=LoggerFactory.getLogger(LOGGER_NAME_INCLUDE);
publicstaticfinallongBATCH=10000;

publicstaticvoidmain(String[]args)throwsInterruptedException{
while(true){
longstart,end;
start=System.currentTimeMillis();
for(inti=0;i

代碼邏輯及其簡(jiǎn)單,就是調(diào)用logger.info每次打印10000條日志,然后記錄耗時(shí)。兩者的對(duì)比如下

117551d0-5cb1-11ed-a3b6-dac502259ad0.png

從這兩張圖片中我們能夠看到同樣的邏輯,兩個(gè)程序的耗時(shí)差距相差了數(shù)十倍,但看圖片,貌似僅僅是logger的名稱不一樣。對(duì)上面的實(shí)驗(yàn)結(jié)果進(jìn)行分析,我們可能會(huì)有兩個(gè)疑問(wèn)

上面的代碼測(cè)試是否標(biāo)準(zhǔn),規(guī)范

如果真的是性能問(wèn)題,那么這兩個(gè)代碼到底在哪個(gè)方法上有了這么大的差距導(dǎo)致了最終的性能差異

下面這兩個(gè)工具就分別來(lái)回答這兩個(gè)問(wèn)題

基于 Spring Boot + MyBatis Plus + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

項(xiàng)目地址:https://gitee.com/zhijiantianya/ruoyi-vue-pro

JMH簡(jiǎn)介

第一個(gè)問(wèn)題就是,測(cè)試的方法是否標(biāo)準(zhǔn)。我們?cè)诰帉懘a時(shí)用的是死循環(huán)+前后“掐秒表”的方式。假如我們要再加個(gè)多線程的測(cè)試,我們還需要搞一個(gè)線程池,除了代碼本身的邏輯還要關(guān)心測(cè)試的邏輯。我們會(huì)想,有沒(méi)有一款工具能夠?qū)⑽覀儚臏y(cè)試邏輯中徹底解放出來(lái),只需要關(guān)心我們需要測(cè)試的代碼邏輯。JMH就是這樣一款Java的測(cè)試框架。下面是JMH的官方定義

JMH是一個(gè)面向Java語(yǔ)言或者其他Java虛擬機(jī)語(yǔ)言的性能基準(zhǔn)測(cè)試框架

這里面我們需要注意的是,JMH所測(cè)試的方法約簡(jiǎn)單越好,依賴越少越好,最適合的場(chǎng)景就是,測(cè)試兩個(gè)集合put,get性能,例如ArrayList與LinkedList的對(duì)比等,這里我們需要測(cè)試的是批量打一批日志所需要的時(shí)間,也基本符合使用JMH的測(cè)試場(chǎng)景。下面是測(cè)試代碼,bench框架代碼以及主函數(shù)。

待測(cè)試方法

publicclassLogBenchMarkWorker{

privateLogBenchMarkWorker(){}

privatestaticclassLogBenchMarkWorkerInstance{
privatestaticfinalLogBenchMarkWorkerinstance=newLogBenchMarkWorker();
}

publicstaticLogBenchMarkWorkergetInstance(){
returnLogBenchMarkWorkerInstance.instance;
}

privatestaticfinalStringLOGGER_DEFAULT_NAME="defaultLogger";
privatestaticfinalStringLOGGER_INCLUDE_LOCATION="includeLocationLogger";
privatestaticfinalLoggerLOGGER=LoggerFactory.getLogger(LOGGER_DEFAULT_NAME);
privatestaticlongBATCH_SIZE=10000;

publicvoidlogBatch(){
for(inti=0;i

可以看到待測(cè)試方法非常簡(jiǎn)單,就是單批次一次性打印10000條日志的操作,所以并沒(méi)有需要額外說(shuō)明的部分。下面我們?cè)賮?lái)看benchmark部分。

publicclassLogBenchMarkMain{

@Benchmark
@BenchmarkMode(Mode.AverageTime)
@Fork(value=1)
@Threads(1)
publicvoidtestLog1(){
LogBenchMarkWorker.getInstance().logBatch();
}

@Benchmark
@BenchmarkMode(Mode.AverageTime)
@Fork(value=1)
@Threads(4)
publicvoidtestLog4(){
LogBenchMarkWorker.getInstance().logBatch();
}

@Benchmark
@BenchmarkMode(Mode.AverageTime)
@Fork(value=1)
@Threads(8)
publicvoidtestLog8(){
LogBenchMarkWorker.getInstance().logBatch();
}

@Benchmark
@BenchmarkMode(Mode.AverageTime)
@Fork(value=1)
@Threads(16)
publicvoidtestLog16(){
LogBenchMarkWorker.getInstance().logBatch();
}

在這段代碼中,我們就會(huì)發(fā)現(xiàn)有了一些JMH中特有的東西,我下面進(jìn)行簡(jiǎn)要介紹。

Benchmark注解:標(biāo)識(shí)在某個(gè)具體方法上,表示這個(gè)方法將是一個(gè)被測(cè)試的最小方法,在JMH中成為一個(gè)OPS
BenmarkMode:測(cè)試類型,JMH提供了幾種不同的Mode
    Throughput:整體吞吐量
    AverageTime:調(diào)用的平均時(shí)間,每次OPS執(zhí)行的時(shí)間
    SampleTime:取樣,給出不同比例的ops時(shí)間,例如99%的ops時(shí)間,99.99%的ops時(shí)間
fork:fork的次數(shù),如果設(shè)置為2,JMH會(huì)fork出兩個(gè)進(jìn)程來(lái)測(cè)試
Threads:很容易理解,這個(gè)參數(shù)表示這個(gè)方法同時(shí)被多少個(gè)線程執(zhí)行

在上面的代碼中,我定義了4個(gè)待測(cè)試的方法,方法的Fork,BenchmarkMode均為測(cè)試單次OPS的平均時(shí)間,但4個(gè)方法的線程數(shù)不同。除了這幾個(gè)參數(shù),還有幾個(gè)參數(shù),我會(huì)在main函數(shù)里面來(lái)講,main代碼如下所示

publicclassMain{
publicstaticvoidmain(String[]args)throwsRunnerException{
Optionsoptions=newOptionsBuilder()
.include(LogBenchMarkMain.class.getSimpleName())
.warmupIterations(5)
.measurementIterations(5)
.output("logs/BenchmarkCommon.log")
.build();
newRunner(options).run();
}
}

我們可以看到,在main函數(shù)中,我們就是要設(shè)置JMH的基礎(chǔ)配置,這里面的幾個(gè)配置參數(shù)含義如下:

include:benchmark所在類的名字,可以使用正則表達(dá)
warmupIteration:預(yù)熱的迭代次數(shù),這里為什么要預(yù)熱的原因是由于JIT的存在,隨著代碼的運(yùn)行,會(huì)動(dòng)態(tài)對(duì)代碼的運(yùn)行進(jìn)行優(yōu)化。因此在測(cè)試過(guò)程中需要先預(yù)熱幾輪,讓代碼運(yùn)行穩(wěn)定后再實(shí)際進(jìn)行測(cè)試
measurementIterations:實(shí)際測(cè)試輪次
output:測(cè)試報(bào)告輸出位置

我分別用兩種logger運(yùn)行一下測(cè)試,查看性能測(cè)試報(bào)告對(duì)比

使用普通logger

LogBenchMarkMain.testLog1avgt50.006±0.001s/op
LogBenchMarkMain.testLog16avgt50.062±0.026s/op
LogBenchMarkMain.testLog4avgt50.006±0.002s/op
LogBenchMarkMain.testLog8avgt50.040±0.004s/op

使用了INCLUDE_LOCATION的logger

LogBenchMarkMain.testLog1avgt50.379±0.007s/op
LogBenchMarkMain.testLog16avgt51.784±0.670s/op
LogBenchMarkMain.testLog4avgt50.378±0.003s/op
LogBenchMarkMain.testLog8avgt50.776±0.070s/op

這里我們看到,性能差距立現(xiàn)。使用INCLUDE_LOCATION的性能要明顯低于使用普通logger的性能。這是我們一定很好奇,并且問(wèn)一句“到底慢在哪”!!

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

項(xiàng)目地址:https://gitee.com/zhijiantianya/yudao-cloud

視頻教程:https://doc.iocoder.cn/video/

Arthas 我的代碼在運(yùn)行時(shí)到底做了什么

Arthas是阿里開(kāi)源的一款java調(diào)試神器,與greys類似,不過(guò)有著比greys更加強(qiáng)大的功能,例如,可以直接繪制java方法調(diào)用的火焰圖等。這兩個(gè)工具的原理都是使用了Java強(qiáng)大的字節(jié)碼技術(shù)。畢竟我也不是JVM大佬,所以具體的實(shí)現(xiàn)細(xì)節(jié)沒(méi)法展開(kāi),我們要做的就是站在巨人的肩膀上,接受并用熟練的使用好這些好用的性能監(jiān)控工具。

實(shí)際操作

talk is cheap, show me your code,既然是工具,我們直接進(jìn)行實(shí)際操作。我們?cè)诒緳C(jī)運(yùn)行我們一開(kāi)始的程序,然后講解arthas的使用方法。

我們首先通過(guò)jps找到程序的進(jìn)程號(hào),然后直接通過(guò)arthas給到的as.sh對(duì)我們運(yùn)行的程序進(jìn)行字節(jié)碼增強(qiáng),然后啟動(dòng)arthas,命令如下

./as.shpid
119b0164-5cb1-11ed-a3b6-dac502259ad0.png

可以看到,arthas支持查看當(dāng)前jvm的狀態(tài),查看當(dāng)前的線程狀態(tài),監(jiān)控某些方法的調(diào)用時(shí)間,trace,profile生成火焰圖等,功能一應(yīng)俱全 我們這里也只將幾個(gè)比較常用的命令,其他的命令如果大家感興趣可以詳見(jiàn)官網(wǎng)arthas官網(wǎng)。這篇文章主要介紹下面幾個(gè)功能

反編譯代碼

監(jiān)控某個(gè)方法的調(diào)用

查看某個(gè)方法的調(diào)用和返回值

trace某個(gè)方法

監(jiān)控方法調(diào)用

這個(gè)主要的命令為monitor,根據(jù)官網(wǎng)的介紹,常用的使用方法為

monitor-cdurationclassNamemethodName

其中duration代表每隔幾秒展示一次統(tǒng)計(jì)結(jié)果,即單次的統(tǒng)計(jì)周期,className就是類的全限定名,methodname就是方法的名字,這里面我們查看的方法是Logger類的info方法,我們分別對(duì)使用兩種不同logger的info方法。這里面的類是org.slf4j.Logger,方法時(shí)info,我們的監(jiān)控語(yǔ)句為

monitor-c5org.slf4j.Loggerinfo

監(jiān)控結(jié)果如下

使用普通appender

11b7c88a-5cb1-11ed-a3b6-dac502259ad0.png

我們可以看到,使用include appeder的打印日志方法要比普通的appender高出了3倍,這就不禁讓我們有了疑問(wèn),究竟這兩個(gè)方法各個(gè)步驟耗時(shí)如何呢。下面我們就介紹第二條命令,trace方法。

trace命令 & jad命令

這兩個(gè)程序的log4j2配置文件如下


 

 

 

 

 












 
 




 





 














 

 








 






我們都是用了一個(gè)AsyncAppender套用了一個(gè)FileAppender。查看fileAppender,發(fā)現(xiàn)二者相同完全沒(méi)區(qū)別,只有asyncAppender中的一個(gè)選項(xiàng)有區(qū)別,這就是includeLocation,一個(gè)是false,另一個(gè)是true。至于這個(gè)參數(shù)的含義,我們暫時(shí)不討論,我們現(xiàn)在知道問(wèn)題可能出在AsyncAppender里面,但是我們?cè)撊绾悟?yàn)證呢。trace命令就有了大用場(chǎng)。

trace命令的基本用法與monitor類似,其中主要的一個(gè)參數(shù)是-n則是代表trace多少次的意思

trace-ntrace_timesclassNamemethodName

我在之前Log4j2的相關(guān)博客里面講到過(guò),任何一個(gè)appender,最核心的方法就是他的append方法。所以我們分別trace兩個(gè)程序的append方法。

trace-n5org.apache.logging.log4j.core.appender.AsyncAppenderappend

trace結(jié)果如下

使用普通appender

11f36f48-5cb1-11ed-a3b6-dac502259ad0.png

我們立刻可以發(fā)現(xiàn),兩個(gè)trace的熱點(diǎn)方法不一樣,在使用include的appender中,耗時(shí)最長(zhǎng)的方法時(shí)org.apache.logging.log4j.core.impl.Log4jLogEvent類中的createMemento方法,那么怎么才能知道這個(gè)方法到底做了啥呢,那就請(qǐng)出我們下一個(gè)常用命令jad,這個(gè)命令能夠反編譯出對(duì)應(yīng)方法的代碼。這里我們jad一下上面說(shuō)的那個(gè)createMemento方法,命令很簡(jiǎn)單

jadorg.apache.logging.log4j.core.impl.Log4jLogEventcreateMemento

結(jié)果如下

12397cae-5cb1-11ed-a3b6-dac502259ad0.png

watch命令

watch命令能夠觀察到某個(gè)特定方法的入?yún)ⅲ祷刂档?a target="_blank">信息,我們使用這個(gè)命令查看一下這個(gè)createMemento方法的入?yún)ⅲ绻麅蓚€(gè)程序的入?yún)⒉煌腔究梢詳喽ㄊ沁@個(gè)原因引起命令如下

watchorg.apache.logging.log4j.core.impl.Log4jLogEventcreateMemento"params"-x2-n5-b-f

這里面的參數(shù)含義如下

-x參數(shù)展開(kāi)層次
-n執(zhí)行次數(shù)
-b查看方法調(diào)用前狀態(tài)
-f方法調(diào)用后

其中的param代表查看方法的調(diào)用參數(shù)列表,還有其他的監(jiān)控項(xiàng)詳見(jiàn)官網(wǎng)官網(wǎng)

最終watch結(jié)果如下

使用普通logger

12540a60-5cb1-11ed-a3b6-dac502259ad0.png

果不其然,這兩個(gè)參數(shù)果然是一個(gè)true一個(gè)false,我們簡(jiǎn)單看下這個(gè)參數(shù)是如何傳進(jìn)來(lái)的,我們jad一下AsyncAppender的append方法。

12893262-5cb1-11ed-a3b6-dac502259ad0.png

不過(guò)為了一探究竟,我還是靜態(tài)跟了一下這段代碼

這個(gè)includeLocation會(huì)在event的createMemento中被用到,在序列化生成對(duì)象時(shí)會(huì)創(chuàng)建一個(gè)LogEventProxy,代碼如下

publicLogEventProxy(finalLogEventevent,finalbooleanincludeLocation){
this.loggerFQCN=event.getLoggerFqcn();
this.marker=event.getMarker();
this.level=event.getLevel();
this.loggerName=event.getLoggerName();

finalMessagemsg=event.getMessage();
this.message=msginstanceofReusableMessage
?memento((ReusableMessage)msg)
:msg;
this.timeMillis=event.getTimeMillis();
this.thrown=event.getThrown();
this.thrownProxy=event.getThrownProxy();
this.contextData=memento(event.getContextData());
this.contextStack=event.getContextStack();
this.source=includeLocation?event.getSource():null;
this.threadId=event.getThreadId();
this.threadName=event.getThreadName();
this.threadPriority=event.getThreadPriority();
this.isLocationRequired=includeLocation;
this.isEndOfBatch=event.isEndOfBatch();
this.nanoTime=event.getNanoTime();
}

如果includeLocation為true,那么就會(huì)調(diào)用getSource函數(shù),跟進(jìn)去查看,代碼如下

publicStackTraceElementgetSource(){
if(source!=null){
returnsource;
}
if(loggerFqcn==null||!includeLocation){
returnnull;
}
source=Log4jLogEvent.calcLocation(loggerFqcn);
returnsource;
}
publicstaticStackTraceElementcalcLocation(finalStringfqcnOfLogger){
if(fqcnOfLogger==null){
returnnull;
}
//LOG4J2-1029newThrowable().getStackTraceisfasterthanThread.currentThread().getStackTrace().
finalStackTraceElement[]stackTrace=newThrowable().getStackTrace();
StackTraceElementlast=null;
for(inti=stackTrace.length-1;i>0;i--){
finalStringclassName=stackTrace[i].getClassName();
if(fqcnOfLogger.equals(className)){
returnlast;
}
last=stackTrace[i];
}
returnnull;
}

我們看到他會(huì)從整個(gè)的調(diào)用棧中去尋找調(diào)用這個(gè)方法的代碼行,其性能可想而知。我們用arthas監(jiān)控一下,驗(yàn)證一下。

首先我們trace crateMemento方法

trace-n5org.apache.logging.log4j.core.impl.Log4jLogEventcreateMemento
12ad86b2-5cb1-11ed-a3b6-dac502259ad0.png
trace-n5org.apache.logging.log4j.core.impl.Log4jLogEventserialize
12e6ff78-5cb1-11ed-a3b6-dac502259ad0.png
trace-n5org.apache.logging.log4j.core.impl.Log4jLogEvent$LogEventProxy
130ec940-5cb1-11ed-a3b6-dac502259ad0.png
trace-n5trace-n5org.apache.logging.log4j.core.LogEventgetSource
135258ae-5cb1-11ed-a3b6-dac502259ad0.png

至此我們通過(guò)結(jié)合JMH和arthas共同定位出了一個(gè)線上的性能問(wèn)題。不過(guò)我介紹的只是冰山一角,更多常用的命令還希望大家通過(guò)官網(wǎng)自己了解和實(shí)踐,有了幾次親身實(shí)踐之后,這個(gè)工具也就玩熟了。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 監(jiān)控
    +關(guān)注

    關(guān)注

    6

    文章

    2212

    瀏覽量

    55243
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4793

    瀏覽量

    68701
  • Case
    +關(guān)注

    關(guān)注

    0

    文章

    27

    瀏覽量

    13378

原文標(biāo)題:測(cè)試和性能監(jiān)控神器 JMH & Arthas

文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    無(wú)線網(wǎng)絡(luò)智能攝像機(jī) 店鋪安防監(jiān)控必備神器

    最不省心的問(wèn)題有兩個(gè):一是就是夜里的防盜問(wèn)題,二是店里的員工有沒(méi)有消極怠工、偷懶打游戲,甚至有沒(méi)有挪用收銀臺(tái)的錢。下面給大家分享Vimtag智能攝像機(jī)店鋪監(jiān)控必備神器。  說(shuō)到店鋪安裝智能攝像機(jī),有以下
    發(fā)表于 06-07 15:25

    使用測(cè)試工具iPerf監(jiān)控無(wú)線網(wǎng)絡(luò)性能(轉(zhuǎn))

    使用測(cè)試工具iPerf監(jiān)控無(wú)線網(wǎng)絡(luò)性能(轉(zhuǎn))
    發(fā)表于 08-17 12:37

    數(shù)十萬(wàn)應(yīng)用結(jié)點(diǎn)全息監(jiān)控,ARMS新上線的應(yīng)用監(jiān)控神器到底有多牛?

    的應(yīng)用的高效運(yùn)行。而ARMS的“應(yīng)用監(jiān)控”就是保障這些復(fù)雜應(yīng)用有效運(yùn)行的秘密武器。近日,阿里中間件(Aliware)將該功能正式對(duì)外開(kāi)放,目的是為用戶在應(yīng)用性能管理方面提供更多便利。在微服務(wù)時(shí)代,IT企業(yè)
    發(fā)表于 12-25 13:55

    linux服務(wù)器性能測(cè)試步驟

    linux服務(wù)器性能測(cè)試-服務(wù)器實(shí)時(shí)【磁盤】監(jiān)控
    發(fā)表于 06-02 06:54

    移動(dòng)APP測(cè)試的android性能測(cè)試

    當(dāng)應(yīng)用實(shí)現(xiàn)了新功能后,準(zhǔn)備發(fā)布版本前,必須進(jìn)行性能測(cè)試以確定沒(méi)有性能問(wèn)題,內(nèi)存使用情況便是其中必須要測(cè)試性能之一。由于內(nèi)存組成的復(fù)雜性,并
    發(fā)表于 06-09 16:17

    NXP電力變換的神器

    其實(shí)很早之前在公眾號(hào)給大家推送過(guò)NXP的這個(gè)神器,freeMaster,這個(gè)工具其實(shí)已經(jīng)好多年了,在最早的飛思卡爾早期就存在,一直是工程師調(diào)試電機(jī),電力變換的神器,確實(shí)好...
    發(fā)表于 09-17 06:48

    CoreSight性能監(jiān)控單元架構(gòu)

    體系結(jié)構(gòu)包括當(dāng)計(jì)數(shù)器達(dá)到閾值時(shí)產(chǎn)生中斷的機(jī)制。 在CoreSight性能監(jiān)視單元體系結(jié)構(gòu)中,事件計(jì)數(shù)器是單調(diào)增加的。但是,在某些情況下,PMU提供監(jiān)控器來(lái)測(cè)量組成部分例如,監(jiān)控器可能在分配資源時(shí)遞增
    發(fā)表于 08-09 07:20

    Arthas可以解決哪些問(wèn)題

    診斷利器 Arthas,是阿里的一款開(kāi)源工具。Github-alibaba/arthas 上可以看到它的介紹
    的頭像 發(fā)表于 12-24 14:22 ?782次閱讀

    國(guó)產(chǎn)測(cè)試工具神器ATECLOUD智能云測(cè)試平臺(tái)技術(shù)特點(diǎn)

    語(yǔ)言編程,讓不懂代碼的人也可以快速搭建測(cè)試方案,讓測(cè)試測(cè)量更直觀、更簡(jiǎn)單。本篇文章納米軟件Namisoft小編將為大家分享一下關(guān)于:對(duì)標(biāo)Labview的國(guó)產(chǎn)測(cè)試工具神器ATECLOUD
    發(fā)表于 09-28 15:43 ?1579次閱讀
    國(guó)產(chǎn)<b class='flag-5'>測(cè)試</b>工具<b class='flag-5'>神器</b>ATECLOUD智能云<b class='flag-5'>測(cè)試</b>平臺(tái)技術(shù)特點(diǎn)

    Arthas -- 一款釋放潛力的神器

    阿里巴巴 Arthas 是一個(gè)診斷工具,可以用于監(jiān)視、分析和解決 Java 應(yīng)用程序的問(wèn)題。使用 Arthas 的一個(gè)主要優(yōu)點(diǎn)是,我們不需要修改代碼,甚至不需要重新啟動(dòng)我們想要監(jiān)視的 Java 服務(wù)。
    的頭像 發(fā)表于 07-05 11:21 ?563次閱讀
    <b class='flag-5'>Arthas</b> -- 一款釋放潛力的<b class='flag-5'>神器</b>

    基于Java的阿里巴巴Arthas調(diào)優(yōu)方案

    在 main 方法中,我們使用一個(gè)循環(huán)和相對(duì)較大的數(shù)字,以便讓計(jì)算機(jī)進(jìn)行較長(zhǎng)時(shí)間的計(jì)算。這當(dāng)然正是我們想要的,以便演示 Arthas
    發(fā)表于 07-05 11:19 ?150次閱讀
    基于Java的阿里巴巴<b class='flag-5'>Arthas</b>調(diào)優(yōu)方案

    介紹一款基于java的滲透測(cè)試神器-CobaltStrike

    Cobalt Strike是一款基于java的滲透測(cè)試神器,常被業(yè)界人稱為CS神器
    的頭像 發(fā)表于 01-16 09:16 ?1007次閱讀
    介紹一款基于java的滲透<b class='flag-5'>測(cè)試</b><b class='flag-5'>神器</b>-CobaltStrike

    性能測(cè)試主要測(cè)什么 性能測(cè)試的指標(biāo)有哪些

    性能測(cè)試是軟件測(cè)試的一個(gè)重要組成部分,主要用于評(píng)估軟件系統(tǒng)在各種負(fù)載條件下的性能表現(xiàn)。性能測(cè)試
    的頭像 發(fā)表于 05-29 15:42 ?2403次閱讀

    使用Arthas火焰圖工具的Java應(yīng)用性能分析和優(yōu)化經(jīng)驗(yàn)

    分享作者在使用Arthas火焰圖工具進(jìn)行Java應(yīng)用性能分析和優(yōu)化的經(jīng)驗(yàn)。
    的頭像 發(fā)表于 10-28 09:27 ?284次閱讀
    使用<b class='flag-5'>Arthas</b>火焰圖工具的Java應(yīng)用<b class='flag-5'>性能</b>分析和優(yōu)化經(jīng)驗(yàn)

    華為云 X 實(shí)例 CPU 性能測(cè)試詳解與優(yōu)化策略

    引言 ? 1. 測(cè)試環(huán)境搭建 ? 1.1 測(cè)試實(shí)例的選擇 ? 1.2 CPU性能測(cè)試工具介紹 ? 1.3 安裝和配置Sysbench ? 2. CPU
    的頭像 發(fā)表于 12-30 14:52 ?84次閱讀
    華為云 X 實(shí)例 CPU <b class='flag-5'>性能</b><b class='flag-5'>測(cè)試</b>詳解與優(yōu)化策略
    主站蜘蛛池模板: 久久精品热99看二| 国产亚洲精品看片在线观看| 亚色九九九全国免费视频| 人驴交f ee欧美| 男同志video最新猛男| 久久中文字幕无码A片不卡| 精品国产美女AV久久久久| 国产亚洲一区在线| 国产亚洲制服免视频| 国产午夜福利片| 国产真实乱对白精彩| 国内精品久久| 混乱家庭电影完整版在线看| 韩国女人高潮嗷嗷叫视频| 黄片a级毛片| 久久精品视频在线看15| 久久青草免费91线频观看站街| 九九在线免费视频| 久久精视频| 免费精品国偷自产在线在线| 美女扒开尿孔| 欧美整片华人play| 日本人娇小hd| 午夜福利影院私人爽爽| 亚洲高清视频在线观看| 亚洲日本一区二区三区在线不卡| 亚洲欧美精品无码大片在线观看| 亚洲中文字幕日产乱码2020| 中国少妇内射XXXHD免费| 60岁老年熟妇在线无码| jzz大全18| 国产黄片毛片| 国内偷拍夫妻av| 玖玖爱在线播放| 欧美激情一区二区三区视频| 日韩一区二区三区射精| 学生精品国产在线视频| 伊人影院香蕉久在线26| 9国产露脸精品国产麻豆| 国产AV精品久久久免费看| 果冻传媒在线观看视频|