接口響應(yīng)太慢的原因排查
首先判斷是否是所有的API接口相應(yīng)都很慢,還是某個(gè)特定的接口相應(yīng)速度慢,如果所有接口的相應(yīng)速度都很慢,可能是服務(wù)器資源、數(shù)據(jù)庫或者網(wǎng)絡(luò)流量的問題。 如果只是一個(gè)接口比較慢或者某個(gè)用戶的請(qǐng)求中比較慢 ,那么可能就是業(yè)務(wù)邏輯或者 SQL 的問題,比如某個(gè)sql 索引失效了,進(jìn)行的是全表的掃描,這個(gè)時(shí)候我們就需要去進(jìn)行sql的調(diào)優(yōu)。
1網(wǎng)絡(luò)層故障的排查
1.我們先用一下ping命令檢查一下服務(wù)器的連通性以及往返時(shí)間。
- 延遲:查看平均 RTT 是否在可接受范圍內(nèi)(通常低于 100ms)。
- 丟包率:查看是否存在數(shù)據(jù)包丟失,丟包率高會(huì)顯著影響性能。
2. 查看服務(wù)器的資源使用
服務(wù)器 CPU 用滿了
通過 top 命令查看服務(wù)器內(nèi)存和資源的使用。 %CPU 是 cpu 的使用情況,MEM 是內(nèi)存的使用情況。 比如有一個(gè)服務(wù)的 CPU 飆到了 90 多,可能是出現(xiàn)了死鎖,或者無限循環(huán)了。
如果是 docker 部署的項(xiàng)目,可以用 docker stats 查看 docker 容器占用的內(nèi)存。
來找到 CPU 占用高的進(jìn)程,再找到對(duì)應(yīng)的線程。 使用 jstack 查看線程的堆棧信息,這個(gè)是 JVM 提供的查看線程信息的工具??梢钥吹?JVM 的堆棧信息,找到出現(xiàn)問題的具體代碼,然后再進(jìn)行修改。
連接池資源耗盡
可能是 tomcat 的連接池或者是數(shù)據(jù)庫的連接池耗盡,調(diào)整業(yè)務(wù)的線程池參數(shù)。
spring:
datasource:
hikari:
maximum-pool-size: 50
minimum-idle: 10
connection-timeout: 30000
idle-timeout: 600000
在配置連接池的時(shí)候需要合理設(shè)置連接池的大小。多個(gè)請(qǐng)求過來數(shù)據(jù)庫的連接池用完了
具體業(yè)務(wù)代碼的排查
查找 慢 sql
針對(duì)于具體的接口 ,sql 執(zhí)行過慢的情況,使用 explain 進(jìn)行慢 sql 的分析,看 sql 是否走了索引。很多情況下都是索引失效。
這邊就可以往 sql 調(diào)優(yōu)去聊了
- 對(duì)于大量的數(shù)據(jù)查詢一定要使用分頁查詢來限制每次返回的行數(shù)。
2.建立聯(lián)合索引來提高效率等。
- 使用 explain 分析 sql 查詢的執(zhí)行計(jì)劃,判斷查詢是否使用了索引。
從JVM 內(nèi)存、GC,線程等信息進(jìn)行考慮
Java 應(yīng)用程序運(yùn)行在 JVM 之上,JVM 的性能直接影響 API 接口的響應(yīng)速度。常見的 JVM 優(yōu)化策略包括
調(diào)整堆內(nèi)存大?。焊鶕?jù)應(yīng)用的內(nèi)存需求,合理設(shè)置 JVM 的堆內(nèi)存大小,避免頻繁的 GC 操作。
-Xms4g -Xmx4g
使用 G1 GC 垃圾回收器:對(duì)于高并發(fā)應(yīng)用,G1 GC 可以減少 Full GC 的停頓時(shí)間,提高系統(tǒng)的響應(yīng)速度。
-XX:+UseG1GC
監(jiān)控 GC 日志:通過分析 GC 日志,判斷是否存在頻繁 GC 或長(zhǎng)時(shí)間停頓的問題。
-XX:+PrintGCDetails -Xloggc:gc.log
設(shè)置緩存
如果有些接口在 管理系統(tǒng)下面響應(yīng)時(shí)間比較長(zhǎng),可以將數(shù)據(jù)緩存起來到 Redis 中,下次查詢的時(shí)候直接從 Redis 中拿即刻。
系統(tǒng)調(diào)用第三方的服務(wù)
為第三方的服務(wù)設(shè)置對(duì)應(yīng)的超時(shí)時(shí)間,比如三秒鐘,如果三秒鐘沒有響應(yīng)直接返回,避免長(zhǎng)時(shí)間的等待。 比如調(diào)用阿里的大模型 API,如果存在延遲,三秒鐘會(huì)有收到 result 直接給用戶返回一個(gè)空的信息。
對(duì)于某些不需要立即返回的第三方服務(wù)調(diào)用,可以使用異步調(diào)用提高系統(tǒng)的響應(yīng)速度。
熔斷和降級(jí)
采用微服務(wù)的熔斷和降級(jí),當(dāng)?shù)谌椒?wù)出現(xiàn)問題時(shí),能夠快速返回默認(rèn)結(jié)果,保證系統(tǒng)的穩(wěn)定性。
#機(jī)械人面試中的常問題##接口響應(yīng)太慢的原因排查#牛牛的面試專欄,希望自己在25年可以拿到一份大廠的SP Offer 你的點(diǎn)贊和收藏都是我持續(xù)更新的動(dòng)力