本期主講:湯金城,多年從事移動互聯網相關運維工做,帶領團隊維護數百臺服務器,擁有豐富的故障排查和性能優化實戰經驗,擅長業務拆分,高可用架構設計。php
你們好,我叫湯金城,今天和你們分享一下我在公司業務方面故障排查遇到的一些坑,以及進行性能調優的解決方法。記得剛來公司接手業務的時候,IT架構亂的一塌糊塗,前任留下來不少坑:服務器資源緊張,初期架構沒考慮擴展性等等,不過對於初創企業來講這些問題都是正常的。html
故障的及時發現與實時分析前端
首先來說下公司初期的一個需求,由於公司對業務很重視,因此領導須要第一時間瞭解故障緣由是什麼以及怎樣作才能預防故障的再次發生。前期我考慮的就是監控日誌,經過實時分析日誌發現問題,開始咱們使用的是一款python寫的開源工具ganglia-logtailer,至關於對log進行tail實時獲取並截取想要的信息進行監控,可是一段時間後發現這種工具的效率不高,而且數據並非很準確。python
而後就用了ELK,採用Logstash進行數據採集,存入redis,再由logstash從redis獲取數據,中間進行一個過濾以及分析,存入到elasticsearch,經過kibana進行數據展現,同時logstash還能夠對獲取的數據進行監控以及郵件報警。nginx
經過上面這種方式,確實能對後端服務器、存儲等設備的故障和系統信息進行統計,但不少業務故障並不單純是內部IT系統問題形成的,咱們常常發現前端出現掉流量,掉訪問的現象,然後端運行徹底正常,經過這種內部監控是找不出緣由的,這時候就須要考慮一些外部緣由了。redis
下面給你們看一些故障排查案例:後端
實例1:服務器計算時長
有一段時間,每到晚上業務最高峯網站訪問都會變慢,從內網並沒看出什麼明顯訪問異常,那時候剛上了監控寶,因而就部署上了監控外部分析,白天都很正常,一到晚上業務高峯期報警就增多了。監控寶的分析作的還不錯,是基於curl來作的監控,curl自己就能夠打印出相關鏈接時間 ,監控寶的響應時間報告包括一下參數:緩存
DNS域名解析時間:訪問網站的第一步就是DNS解析,若是這個時間消耗長,就得看看是否是DNS解析商那塊出了問題; 性能優化
創建鏈接:TCP三次握手創建鏈接的時間,若是5秒內沒法創建鏈接,就會報沒法鏈接服務器;
服務器計算:監控服務器的處理能力;
內容下載:網頁內容下載到本地的時長;服務器
經過以上報警能夠看出訪問消耗在了服務器計算能力上,那麼很明顯仍是服務端的問題,因而又對服務器進行了一次檢查,此次着重檢查了服務器配置,結果發現被入口的nginx給坑了,nginx有個worker_connections參數,早期服務器沒什麼訪問量的時候設置的比較低,只設置了8000,難怪每到晚上estab鏈接數最高就到32000左右,從未看到飆到32000以上,因而將worker_connections調到對應的數,這個問題就解決了,後面訪問量天然就漲上去了,相比之前訪問峯值PV漲了足足45%。
實例2:移動用戶沒法訪問網站
上面是4月21日交換機的入口出口圖,在20點整的時候出現一個流量的掉坑,根據這張圖能夠很明顯的看到流量在進來的時候就已經減小了,這個時候內部監控系統卻沒發現有其餘異常,下面再看下nginx的入口出口圖:
能夠很明顯的看到流量進來就減小了,形成出去的流量減小,那麼問題確定出在外部。
這是監控寶的告警信息,能夠很明顯的看到4月21日20點以後,持續25分鐘的移動用戶節點沒法訪問。
這時候就不是咱們的問題,而是機房的事了,立刻打電話給機房反饋狀況,機房幫咱們作了路由優化以後故障獲得解決,整個過程持續了將近20分鐘。
性能的優化
在我看來,性能優化和監控是分不開的,如今關於優化的配置很是多,適合本身的纔是最好的。我一般會在修改配置後,先進行壓力測試,而後觀察內部監控、外部監控的性能表現進行調整。這裏給你們推薦一些經常使用的系統參數:
net.ipv4.tcp_fin_timeout = 30
net.core.somaxconn = 8196
net.ipv4.tcp_max_syn_backlog = 8196
net.ipv4.ip_local_port_range = 1024 65000
再強調一次,由於每一個公司的業務場景都不同,只有瞭解了本身業務的真實需求才能針對性的進行性能調優,千萬不要盲目對照別人的參數去調整配置,以上參數對咱們的業務來講是最優的,但可能在某些業務場景下反而會影響性能。因此建議你們先留一份原有參數的備份,若是調試有問題能夠回滾。
下面給你們分享幾篇乾貨,都是關於time_wait tcp listen backlog這些受爭議的參數,你們能夠參考,而後本身作調整,記得先對照參數備份原有參數,另外有些參數sysctl -p後生效時間可能要2到5分鐘。
http://mp.weixin.qq.com/s?__biz=MzA3MzYwNjQ3NA==&mid=403319808&idx=1&sn=ddae082f5b844d040b9ab23c9c0eb778&scene=23&srcid=0311SD5dPUGnPq7sTqzC2vHn#rd
http://mp.weixin.qq.com/s?__biz=MzA3MzYwNjQ3NA==&mid=403232978&idx=1&sn=4ed396ac1999add1c866419bd62b0e75&scene=23&srcid=0307e64zzFVkDViC4iDlvIbD#rd
http://dngood.blog.51cto.com/446195/988968
http://blog.hellosa.org/2011/04/21/tcp-kernel-nat.html
http://www.udpwork.com/item/6909.html
http://blog.csdn.net/largetalk/article/details/16863689
https://www.douban.com/note/178129553/
http://mp.weixin.qq.com/s?__biz=MjM5NzUwNDA5MA==&mid=201005717&idx=1&sn=74036633114ee6212e57ee4576dbfcbc&3rd=MzA3MDU4NTYzMw==&scene=6#rd
http://www.cnxct.com/something-about-phpfpm-s-backlog/
還有更多的乾貨這裏就不方便貼出了,有須要的能夠找我要。以上就是今天的分享,若有不足之處請你們多多包涵。
問:你如今外部監控是怎麼作的?
答:目前外部監控咱們經過監控寶監控了靜態頁面和動態頁面,靜態頁面監控個人緩存服務器,動態頁面監控的後端服務器。咱們主要是URL監控,若是大家API使用比較多,也能夠用監控寶進行API監控。此外,監控寶也提供內部系統監控的,採用agent方式對系統所關注的應用組件性能作監控,並不比zabbix差,並且還支持電話報警。
問:請問運維和領導溝通有什麼技巧嗎?
答:直接曬數據最有力,領導喜歡看數據報告,要把各個方面的性能圖和數據給他看,而後給他挑刺,用數聽說話抵得上千言萬語。不過這須要作到全面的監控,纔可能獲取有說服力的完整數據,特別是隨着業務的增加,之前遺留下的一些問題在量小的時候並不怎麼明顯,訪問壓力大了纔會爆發出來,這時候若是有先後的對比分析,就可讓領導爲業務增加買單。
問:那數據用什麼樣的方式呈現比較好?
答:固然是圖表,監控寶提供一些基礎數據的圖表,若是但願根據本身的業務定製圖表,可使用ganglia集羣監控,搭建方便,模塊多,圖形很是適合分析排查故障。
問:那能不能稍微總結下,對一個初創公司來講,有哪些工做是從一開始就必需要作的?答:壓測和監控是構建彈性、高可用IT架構的基礎,雲智慧的監控寶、透視寶和壓測寶正好從不一樣的角度解決這個性能問題,並且SaaS模式也比較適合初創企業,你們能夠試試。