[性能優化]-01調優指標


一、爲什麼調優?
1、隨着時間積累問題凸顯。機器定時宕機,重啓後恢復正常,以此循環
2、搞活動併發量導致。不知道性能的極限,併發量導致性能瓶頸
3、定時炸彈。上線後一直半死不活,無人問津。
4、(最直接的目的)提高系統性能,縮減服務器數量,節省公司資源

二、什麼時候調優?
1、開發初期
	無需刻意優化,影響開發進度,帶來新問題
	保證有效編碼。如,減少磁盤IO、降低鎖競爭、高效算法、設計模式應對複雜場景(折扣、紅包活動)
2、編碼完成
	壓測,通過工具分析系統性能指標,是否符合預期範圍
3、上線後
	根據實際情況,根據工具(日誌監控、性能統計日誌),觀察系統性能問題並及時修復

三、如何調優/調優的指標?
1、哪些計算機資源,會成爲系統的性能瓶頸?
	cpu,有些應用需要大量計算,一直霸佔cpu,導致其他資源無法爭奪cpu而響應緩慢。
		如,
			代碼循環遞歸
			正則表達式的回溯問題
			jvm頻繁 full gc
			多線程造成的大量線程切換
	內存
		java程序通過jvm對內存進行管理。jvm中的堆用於存放java創建的對象
		堆內存讀寫速度快,不存在讀寫性能瓶頸,但是內存存儲空間有限,當內存空間被佔滿,對象無法回收,會遇到內存溢出、內存泄漏問題。
		
	磁盤IO,存儲空間大,讀寫慢,可以通過SSD固態硬盤來優化。讀寫速度 內存 > SSD固態硬盤 > 磁盤
	網絡,若傳輸數據大、併發量大,需要增加網絡帶寬。
	異常,java應用拋出異常 需要構造異常棧,對於異常的捕獲和處理 非常消耗系統性能,尤其是併發環境。
	數據庫,大量數據庫讀寫,會導致磁盤IO瓶頸。
	鎖競爭
		爲避免多線程操作共享資源,需要加鎖保證原子性。同時,鎖的使用 帶來上下文切換,導致性能開銷
		jdk1.6後,java爲降低鎖競爭帶來的上下文切換,對jvm內部鎖做優化:偏向鎖、自選鎖、輕量級鎖、鎖粗化、鎖消除。
		合理的使用鎖資源,需要了解更多的操作系統知識、java多線程編程基礎
2、系統性能的衡量指標
	響應時間(毫秒級),越小越好
		自下而上 分類:數據庫響應t(最耗時)、服務器t(nginx分發t、服務端t)、網絡傳輸(網絡硬件 解析傳輸請求 耗時)、客戶端(一般忽略不計,除非有大量邏輯)
	吞吐量(TPS 每秒事務量,體現接口性能,越大越好)
		自下而上 分類:
			磁盤吞吐量,2個關鍵指標
				IOPS(input/output per second)每秒的輸入輸出量/讀寫次數。(次數)
					指單位時間系統處理的IO請求數量(通常爲讀寫請求),關注的是隨機讀寫的性能。
					適用於隨機讀寫頻繁的應用,如小文件存儲(圖片)、oltp數據庫、郵件服務器
				數據吞吐量(大小,關鍵指標)
					指單位時間成功傳輸的數據量
					對於大量順序讀寫頻繁的應用,傳輸大量連續數據。如:電視臺的視頻編輯、視頻點播VOD
			網絡吞吐量,設備能夠接受的最大數據速率
				與帶寬、cpu處理能力、網卡、防火牆、外部接口、IO有關
				主要取決於,網卡處理能力、內部程序算法、帶寬大小
	計算機資源分配使用率
		木桶效應:cpu佔用率、內存使用率、磁盤IO、網絡IO
	負載承受能力
		通過壓測的不斷加量,觀察系統響應時間上升曲線是否平緩,分析系統極限。
		

迭代之前的版本的系統性能指標 作爲參考標準,通過自動化測試,校驗迭代發版後的系統性能是否異常
如:響應時間、吞吐量、負載能力、資源使用率(cpu、內存、磁盤IO、網絡IO)
-------------------------------------------------------------
總結
why?不定期宕機、併發、沒人用、提高性能 減少機器 節約錢
when?編碼後上線前,壓測系統極限;上線後,實時監控及時修復
how?
	影響因素:
		cpu,代碼死循環、正則回溯、full gc、線程切換
		內存,小而快,jvm堆存儲java對象 --> 內存溢出
		磁盤,大而慢,讀寫速度 :內存 > ssd > 磁盤
		網絡,數據包大/併發高--> 增加帶寬
		異常,異常棧 耗性能
		數據庫,讀寫併發 導致 磁盤IO
		鎖競爭,上下文切換 耗性能 --> 減少鎖競爭,鎖粒度細化
	衡量指標
		響應時間:db -->  server端 --> nginx -->  網絡 --> client
		吞吐量
			磁盤***:IOPS(頻率)+數據吞吐量(大小)
			網絡***:網卡設置能接受的最大速率
		資源佔用率:cpu、內存、磁盤IO、網絡IO等
		系統極限:通過壓測,觀察系統響應時間是否平緩增漲,至極限

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章