day16_操做系統總體複習01

分析性能問題思路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   

一、工做模式

這三種模式的不一樣之處以下:
  • BIO:
一個線程處理一個請求。缺點:併發量高時,線程數較多,浪費資源。
Tomcat7或如下,在Linux系統中默認使用這種方式。
  • NIO:
利用Java的異步IO處理,能夠經過少許的線程處理大量的請求。
Tomcat8在Linux系統中默認使用這種方式。
Tomcat7必須修改Connector配置來啓動:
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" 
         connectionTimeout="20000" redirectPort="8443"/> 
  • APR:
即Apache Portable Runtime,從操做系統層面解決io阻塞問題。
Tomcat7或Tomcat8在Win7或以上的系統中啓動默認使用這種方式。
Linux若是安裝了apr和native,Tomcat直接啓動就支持apr。(安裝方法:http://www.cnblogs.com/nb-blog/p/5278502.html)
 
官方對這三種的區別的詳細說明:
                  Java Blocking Connector   Java Nio Blocking Connector   APR/native Connector 
                             BIO                         NIO                       APR 
Classname                AjpProtocol               AjpNioProtocol           AjpAprProtocol 
Tomcat Version           3.x onwards                 7.x onwards              5.5.x onwards 
Support Polling              NO                          YES                       YES 
Polling Size                 N/A                   maxConnections             maxConnections 
Read Request Headers      Blocking                  Sim Blocking                   Blocking 
Read Request Body         Blocking                  Sim Blocking                   Blocking 
Write Response            Blocking                  Sim Blocking                   Blocking 
Wait for next Request     Blocking                  Non Blocking               Non Blocking 
Max Connections        maxConnections              maxConnections             maxConnections 
 Tomcat啓動的時候,能夠經過log看到Connector使用的是哪種運行模式:
  • Starting ProtocolHandler ["http-bio-8080"]
  • Starting ProtocolHandler ["http-nio-8080"]
  • Starting ProtocolHandler ["http-apr-8080"]

二、鏈接池—線程池是否會有排隊、阻塞的狀況,看看鏈接池是否用滿。

三、長鏈接—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高性能 第三版」。

相關文章
相關標籤/搜索