如何解決在伺服器維護中處理高並發所導致的一些常見問題
這裡還是按照場景來吧,畢竟場景是最能體驗實用性的。首先說下伺服器配置以及環境
阿里雲ECS雲主機,8G內存,4核的CPU,20M頻寬,20G系統盤+200G數據盤,CentOS6.564位,安裝的一件集成lnmp環境
場景:微信發紅包
這個場景是很常見的,一般客戶會在整點的時候進行一次微信公眾號的廣告推送,這兒時候伺服器的並發大概在3000到5000左右。說起來這其實不算高並發,但伺服器還是崩了,大概要等5分鐘才能恢復正常。這有點不應該啊,分析原因。查看CPU的使用率不高,記憶體使用也很正常,在阿里雲控制面板裡面查看網路出口流量滿載,問題大概是清楚了,網路原因導致。
先查看靜態資源,發現圖片大部分沒有優化,於是脫下來進行無損壓縮,大概省略了1M左右的大小,提交上去後依然崩潰,伺服器頻繁出現502。
再次檢查頁面的靜態資源css和js,把常用的js庫替換成CDN以減少請求數,提交後依然沒有太多變化,502依舊。
於是查看nginx連線數,使用指令
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
結果顯示
TIME_WAIT 3828SYN_SENT 1FIN_WAIT1 107FIN_WAIT2 27ESTABLISHED 661SYN_RECV 23CLOSING 15LAST_ACK 284
乖乖,TIME_WAITE很高,這裡務必說下TIME_WAITE的意思:TIME_WAIT:另一邊已初始化一個釋放。這個是啥意思呢?意思是伺服器已經主動關閉了,在等待客戶端給一個回應,如果客戶端一直沒有回應就會出現等待,這個值就會增加。很顯然,這個時候我們需要減少TIME_WAIT的值。
這裡只需要修改sysctl.conf的一些參數即可,編輯/etc/sysctl.conf文件,檢查
是否是這樣的設置,如果找不到對應的,在文件最後加上即可。儲存後執行
/sbin/sysctl -p
配置即可生效。
20分鐘後繼續查看nginx連線數,結果
TIME_WAIT 87SYN_SENT 1FIN_WAIT1 60FIN_WAIT2 19ESTABLISHED 477SYN_RECV 12CLOSING 2LAST_ACK 100
恢復正常,網路頻寬也降下來了。
但好景不長,第二次整點開始搶紅包的時候又出現了502。查看進程發現mysqld的CPU佔用率很高,導致CPU滿載,伺服器崩潰。修改mysql配置文件,調整max_connection為30000。其他相關參數進行了調整優化,情況有所緩解,但是短短幾分鐘之內CPU又滿載了。
詭異!於是查看mysql中的進程,發現頻繁的sql查詢,而查詢的幾個表資料量均在10萬左右,判斷是因為沒有設定索引導致。諮詢後端開發,果然只設定了主鍵。立刻修改,提交上去五分鐘後CPU降下來,穩定在10%左右,也沒有出現過502了。
以上是如何解決在伺服器維護中處理高並發所導致的一些常見問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

並發和協程在GoAPI設計中可用於:高效能處理:同時處理多個請求以提高效能。非同步處理:使用協程非同步處理任務(例如傳送電子郵件),釋放主執行緒。流處理:使用協程高效處理資料流(例如資料庫讀取)。

使用Java函數的並發和多執行緒技術可以提升應用程式效能,包括以下步驟:理解並發和多執行緒概念。利用Java的並發和多執行緒函式庫,如ExecutorService和Callable。實作多執行緒矩陣乘法等案例,大幅縮短執行時間。享受並發和多執行緒帶來的應用程式響應速度提升和處理效率優化等優勢。

本站7月23日消息,華碩推出多款由AMDEPYC霄龍4004系列處理器驅動的伺服器與工作站級產品。本站註:AMD於5月推出AM5平台、Zen4架構的EPYC霄龍4004系列處理器,最高提供16核心3DV-Cache規格。 ASUSProER100AB6伺服器ASUSProER100AB6是一款搭載EPYC霄龍4004系列處理器的1U機架式伺服器產品,適用於IDC及中小型企業需求。 ASUSExpertCenterProET500AB6工作站ASUSExpertCenterProET500AB6是一款A

事務確保資料庫資料完整性,包括原子性、一致性、隔離性和持久性。 JDBC使用Connection介面提供交易控制(setAutoCommit、commit、rollback)。並發控制機制協調並發操作,使用鎖或樂觀/悲觀並發控制來實現事務隔離性,以防止資料不一致。

如何在伺服器上安裝PHPFFmpeg擴充功能?在伺服器上安裝PHPFFmpeg擴充功能可以幫助我們在PHP專案中處理音視訊文件,實現音視訊文件的編解碼、剪輯、處理等功能。本文將介紹如何在伺服器上安裝PHPFFmpeg擴展,以及具體的程式碼範例。首先,我們需要確保伺服器上已經安裝了PHP以及FFmpeg。如果沒有安裝FFmpeg,可以依照下列步驟安裝FFmpe

原子類是Java中的執行緒安全類,可提供不可中斷的操作,對於確保並發環境中資料的完整性至關重要。 Java提供了以下原子類別:AtomicIntegerAtomicLongAtomicReferenceAtomicBoolean這些類別提供了取得、設定和比較值等方法,確保操作是原子的,不會被執行緒打斷。原子類在處理共享資料和防止資料損壞時非常有用,例如維護共用計數器的並發存取。

Go函數中的高效並行任務處理:使用go關鍵字啟動並發例程。使用sync.WaitGroup計數未完成例程的數量。例程完成時呼叫wg.Done()遞減計數器。主程式使用wg.Wait()阻塞,直到所有例程完成。實戰案例:並發發送Web請求並收集回應。
