QPS:query per second, 1秒內完成的請求數
RT:response time, 1個請求完成的時間
Throughput越大,Latency會越差。由於請求量過大,系統太繁忙,因此響應速度天然會低
Latency越好,能支持的Throughput就會越高。由於Latency短說明處理速度快,因而就能夠處理更多的請求緩存
最佳線程數量=((線程等待時間+線程cpu時間)/線程cpu時間) * cpu數量
線程過多,時間消耗長,並非說代碼執行效率降低了,而是資源的競爭,致使線程等待的時間上升了,線程越多消耗內存越多,過多的線程直接將系統內存消耗殆盡服務器
平均響應時間 = (併發線程數/最佳線程數) * 最佳線程數的響應時間併發
總QPS=線程數*單個線程的QPS性能
(1)調優的目的是高效地使用資源,儘量地使用最多的資源,從而提升性能優化
(2)任何資源都要查看是資源使用率滿了,仍是沒有高效使用資源
例如CPU使用率高,是由於算法問題(死循環,低效算法),仍是由於程序自己就須要這麼多CPU。若是CPU使用率低,則查看是由於資源等待仍是線性操做。
又如I/O,wa低下,也有可能I/O的問題(固然不是硬件問題),wa低下表明磁盤的使用率低下。這時要看究竟是程序自己不怎麼使用磁盤,仍是沒有高效使用(大量隨機操做,而不是批量操做,順序寫入,使用緩衝等)線程
(3)若是要提高服務器端的響應時間RT
採用減小IO的時間能達到最佳效果,好比合並多個IO請求
減小IO的調用次數:併發HTTP請求(無上下文依賴,多個鏈接,一個線程)、HTTP鏈接池(長鏈接)
減小CPU的使用時間
使用緩存進程
(4)若是要提高QPS
採用優化CPU的時間能達到最佳效果,同時能夠加大線程數
減小CPU的使用時間
增長CPU的數量
減小同步鎖
若是CPU不能被壓到85%以上,而且此時的QPS已經達到了峯值,則說明另有瓶頸內存
CPU工做模式
一臺服務器看卡不卡,關鍵在於程序的運行,程序的運行又取決於執行代碼時CPU的運行速度和效率,程序的運行原理是代碼向CPU提出請求調用資源資源