分析性能問題思路html
一、畫出架構圖前端
二、根據系統架構圖—畫出被測數據的業務流向圖、問題必定在數據流向圖節點裏面java
若是響應時間很長問題可能出如今哪裏?mysql
網絡:帶寬有沒有打滿 、有沒有丟包狀況用命令查看 netstat -i web
cpu:首先看哪一個進程佔用cpu最高、java看進程下哪一個線程消耗最高的cpu、看線程執行什麼操做。sql
cpu—sy:系統內核、cpu把它的時間片過多的消耗到系統內核調用上,系統內核調用常見的磁盤的io,因此要看磁盤的io是否高 。讀寫速度、看磁盤隊列有沒有排隊。數據庫
cpu—us:首先看哪一個進程佔用cpu最高、java看進程下哪一個線程消耗最高的cpu、看線程執行什麼操做。apache
內存:看used和free 看java進程仍是非java進程。後端
磁盤:Iostat -dtomcat
st1:客戶端或者負載機發送請求(負載機等待也要算響應時間)負載機。
t2:網絡傳輸時間(網絡)網絡性能瓶頸。
t3:鏈接服務器的時間、尋找空閒鏈接池(web容器鏈接池)
t4:讀取代碼的時間—與硬件有關cpu進行調度、cpu調度應用程序執行、邏輯處理、判斷。Cpu運行要取決於內存、內存開闢一塊物理地址空間、cpu調度內存裏的數據(代碼邏輯)
t5:創建數據通道(數據庫鏈接池)
t6:傳送網絡時間(網絡)
t7:數據庫sql執行時間(sql時間)
t8:網絡通道返回(網絡)
t9:鏈接池喚醒、鏈接恢復(web容器鏈接池)
t4:讀取代碼(代碼邏輯)
t10:返回結果(網絡)
懷疑性能瓶頸在數據庫端?
一、首先看硬件
cpu—
負載—avg(過去1分鐘、5分鐘、15分鐘)cpu正在調用的進程+正在等待的io進程之和。(負載高:正在調用的進程數過多或正在等待io的進程數過多)
io—數據庫上問題一切揭io 讀操做上由於讀大於寫, 磁盤讀寫—讀:查詢操做數據再也不內存裏,從磁盤讀到內存,寫:先寫內存,讀和寫都在內存裏操做cpu在內存裏幹活,同步到磁盤。
網絡—
web容器 tomcat
一、工做模式
二、鏈接池—線程池是否會有排隊、阻塞的狀況,看看鏈接池是否用滿。
三、長鏈接—keeplive、超時時間設置(sendtimeout、keeplivetimeout、connecttimeout)
四、靜態資源的壓縮
五、動靜分離(前端有前端的東西、後端有後端的東西)
六、請求發數據庫—數據庫有數據庫鏈接池—數據庫鏈接池在代碼裏配置(應用程序到數據庫的大小、數據庫還會配置對外提供的鏈接池大小)在my.cnf 配置。
jmeter鏈接jdbc ip、端口號、database、 要配置鏈接池大小、用戶名、密碼,其餘應用程序也會配置這些值。
七、數據庫鏈接池通常不會配置很大、漏斗原來,發不少請求到數據可能就不會那麼多了。
八、怎麼查看有幾個鏈接ip鏈接數據庫 數據庫鏈接工具 tools—show—Processlist
九、如何評估多少臺應用服務器—看線上流量使用多少流量、線上承受多少併發量和tps,測單機。
線上要承受10000萬個併發,單機tps = 10 那就要10000/10 =1000臺機器。
十、數據庫 : 一主多從 、拆庫分表。
十一、看看數據庫鏈接池是否佔滿。
十二、是否看有沒有慢查詢—看慢查詢日誌,有沒有慢sql,分析一下sql的執行計劃explain,看看是否有優化空間。建議看「mysql高性能 第三版」。