經典面試題:用戶反映你開發的網站訪問很慢可能會是什么原因

原文鏈接:http://blog.csdn.net/lv_victor/article/details/53148421

?

問題場景:某個用戶向你反映說你開發的網站訪問速度很慢,但是該用戶訪問其他問題很正常,分析下原因、有哪些工具分析原因、怎么解決問題?

最近面試兩次碰到了這個題目,回來請教了一位做運維的師兄,聽他講解下發現確實這個問題可以牽涉到很多知識面,很具綜合型,是個好題目,不過其實這個問題偏運維,但開發人員自然也是越懂越好。結合這位師兄的詳細講解,我梳理了下這個問題牽涉到的一些點。

一、針對這個題目我們可以簡單理解成是server端出現的問題,而不是client端出現了問題(用戶網絡不好包括域名服務器解析等可能),當然面試官要考你用戶端的知識,例如域名解析,也是有挺多可以考到的知識點,但單就這個問題,更強調的是server端的知識點。下面逐一來剖析可能的原因:

(1)可能的原因一:服務器出口帶寬不夠用。這是一個很常見的瓶頸。一方面,可能是本身購買的服務器出口帶寬就很小(企業購買帶寬相當昂貴),一旦用戶訪問量上來了,并發量大了,自然均分給用戶的出口帶寬就更小了,所以某些用戶的訪問速度就會下降了很多。另一個,就是跨運營商網絡導致帶寬縮減,例如很多公司的網站(服務器)是放在電信的網絡上的,而如果用戶這邊對接的是長城或者說聯通的寬帶,運營商之間網絡傳輸在對接時是會有限制的,這就可能導致帶寬的縮減。

(2)可能原因二:服務器負載過大忙不過來,比如說CPU和內存消耗完了,這個容易理解,不展開。

(3)可能原因三:網站的開發代碼沒寫好,例如mysql語句沒有進行優化,導致數據庫的讀寫相當耗費時間。

(4)可能原因四:數據庫的瓶頸,也是很常見的一個瓶頸,這點跟上面第三個原因可以一起來說。當我們的數據庫變得愈發龐大,比如好多G好多T這么大,那對于數據庫的讀寫就會變得相當緩慢了,索引優化固然能提升一些效率,但數據庫已經如此龐大的話,如果每次查詢都對這么大的數據庫進行全局查詢,自然會很慢。這個學過數據庫的話也是挺容易理解的。

二、針對上面可能的原因,有哪些方法和工具去檢測呢:

(1)某個用戶反饋網站訪問變慢,怎么去定位問題。首先你自己也打開下網站,看是否會出現用戶反映的問題,如果你這邊訪問沒問題,那就可能是用戶那邊的問題了,這塊就是要先確定是用戶那一方的問題還是自身比如說服務器或者網站的問題。

(2)發現確實是自己服務器或者網站的問題,那么可以利用瀏覽器的調試功能(一般瀏覽器都會有),調試網絡看看各種數據加載的速度,哪一項消耗了多少時間都可以看到,是哪塊數據耗時過多,是圖片加載太慢,還是某些數據加載老半天都查不出來。

(3)然后針對服務器的負載情況,可以去查看下服務器硬件(網絡帶寬、CPU、內存)的消耗狀況。帶寬方面查看流量監控看是不是已經到了峰值,帶寬不夠用了,如果是公司自己買服務器搭的網站服務器的話,需要自己搭建監控環境;如果用的是阿里云騰訊云這些的,那這些平臺那邊會提供各方面的監控比如CPU、帶寬等等,在后臺就可以看到了。

(4)如果發現硬件資源消耗都不高,都比較充裕,那要去看看是不是程序的問題了。這個可以通過查日志來找,比如PHP日志、Apache日志、mysql日志等等的錯誤日志,特別如mysql有個慢查詢的日志功能,可以看到是不是某條mysql語句特別慢,如果某條語句花的時間太長,那這條語句很有可能有問題。

(5)至于說到的數據庫太龐大,這個直接看就看得到了,比如一個表的文件大小變得特別大了。

三、針對上面的這些問題,有哪些解決和優化的辦法呢:

(1)出口帶寬的問題,這個很簡單,加帶寬,有錢就多買帶寬,很簡單。

(2)mysql語句優化,開發人員職責。

(3)數據庫太龐大,為了讀寫速度,進行“拆表”、“拆庫”,就是把數據表或者數據庫進行拆分。

(4)上面的拆庫拆表都是針對數據庫實在太龐大才會這樣做,一般在此之前會有其他優化方法,比如mysql的主從復制,一臺主服務器專門用于寫,然后其他從服務器用來讀,寫完之后會同步更新到其他讀的服務器中。例如阿里的雙十一活動,都不知道用了多少萬臺服務器一起在扛著。

(6)還有這幾年用得比較多的非關系型數據庫,它使用了緩存機制,它把數據緩存到了內存,用戶訪問數據直接從內存讀取,讀取速度就比在磁盤中讀取快了很多,還有它的一個key-value讀取機制,這個聽師兄說之后沒聽懂。

(7)CDN(content-delivery-network:內容分發網絡),雞蛋放在多個籃子里,把數據放在離用戶更近的位置(例如網站的一些靜態文件比如圖片或者js腳本),用戶訪問時判斷IP來源是廣州,那就通過智能DNS解析到廣州的服務器上,直接從廣州的籃子里去獲取數據,速度就快了。這里有個靜態數據和動態數據的概念,例如圖片和一些js文件一般是不變的,那就可以把它們的映像分布到全國各地,加快速度,而一些需要在網站后臺動態產生的一些數據,則需要去到網站所在的服務器去產生并得到。這個涉及到兩種數據的顯示的問題,這就交由瀏覽器處理了。同時異步加載的技術例如前端的Ajax技術,異步請求數據,可以使這些動態數據延遲加載,這塊自己不怎么了解,可能表述不好。前端開發的人員應該更懂一些。

(8)上面都沒有說到架構的優化,如果網站扛不住,是不是網站架構已經不能適應了,比如做個小博客把數據庫服務器和web服務器都用同一臺服務器,那所有負載都在同一臺服務器上了。但是訪問量上來扛不住了,就得加服務器了,就得在架構上優化了,比如在數據庫上做集群,在web服務器上也做集群,比如web服務器集群,在服務器前面加一個負載均衡,負載均衡就是專門負責分發,把用戶的請求均勻分布到各個服務器上。

?

? ? ?內容有點多,師兄給我講完之后自己也一時很難消化,而且有不少東西是自己還沒接觸過或者只有一個概念的。師兄作為一名專業運維人員,知識面確實夠廣啊。

轉載于:https://www.cnblogs.com/feibazhf/p/7583118.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/287740.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/287740.shtml
英文地址,請注明出處:http://en.pswp.cn/news/287740.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《假如編程是魔法之零基礎看得懂的Python入門教程 》——(三)使用初始魔法跟編程魔法世界打個招呼吧

學習目標 完成顯示魔法的使用——輸出print完成傳入魔法的使用——輸入input使魔法生效——運行python文件 目錄 第一篇:《假如編程是魔法之零基礎看得懂的Python入門教程 》——(一)既然你選擇了這系列教程那么我就要讓你聽得懂 第二篇&am…

查缺補漏系統學習 EF Core 6 (一)

推薦關注「碼俠江湖」加星標,時刻不忘江湖事掌握 ORM 開發方式是每一個 .NET 開發者所必備的技能,而且 .NET 平臺有很多優秀的 ORM 框架。很多人都會詬病 .NET 官方標配的 Entity Framework,感覺其笨重難用、性能低下。但其實經過多年發展&am…

mysql 5.5 mysqldump_mysql 5.5 mysqldump 原文翻譯

根據mysql 5.5第6.4章節理解和自己翻譯水平有限如有紕漏請指教,原文如下.6.4 使用mysqldump備份(Using mysqldump for Backups)首先多余的不用說了備份用來干什么大家都清楚。mysqldump備份分兩種輸出形式:1. 無--tab選項,輸出標準的SQL格式。輸出包含CR…

【經典回放】JavaScript學習詳細干貨筆記之(一)

【經典回放】JavaScript學習詳細干貨筆記之(一) 【經典回放】JavaScript學習詳細干貨筆記之(二) 【經典回放】JavaScript學習詳細干貨筆記之(三) 目錄 一、為什么要學JavaScript 二、JavaScript經典案例 …

Java Attach API

catalog 1. instrucment與Attach API 2. BTrace: VM Attach的兩種方式 3. Sun JVM Attach API 1. instrucment與Attach API JDK5中增加了一個包java.lang.instrucment,能夠對JVM底層組件進行訪問。在JDK 5中,Instrument 要求在運行前利用命令行參數或者系…

TCP之三次握手和四次揮手過程

1 TCP包頭里面的標志位 下圖為TCP頭部里面部分信息,入下標志位,每個標志位占一位。 標志位這里會涉及3個,ACK SYN FIN ACK:確認序號有效。 SYN:發起一個新連接。 FIN:釋放一個連接。 2 三次握手過程 第一次握手 Client將標志位SYN置1,隨機產生一個值seq=J,并將數…

Handler 機制分析

android 子線程和UI線程的交互主要使用Handler的方法進行通信。本文分析Handler機制 Handler 如何使用? Handler的使用比較簡單 public class MainActivity extends Activity{private Handler handler new Handler() { public void handleMessage(Message msg) { …

gearman mysql編譯_gearman初探(一、編譯和安裝)

gearman是一個任務分發系統,將計算比較耗時的任務分發給不同的機器專門進行計算,而任務發起的初始程序不必等待這些任務完成就可以返回而繼 續執行。筆者最開始做PHP郵件發送的時候,因為郵件發送耗時比較長,這時PHP腳本就會被阻塞…

《假如編程是魔法之零基礎看得懂的Python入門教程 》——(四)了解魔法百寶箱列表、字典及基本數據類型

學習目標 了解魔法世界中可更改容器——變量了解魔法世界的基本數值類型——字符串、整數了解魔法百寶箱——字典、列表了解列表如何添加值了解字典如何添加值了解字典與列表定義的不同符號 目錄 第一篇:《假如編程是魔法之零基礎看得懂的Python入門教程 》——&…

TCP協議之如何保證傳輸的可靠性

一、問題 TCP協議之如何保證傳輸的可靠性?我們先看下TCP的頭部圖片和TCP頭部的字段 /*TCP頭定義,共20個字節*/ typedef struct _TCP_HEADER {short m_sSourPort;       // 源端口號16bitshort m_sDestPort;       // 目的端口號16bitunsigned int …

【工具篇】在Mac上開發.Net Core需要的工具

微信公眾號:趣編程ACE關注可了解更多的.NET日常開發技巧,如需幫助,請后臺留言;[如果覺得本公眾號對您有幫助,歡迎關注]在Mac上開發.Net Core需要的工具如果您是一個.NET 開發者,想從Windows切換到Mac上開發.NET或者您已…

【Pix4d精品教程】Pix4Dmapper完整航測內業操作流程手把手圖文教程

1. 作業流程圖 2. 原始資料準備 原始資料包括影像數據、POS數據以及控制點數據。 確認原始數據的完整性,檢查獲取的影像中有沒有質量不合格的相片。同時查看POS數據文件,主要檢查航帶變化處的相片號,防止POS數據中的相片號與影像數據相片號不對應,出現不對應情況應手動調…

關于構造函數和this調用的思考

文中一系列思考和內容引發自以下問題:我需要在一個類的構造函數中調用另一個對象的構造函數,并使用this初始化其中的一個引用成員。 主要遇到的問題: 1. 構造函數的初始化列表中能訪問this嗎? 很明顯c創建一個對象分為兩部分&…

mysql semi join_MySQL 5.6 Semi join優化之materialization strategy

8月 24, 2014 |Nix.Huang考慮如下查詢:select * from Countrywhere Country.code IN (select City.Countryfrom Citywhere City.Population > 7*1000*1000)and Country.continentEurope這個子查詢是非相關子查詢,我們能和外層循環獨立的執行它&#x…

【ArcGIS風暴】何為動態投影?這次全面為您揭開ArcGIS中動態投影的神秘面紗!

本課程配套藍光視頻: 【ArcGIS風暴】GIS動態投影問題 GISer們都見過以下警告,該警告的原因是當前加載的數據的坐標系和當前數據框坐標系不一致導致的,核心問題是地理坐標系不一致。如當前數據的坐標系是GCS_Xian_1980,而數據框的坐標系有可能是WGS_1984等,總之跟要加載的數…

《假如編程是魔法之零基礎看得懂的Python入門教程 》——(五)我的魔法竟然有了一絲邏輯

學習目標 了解魔法世界中的結構表現——縮進了解魔法世界的邏輯判斷——if了解魔法世界的多次邏輯判斷——ifelse嵌套了解魔法世界中的邏輯運算——且 and 與或 or 推薦 1.《備受好評的看得懂的C語言入門教程》 目錄 第一篇:《假如編程是魔法之零基礎看得懂的P…

類和類之間的關系

一、類和類之間的關系 UML類圖中,常見以下幾種關系: 1、泛化(Generalization) 是一種繼承關系,比如動物類和老虎類,老虎繼承動物,子類如何特化父類的所有特征和行為 箭頭指向:帶三角箭頭的實線&#xff0…

Java SpringMvc+hibernate架構中,調用Oracle中的sp,傳遞數組參數

一、問題 我們調用數據,大都是可以直接獲取表中的數據,或者用復雜點的sql語句組成的。但是,有時候,當這樣達不到我們要的全部數據的時候,這時,我們就用到了存儲過程【sp】,如果sp需要參數是數組…

js模擬blur

<div></div> 某個事件給div加個屬性 $(div).attr(wait,true); $(div).click(function() { if(false!$(this).attr(wait)) return false; })轉載于:https://www.cnblogs.com/cndxk/p/4788414.html

中國第一朵企業云

本文講的是中國第一朵企業云&#xff0c;【IT168 資訊】算起來&#xff0c;中國中化集團公司的ERP完全運行在“云”上已經一個多月了&#xff0c;每每提到這個“創舉”&#xff0c;信息技術部總經理彭勁松顯得有些興奮&#xff0c;卻仍然很謹慎。作為中國第一家企業云的實踐者&…