1、針對這個題目咱們能夠簡單理解成是server端出現的問題,而不是client端出現了問題(用戶網絡很差包括域名服務器解析等可能),固然面試官要考你用戶端的知識,例如域名解析,也是有挺多能夠考到的知識點,但單就這個問題,更強調的是server端的知識點。下面逐一來剖析可能的緣由:前端
(1)可能的緣由一:服務器出口帶寬不夠用。這是一個很常見的瓶頸。一方面,多是自己購買的服務器出口帶寬就很小(企業購買帶寬至關昂貴),一旦用戶訪問量上來了,併發量大了,天然均分給用戶的出口帶寬就更小了,因此某些用戶的訪問速度就會降低了不少。另外一個,就是跨運營商網絡致使帶寬縮減,例如不少公司的網站(服務器)是放在電信的網絡上的,而若是用戶這邊對接的是長城或者說聯通的寬帶,運營商之間網絡傳輸在對接時是會有限制的,這就可能致使帶寬的縮減。mysql
(2)可能緣由二:服務器負載過大忙不過來,好比說CPU和內存消耗完了,這個容易理解,不展開。web
(3)可能緣由三:網站的開發代碼沒寫好,例如mysql語句沒有進行優化,致使數據庫的讀寫至關耗費時間。面試
(4)可能緣由四:數據庫的瓶頸,也是很常見的一個瓶頸,這點跟上面第三個緣由能夠一塊兒來講。當咱們的數據庫變得愈發龐大,好比好多G好多T這麼大,那對於數據庫的讀寫就會變得至關緩慢了,索引優化當然能提高一些效率,但數據庫已經如此龐大的話,若是每次查詢都對這麼大的數據庫進行全局查詢,天然會很慢。這個學過數據庫的話也是挺容易理解的。sql
2、針對上面可能的緣由,有哪些方法和工具去檢測呢:數據庫
(1)某個用戶反饋網站訪問變慢,怎麼去定位問題。首先你本身也打開下網站,看是否會出現用戶反映的問題,若是你這邊訪問沒問題,那就多是用戶那邊的問題了,這塊就是要先肯定是用戶那一方的問題仍是自身好比說服務器或者網站的問題。瀏覽器
(2)發現確實是本身服務器或者網站的問題,那麼能夠利用瀏覽器的調試功能(通常瀏覽器都會有),調試網絡看看各類數據加載的速度,哪一項消耗了多少時間均可以看到,是哪塊數據耗時過多,是圖片加載太慢,仍是某些數據加載老半天都查不出來。緩存
(3)而後針對服務器的負載狀況,能夠去查看下服務器硬件(網絡帶寬、CPU、內存)的消耗情況。帶寬方面查看流量監控看是否是已經到了峯值,帶寬不夠用了,若是是公司本身買服務器搭的網站服務器的話,須要本身搭建監控環境;若是用的是阿里雲騰訊雲這些的,那這些平臺那邊會提供各方面的監控好比CPU、帶寬等等,在後臺就能夠看到了。服務器
(4)若是發現硬件資源消耗都不高,都比較充裕,那要去看看是否是程序的問題了。這個能夠經過查日誌來找,好比PHP日誌、Apache日誌、mysql日誌等等的錯誤日誌,特別如mysql有個慢查詢的日誌功能,能夠看到是否是某條mysql語句特別慢,若是某條語句花的時間太長,那這條語句頗有可能有問題。網絡
(5)至於說到的數據庫太龐大,這個直接看就看獲得了,好比一個表的文件大小變得特別大了。
3、針對上面的這些問題,有哪些解決和優化的辦法呢:
(1)出口帶寬的問題,這個很簡單,加帶寬,有錢就多買帶寬,很簡單。
(2)mysql語句優化,開發人員職責。
(3)數據庫太龐大,爲了讀寫速度,進行「拆表」、「拆庫」,就是把數據表或者數據庫進行拆分。
(4)上面的拆庫拆表都是針對數據庫實在太龐大才會這樣作,通常在此以前會有其餘優化方法,好比mysql的主從複製,一臺主服務器專門用於寫,而後其餘從服務器用來讀,寫完以後會同步更新到其餘讀的服務器中。例如阿里的雙十一活動,都不知道用了多少萬臺服務器一塊兒在扛着。
(6)還有這幾年用得比較多的非關係型數據庫,它使用了緩存機制,它把數據緩存到了內存,用戶訪問數據直接從內存讀取,讀取速度就比在磁盤中讀取快了不少,還有它的一個key-value讀取機制,這個聽師兄說以後沒聽懂。
(7)CDN(content-delivery-network:內容分發網絡),雞蛋放在多個籃子裏,把數據放在離用戶更近的位置(例如網站的一些靜態文件好比圖片或者js腳本),用戶訪問時判斷IP來源是廣州,那就經過智能DNS解析到廣州的服務器上,直接從廣州的籃子裏去獲取數據,速度就快了。這裏有個靜態數據和動態數據的概念,例如圖片和一些js文件通常是不變的,那就能夠把它們的映像分佈到全國各地,加快速度,而一些須要在網站後臺動態產生的一些數據,則須要去到網站所在的服務器去產生並獲得。這個涉及到兩種數據的顯示的問題,這就交由瀏覽器處理了。同時異步加載的技術例如前端的Ajax技術,異步請求數據,可使這些動態數據延遲加載,這塊本身不怎麼了解,可能表述很差。前端開發的人員應該更懂一些。
(8)上面都沒有說到架構的優化,若是網站扛不住,是否是網站架構已經不能適應了,好比作個小博客把數據庫服務器和web服務器都用同一臺服務器,那全部負載都在同一臺服務器上了。可是訪問量上來扛不住了,就得加服務器了,就得在架構上優化了,好比在數據庫上作集羣,在web服務器上也作集羣,好比web服務器集羣,在服務器前面加一個負載均衡,負載均衡就是專門負責分發,把用戶的請求均勻分佈到各個服務器上。
---------------------
此篇隨筆只是本身補充學習,積累知識用,原做者信息以下。
做者:Victor_Lv_ 來源:CSDN 原文:https://blog.csdn.net/lv_victor/article/details/53148421