Jmeter
Apache JMeter是Apache組織開發(fā)的基于Java的壓力測試工具。用于對軟件做壓力測試,它最初被設(shè)計(jì)用于Web應(yīng)用測試,但后來擴(kuò)展到其他測試領(lǐng)域。閑來無事寫了一個(gè)demo來測試并發(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ù)庫連接池
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ù)庫表中共有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)告中可以查看請求的統(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í),請求的成功率及95線等指標(biāo)均比較正常,性能并沒有很大的問題。當(dāng)并發(fā)線程數(shù)量超過1200個(gè)時(shí),錯(cuò)誤率和95線等指標(biāo)急劇上升??梢?,正確預(yù)估web系統(tǒng)的QPS對于集群中機(jī)器的部署數(shù)量有直接的指導(dǎo)意義。以下幾張圖為測試過程中jconsole的監(jiān)測情況。

由jvm的內(nèi)存使用情況可見,隨著jmeter并發(fā)線程數(shù)的增加,tomcat所在的jvm中的GC頻率呈增加趨勢。


當(dāng)Tomcat的線程數(shù)達(dá)到最大數(shù)量之后就不再增加,對于jmeter的并發(fā)請求,tomcat只能使用有限的線程來處理。
測試中使用的機(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)載請注明出處,