1,負載
什么是負載?
正在被CPU調度的進程+等待CPU調度的進程;正在運行的進程+正在io 的進程
怎么看負載?
load average:0.13 0.06 0.01 過去一分鍾的系統的平均負載,過去5分鍾的平均負載,過去15分鍾系統的平均負載
什么樣的負載是OK的?
不超過CPU顆粒數
進程是資源分配的最小單元
線程最小的調度單元
2,CPU
CPU理解?
CPU工人干活的在內存干活,內存相當於車間,數據最終存在磁盤,相當於倉庫
怎么樣的CPU是OK的?
CPU使用率(user+sy)不超過80%
97.4%id>20%,大於20%就是OK的
問題:Tomcat進程在寫日志時消耗的是系統內核進程,消耗的是系統CPU
回答:系統的CPU,系統內核切換的時候消耗的CPU,進程切換的時候,需要保持進程的上下文狀態,進程切換是在內核進行切換的,用到內核的進程,寫磁盤,讀磁盤是消耗系統的進程,從用戶進程切換到系統內核進程,系統內核對進程操作
3,內存 閃存,重啟就沒了,men是內存
Java應用程序沒有內存使用率之說,只有gc頻率以及內存溢出;關心fullgc和內存溢出;因為Java有虛擬機,有最小內存和最大內存,
非Java應用小於80%
4,磁盤 存儲所有數據 iostat -x
磁盤主要看什么?
繁忙程度和隊列
磁盤有哪些指標?
tps:每秒讀,寫磁盤的次數;每秒io的次數
rd_sec/s :每秒讀磁盤的次數 ,讀的比較多說明內存數據不夠,從磁盤讀數據
rd_sec/s:每秒寫磁盤的次數,寫的比較多在寫日志
avgrq-sz:每秒操作扇區的大小
avgqu-sz;磁盤隊列長度,隊列大小長度,就是請求有沒有排隊,不能有大於1;
await:磁盤每次處理的時間,不超過5毫秒,看讀多還是寫多,如果讀多,內存的數據不夠
讀多:數據庫的全表掃描,執行語句,在內存中執行,從磁盤中讀出來,
寫過:就是寫操作比較多,
svctime:磁盤自己處理的時間,
排隊時間:await-svctime
怎么看磁盤是否OK?
單塊磁盤的繁忙程度不超過30%,用nmon命令,看busy 是否超過30%
或者看隊列不能超過1
怎么查看打開文件大小?
open files:1024個
ulimit -n 65535 調整為65535
問題?一個請求的響應時間慢,原因是什么?
首先看響應時間都包括什么?
響應時間就是用戶從發送請求到展示到頁面的時間,也就是前端時間和服務器的處理時間,一般我們都說的是服務器的時間
也就是服務器時間,數據庫時間,網絡時間
划分為web服務器時間,應用其服務器時間,數據庫時間,以及各服務器間通信的網絡時間。
三個方面:
服務器處理:代碼處理邏輯,中間件,操作系統(因為db和web容器運行在操作系統上)硬件資源CPU,io等
網絡
數據庫:執行sql時間sql執行的效率,數據庫執行的快還是慢,看服務器的慢查詢日志,或者把sql拿出來執行一下
負載機---》網絡----》web容器(Tomcat,apache等)是否空閑進程,然后執行代碼,執行到sql語句時,線程掛起,因為等待數據庫返回結果,-----》數據庫執行sql執行時間(數據庫是否有空閑的數據庫連接池,如果沒有進行排隊)
1,請求發起的地方負載機,負載機的配置(負載機的帶寬啥的) client
2,帶寬 網絡
3,web容器線程池是否排隊,web容器是Tomcat,Apache,資源池是否排隊,看是否有空閑的線程,如果排隊到了的話就開始執行代碼---執行到sql語句的話請求(線程或者進程)掛起---------請求請求發到數據庫,數據庫執行sql---執行完后把結果返回
4,數據庫連接池是否排隊,如果有空閑的數據庫連接池
5,sql執行的效率,數據庫執行的快還是慢,看服務器的慢查詢日志,或者把sql拿出來執行一下
6,jvm是否暫停 應用程序線程暫停的
7,代碼的業務邏輯的問題
Nginx多進程,
8,web容器和db都是在操作系統上,硬
緩存和緩沖的區別:
緩存說的是數據,數據從硬盤到內存
緩沖說的是文件,