時間的車輪已經滾過了2017,原本是計劃年末12月份結束以前將過去一年的工做和學習總結下,無奈一直託更,看來拖延症仍是沒有改善;趁着2018年到來之時,月初留空,就將這件事情落實下。ios
其實2017年大概就是折騰如下三件事情:數據庫
1、以性能爲相關的工做,這佔用這一年的大部分時間,包括性能測試,性能分析和性能調優。緩存
一、性能測試:這沒什麼好說的,大都是重複的執行,先根據測試需求將測試場景設計好,而後重複執行,找到問題就須要記錄,而後從新執行驗證,挺枯燥的。性能優化
二、性能分析:性能分析的關鍵在於數據的收集,沒有數據收集何來分析呢,大數據分析也是這套路;數據收集又在於監控,針對不一樣的運行環境部署相應的監控配置;待數據收集完畢後,按預期的數據需求來分析數據,服務器的性能分析基本都是看CPU,內存,磁盤和IO,網絡和IO等這些數據。大多數服務器又分爲應用,中間件,數據庫,讓服務器專心幹一種事情。服務器
CPU分析網絡
在觀察CPU性能的時候,按照負載特徵概括的方法,能夠檢查以下清單: 多線程
* 整個系統範圍內的CPU負載如何,CPU使用率如何,單個CPU的使用率呢?
* CPU負載的併發程度如何?是單線程嗎?有多少線程?
* 哪一個應用程序在使用CPU,使用了多少?
* 哪一個內核線程在使用CPU,使用了多少?
* 中斷的CPU用量有多少?
* 用戶空間和內核空間使用CPU的調用路徑是什麼樣的?
* 遇到了什麼類型的停滯週期?架構
這裏列舉了一些系統性能分析工具,調用路徑和停滯週期的分析可使用perf工具,dstat工具也比較經常使用,也可使用DTrace等更靈活的工具。併發
工具函數 |
描述 |
uptime | 平均負載 |
vmstat | 包括系統範圍的CPU平均負載 |
top | 監控每一個進程/線程CPU用量 |
pidstat | 每一個進程/線程CPU用量分解 |
ps | 進程狀態 |
perf | CPU剖析和跟蹤,性能計數器分析 |
更強大的工具可使用火焰圖,火焰圖能夠幫助分析CPU的調用路徑。
內存分析
內存問題檢查清單:
* 系統範圍內的物理內存和虛擬內存使用率
* 換頁、交換、oom的狀況
* 內核和文件系統緩存的使用狀況
* 進程的內存用於何處
* 進程爲什麼分配內存
* 內核爲什麼分配內存
* 哪些進程在持續地交換
* 進程或者內存是否存在內存泄漏?
內存的分析工具以下:
工具 | 描述 |
free | 緩存容量統計信息 |
vmstat | 虛擬內存統計信息 |
top | 監視每一個進程的內存使用狀況 |
ps | 進程狀態 |
Dtrace | 分配跟蹤 |
對於磁盤IO,能夠列出以下等問題來幫助咱們分析性能問題:
* 每塊磁盤的使用率是多少?
* 每塊磁盤上有多長等待隊列?
* 平均服務時間和等待時間時多少?
* 是哪一個應用程序或者用戶正在使用磁盤?
* 應用程序讀寫的方式是怎樣的?
* 爲何會發起磁盤IO,內核調用路徑是什麼樣的?
* 磁盤上的讀寫比是多少?
* 隨機IO仍是順序IO?
Linux對磁盤的性能分析工具主要以下:
工具 | 描述 |
iostat | 各類單個磁盤統計信息 |
iotop、pidstat | 按進程列出磁盤IO的使用狀況 |
perf、Dtrace | 跟蹤工具 |
工具 | 描述 |
netstat | 網絡棧和接口統計信息 |
sar | 統計信息歷史 |
ifconfig | 接口配置 |
perf、Dtrace | TCP/IP棧跟蹤:鏈接、數據包、丟包,延時 |