1.做的一個專案,涉及到性能的壓測,架構為springboot+redis,為了提升查詢性能,由以前的查庫改為查快取,
利用redis的lettuce,來操作redis,lettuce配置如圖:
spring:
# redis
redis:
isopen: true
database:0
host: 127.0.0.1
port:6379
lettuce:
pool:
max-active:-1
max-wait: 100
max-idle:8
min-idle:0
timeout: 5000
redis中提前放置一條資料,獲取快取,controller的代碼如下:
@CrossOrigin
@GetMapping(value ="/handle", produces ="application/json;charset=UTF-8")
@ResponseBody
public StringqueryHandle(@RequestParam(value ="identity") String handleIdentity)throws JSONException {
if(isCache &&redisUtil.exists(handleIdentity)){
return redisUtil.get(handleIdentity).toString();
}
redisUtil.get的方法如下:
public Object get(String key){
return key ==null ?null :redisTemplate.opsForValue().get(key);
}
用jmeter進行性能測驗,在并發2000,回圈10次的情況下,結果如圖,性能出乎意料的差,有沒有大神能指教一下,什么原因導致的性能這么差,redis的單機不是號稱QPS在幾萬嗎?

uj5u.com熱心網友回復:
你這個是在自己電腦開jmeter測自己電腦跑的專案吧
uj5u.com熱心網友回復:
是的,但是把jemter放在服務器上測驗后,結果也差不多,相差不大,
uj5u.com熱心網友回復:
硬體資源還剩多少,CPU跑滿了沒有tomcat上跑?tomcat調優了沒?
句柄數多少?另外壓測機cpu跟帶寬跑滿了沒有
uj5u.com熱心網友回復:
大神
uj5u.com熱心網友回復:
不好意思 我是來混一下的uj5u.com熱心網友回復:
你在服務器上面跑的jmeter錯誤率是100%誒,你先看看是什么錯吧。還有,性能壓測方法最好注意下。如果你要壓測,首先,要先測驗腳本空跑TPS多少,然后,腳本直接操作Redis TPS多少,最后,才是呼叫你的Spring Boot介面跑。這樣你會發現,可能是你的CPU或者記憶體資源不足,導致TPS上不去。
并且,測驗Java程式,尤其是Spring 程式,要預熱,因為JVM分層優化,C1,C2優化器都需要代碼被運行多次才會優化,否則你的代碼都要經過解釋器才會被機器執行,并不是機器碼直接執行,速度差很多,并且Spring啟動時加載一大堆東西導致codecache需要清理,清理的時候會STW,并且Spring Boot 的Controller第一次運行是Dispatcher懶加載的,需要動態加載,所以一定要預熱。你在服務器上面跑的Jmeter,一共就2000次,C1優化默認代碼要執行5000次以上的。
uj5u.com熱心網友回復:
單臺機器能做到2000并發么...你這tomcat執行緒池大小有沒有調整呢轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/27808.html
標籤:Java EE
