Jmeter
Apache JMeter是Apache組織開發(fā)的基于Java的壓力測(cè)試工具腹躁。用于對(duì)軟件做壓力測(cè)試火的,它最初被設(shè)計(jì)用于Web應(yīng)用測(cè)試恭陡,但后來擴(kuò)展到其他測(cè)試領(lǐng)域揭绑。閑來無(wú)事寫了一個(gè)demo來測(cè)試并發(fā)訪問下的性能。
Web程序
關(guān)鍵部分代碼如下
@RequestMapping(value = "/jmeter")
@Controller
public class TestController {
private static Connection connection;
static {
try {
Class.forName("com.mysql.jdbc.Driver");
//待優(yōu)化:使用數(shù)據(jù)庫(kù)連接池
connection = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/test?user=root&password=123456");
} catch (Exception e) {
e.printStackTrace();
}
}
@ResponseBody
@RequestMapping(value="/query", method = RequestMethod.GET)
public Object query(HttpServletRequest request,
HttpServletResponse response,
@RequestParam(value = "id", defaultValue = "0") int id) {
Map map = new HashMap();
map.put("id", id);
System.out.println(Thread.currentThread().getName() + "--" + this.hashCode() + "---" + id);
try {
Statement statement = connection.createStatement();
//數(shù)據(jù)庫(kù)表中共有1000條數(shù)據(jù)盟步,id為主鍵
ResultSet resultSet = statement.executeQuery("SELECT * FROM sheet0 where id = " + id);
if (resultSet.next()) {
System.out.println("success");
}
resultSet.close();
statement.close();
} catch (Exception e) {
e.printStackTrace();
}
return map;
}
}
啟動(dòng)Tomcat后訪問http://localhost:8080/jmeter/query?id=395即可藏斩。
配置Jmeter
Random Variable的值設(shè)置為0-1000
在聚合報(bào)告中可以查看請(qǐng)求的統(tǒng)計(jì)情況。下圖給200個(gè)線程并發(fā)時(shí)的統(tǒng)計(jì)數(shù)據(jù)
統(tǒng)計(jì)數(shù)據(jù)
線程數(shù) | 平均(ms) | 中位(ms) | 90線(ms) | 95線(ms) | 99線(ms) | Min(ms) | Max(ms) | 錯(cuò)誤率 |
---|---|---|---|---|---|---|---|---|
100 | 2 | 3 | 4 | 5 | 5 | 0 | 8 | 0 |
200 | 2 | 2 | 3 | 4 | 4 | 0 | 7 | 0 |
300 | 3 | 2 | 4 | 4 | 21 | 0 | 65 | 0 |
400 | 2 | 2 | 3 | 4 | 7 | 0 | 23 | 0 |
500 | 5 | 3 | 4 | 6 | 71 | 0 | 107 | 0 |
600 | 4 | 3 | 4 | 10 | 66 | 0 | 115 | 0 |
700 | 8 | 3 | 6 | 36 | 132 | 0 | 231 | 0 |
800 | 7 | 3 | 5 | 18 | 142 | 0 | 238 | 0 |
900 | 11 | 3 | 24 | 76 | 142 | 0 | 208 | 0 |
1000 | 15 | 3 | 43 | 104 | 173 | 0 | 266 | 0 |
1100 | 6 | 3 | 11 | 21 | 56 | 0 | 124 | 0 |
1200 | 69 | 14 | 236 | 323 | 446 | 0 | 693 | 0.23% |
1300 | 48 | 5 | 172 | 257 | 391 | 0 | 1588 | 2.23% |
1400 | 128 | 12 | 212 | 348 | 2619 | 0 | 2852 | 4.46% |
1500 | 117 | 70 | 319 | 386 | 488 | 0 | 793 | 0.68% |
1600 | 188 | 101 | 460 | 651 | 1372 | 0 | 1653 | 3.51% |
7100 | 138 | 78 | 396 | 473 | 555 | 0 | 1235 | 1.61% |
1800 | 286 | 204 | 627 | 745 | 1478 | 0 | 2717 | 9.16% |
1900 | 399 | 258 | 754 | 1132 | 4293 | 0 | 5070 | 15.45% |
2000 | 847 | 343 | 2389 | 4290 | 7661 | 1 | 8366 | 26.06% |
2100 | 1051 | 407 | 3144 | 5055 | 7925 | 0 | 9811 | 30.25% |
2200 | 588 | 295 | 1393 | 2648 | 4391 | 0 | 5507 | 21.64% |
2300 | 1242 | 455 | 4254 | 6766 | 14442 | 0 | 15221 | 31.02% |
2400 | 1077 | 429 | 4304 | 4789 | 7903 | 0 | 8547 | 29.08% |
2500 | 1456 | 505 | 4483 | 7858 | 8195 | 0 | 14988 | 34.73% |
由統(tǒng)計(jì)數(shù)據(jù)可見却盘,當(dāng)并發(fā)線程數(shù)在1100個(gè)以下時(shí)狰域,請(qǐng)求的成功率及95線等指標(biāo)均比較正常,性能并沒有很大的問題黄橘。當(dāng)并發(fā)線程數(shù)量超過1200個(gè)時(shí)兆览,錯(cuò)誤率和95線等指標(biāo)急劇上升∪兀可見抬探,正確預(yù)估web系統(tǒng)的QPS對(duì)于集群中機(jī)器的部署數(shù)量有直接的指導(dǎo)意義。以下幾張圖為測(cè)試過程中jconsole的監(jiān)測(cè)情況描孟。
由jvm的內(nèi)存使用情況可見驶睦,隨著jmeter并發(fā)線程數(shù)的增加砰左,tomcat所在的jvm中的GC頻率呈增加趨勢(shì)匿醒。
當(dāng)Tomcat的線程數(shù)達(dá)到最大數(shù)量之后就不再增加鸭丛,對(duì)于jmeter的并發(fā)請(qǐng)求嚣崭,tomcat只能使用有限的線程來處理妖枚。
測(cè)試中使用的機(jī)器為Mac Pro2015版嘱兼,CPU為Intel Core i7萌朱,內(nèi)存為16GB 1600MHz DDR3
JDK版本為64-Bit 1.8.0_121-b13
Tomcat版本為 8.5.3
Jmeter版本為1.0
MySQL版本為5.7.18
本文原始鏈接 http://www.cnblogs.com/umgsai/p/7252335.html 為優(yōu)賽工作室原創(chuàng)废亭,轉(zhuǎn)載請(qǐng)注明出處进陡,