jmeter 壓測duobbo接口,jmeter代碼不合理,導致每執行一次請求,會調用一次消耗內存的實例化。導致越壓越慢,請求發不出去。這個時候需要考慮修改代碼了。
截圖中,tps越來越少。
原來初始化的代碼放在
runTest中執行。
修改后放在
setupTest方法中運行,只運行一次。解決實例化消耗內存問題。
?
import com.alibaba.fastjson.JSONObject; 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 org.springframework.context.support.ClassPathXmlApplicationContext;import java.util.Date;public class TestMsgTemplate extends AbstractJavaSamplerClient {private static TemplateMsgFacade templateMsgFacade;@Overridepublic void setupTest(JavaSamplerContext arg0) {if (TestMsgTemplate.templateMsgFacade == null) {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:app-dubbo-client-context.xml");TestMsgTemplate.templateMsgFacade = (TemplateMsgFacade) context.getBean("templateMsgFacade");}}@Overridepublic Arguments getDefaultParameters() {Arguments params = new Arguments();params.addArgument("templateCode", "");return params;}@Overridepublic SampleResult runTest(JavaSamplerContext javaSamplerContext) {String templateCode = javaSamplerContext.getParameter("templateCode");SampleResult sr = new SampleResult();sr.setSampleLabel("MsgTemplate:消息模板");sr.sampleStart();TemplateMsgDto dto = new TemplateMsgDto();dto.setTemplateCode(templateCode);dto.setMobile("13922808010");dto.setPointCode("FC7555535");TemplateMsg msg = templateMsgFacade.getMsgTemplate(dto);String abc = JSONObject.toJSONString(msg);msg = null;if(abc.contains("templateSource")){//sr.setResponseData("templateSource 成功"+ templateCode, null);sr.setResponseData(templateCode+"成功", null);sr.setDataType("text");sr.setSuccessful(true);sr.setResponseCodeOK();}else{// sr.setResponseData("templateSource 失敗"+ templateCode, null);sr.setResponseData(templateCode+"失敗", null);sr.setDataType("text");sr.setSuccessful(false);sr.setResponseCode("404");}sr.sampleEnd();// abc = null;return sr;}/*** @param args*/public static void main(String[] args){for(int i = 0;i <20000000;i ++){System.out.println(i);Date nowTime = new Date();System.out.println(nowTime);//方法二:Date方式,輸出現在時間Arguments params = new Arguments();params.addArgument("templateCode", "hibox.noticeStaffAgainPost_ZH_CN");JavaSamplerContext arg0 = new JavaSamplerContext(params);TestMsgTemplate qap = new TestMsgTemplate();qap.setupTest(arg0);qap.runTest(arg0);qap.teardownTest(arg0);}} }
?重新運行壓測代碼j結果,tps 明顯提高很多:
?