網站首頁 編程語言 正文
背景:
某天公司突然發現整個網站訪問很慢,請求大部分報502,基本處于宕機狀態....時間大概持續一整晚,導致公司大量的投訴直接造成經濟損失...
網站主要使用的技術棧:
nginx+php+mysql+redis
阿里云ecs
定位問題過程:
第一步就去查看mysql服務器狀況,是否有慢查詢導致,結果是mysql運行良好
第二步查看web服務器服務器情況,內存使用偏高,但整體負載并沒有過紅線
第三步查看redis服務器,服務器負載“運行良好”(這里先打個引號后面詳細說明)
以上我把它稱為排查問題的前置3部曲,檢查問題的基本操作。
結果運維工程師告訴我3步完成后竟然一點問題都沒有,我當時就有點蒙....
開始檢查當天發布的代碼是否有可能出現問題,但當時思緒是沒有目標的,我們就像無頭蒼蠅一樣掃代碼(可想而知沒有大概的范圍是很難解決的,你得告訴開發工程師大概的方向才能定位問題)...
再次督促運維工程師繼續排查...
二次定位問題過程:
檢查nginx訪問日志,全是60秒超時,查看高峰日志最高約1800/秒左右,這時突然想到我們的php-fpm是靜態部署,每臺設置260左右的數量(也就是并發最多260個訪問左右),我們有6臺web 也就是1560(260*6)左右
得出第一結論:我們的web服務器訪問數滿負荷了,吞吐量很低,也就是訪問要排隊了
第一結論的疑問1:為什么訪問接滿負荷web服務器負載沒有超紅線?
原因:260靜態常駐fpm是我們相對服務器內存保守計算得出的值,這個值并沒有超載
第一結論的疑問2:為什么吞吐量很低呢,第一想到的是否mysql慢查詢問題(工程師最容易犯錯的地方),但前面提到我們排查了mysql慢查詢并沒有,那是什么原因照成的呢?
這時運維同學發現新的問題,細化查詢服務器性能發現redis服務器單個cpu100%了,那之前為什么沒查出來服務器有問題呢?原來之前查看的是阿里云的監控界面,該界面是根據平均負載來給出的實時分析,而這臺服務器是雙核服務器,平均一下是正常的....掉坑了!大家都知道redis是單核的,還有一個cpu是空閑的。
終于定位到問題”來源“了:redis服務器cpu100%。
我們緊接著查看redis的當前狀態,發現key的數量有500萬+,日常我們只有30W左右,雖然如此但是內存其實并沒有超過境界線
引發了我們新的一輪思考,是什么引起cpu100%的?為什么內存沒有超標而是cpu超了?
為了先快速解決當前的窘境我們決定先嘗試清空redis看是否能恢復網站(因為我們的業務代碼對redis并沒有很強的依賴),畢竟快1分鐘解決就是少損失一分錢,運維執行清空后,網站恢復了正常。
臨時解決方案:備份redis,清空redis(flushall)
雖然問題”解決“了,但是我們還沒有找到問題的根源,于是下定決心必須搞清楚,接下來就是探索和試驗,時間和篇幅長度問題準備再下一篇中具體說明。
原文鏈接:https://blog.csdn.net/weixin_44753686/article/details/88385697
相關推薦
- 2023-10-12 react函數式組件的useEffect
- 2022-09-08 pytorch中Tensor.to(device)和model.to(device)的區別及說明_p
- 2022-05-13 修復ffmpeg寫文件時的幀率異常問題記錄
- 2023-12-24 mybatis-plus代碼生成器使用(generator)
- 2022-07-22 在windows上配置git支持多賬號
- 2022-03-18 C#?利用Autofac批量接口注入依賴的問題小結_C#教程
- 2022-10-12 Docker開啟遠程連接并實現安全通信詳解_docker
- 2022-11-07 pandas中字典和dataFrame的相互轉換_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支