說明:
本文是基於虛擬機演示的,資源有限
skywalking中拓撲圖
kubectl get po -A -owide
測試執行:單場景
查詢禮品
jmeter -n -t gift.jmx -l res.jtl -e -o res/
通過下圖可以看到,tps>50
壓測結果
兌換禮品
見下方性能問題2
查詢訂單
見下方性能問題1
測試執行:混合場景
12線程
測試執行:穩定性場景
說明:下圖大概00:25后tps上升,是因為我把服務器上無關的服務停了
性能問題1:查詢訂單慢sql
壓測執行
jmeter -n -t gift.jmx -l res.jtl -e -o res/
通過下圖可以看到,tps在20左右
監控
grafana結果
k8s全局監控
mysql監控,可以看到有慢查詢
skywalking鏈路追蹤
可以選擇持續時間和時間范圍
查看跨度信息,可以看到sql
也可以拆解時間的方式
先進入拓撲圖頁面,最下面選擇時間范圍
分析
源碼
@Select("select o.id,o.order_number as orderNumber,o.order_product_name as orderProductName,o.order_price as orderPrice,o.count,o.buy_date as buyDate from orders o where order_number = #{orderNumber}") Order findByProductId(@Param("orderNumber") String orderNumber);
執行計划:explain select o.id,o.order_number,o.order_product_name,o.order_price,o.count,o.buy_date from orders o where o.order_number = 'n305udx6jqu2pjxt';
掃全表
調優
create unique index index_order_number on orders(order_number);
回歸壓測
jmeter -n -t gift.jmx -l res.jtl -e -o res/
mysql監控中,沒看到慢查詢了
鏈路追蹤
性能問題2:兌換禮品網關超時
壓測執行
jmeter -n -t gift.jmx -l res.jtl -e -o res/
監控
k8s
jmeter
查看html報告
通過gui方式壓測(這里只是為了直觀看到錯誤信息,並不推薦gui方式壓測),可以看到是網關超時
分析
進入ingress:kubectl exec -it -n ingress-nginx po/ingress-nginx-controller-qc299 -- sh
搜索:gateway
到## start server gateway.gifts.com下的location下
如果http請求超過了60秒再返回,連接就會被nginx中斷,就會報504的錯誤:gateway time-out
調優
重新設置nginx超時時間,將超時時間設置為3600,就是一個小時,這個值可以靈活設置,就是不讓他在默認60秒斷開鏈接。
在gateway的ingress中新增
vim gateway-skywalking.yaml
annotations: #注解信息 kubernetes.io/ingress.class: "nginx" nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
kubectl replace -f gateway-skywalking.yaml
進入ingress:kubectl exec -it -n ingress-nginx po/ingress-nginx-controller-qc299 -- sh
可以看到,配置已經動態更新
回歸壓測
磁盤
性能問題3:鎖使用不合理
待更新...
更多性能問題
詳見:https://www.cnblogs.com/uncleyong/p/15793624.html
【性能項目實戰:jmeter+k8s+微服務+skywalking+efk】匯總
詳見:https://www.cnblogs.com/uncleyong/p/15475614.html