線上出問題了,怎麼辦?

出了問題,不要慌!打開手機,發個朋友圈!

然後,順便打包好個人物品,抱着出去就行了!

哦哦!

上線前拜四阿哥,假期前拜佛祖,天靈靈地靈靈!

家人們,這不是危言聳聽。線上無小事,開不得玩笑的啊!

一、快速恢復

還是那句話,出了問題不要慌,冷靜,保持冷靜。

首要記住一個原則:快速恢復。

image

時至如今,有一定規模的公司,後臺服務狀態監控各方面都做得很完善。日誌系統、監控系統什麼的,一般情況下,異常信息能很快速的展現在開發者眼前。

因此,趕緊馬不停蹄的根據現象快速界定問題範圍。然後,找到功能負責人,由負責人具體處理。畢竟沒有誰比負責人更熟悉相關的業務邏輯。當然,可能你就是那個負責人,自己發現,自己解決,嘔吐啊!

周知業務各個關聯方:產品悉知產品狀態;測試就位協助問題再現及後續驗證;上一級負責人做好隨時協調外部支持資源,溝通應對上層(尤爲重要啊,不要試圖掩蓋,不聲不響,消弭於無聲是不可能的!)。

確定下是不是因爲線上變動引起的問題,比如上線啊,配置變動,數據變動啥的。對於研發流程不甚規範的公司來說,不測試就上線,隨意變動線上配置,後臺修改線上數據庫數據等等都是很常見的。

如果是,那麼立刻做狀態恢復,回滾變動。這樣算是最快速高效解決辦法了。也算是最容易解決的問題。

這種前提下,還有一種情況是是,因爲涉及很多關聯方的需求,不能回滾恢復!天啦擼,不回滾被罵死,回滾被揍死有沒有。腫麼辦呢,還能怎麼辦,趕緊加補丁,快速驗證快速上線修復。

如果不是變動引起的問題,那麼就需要具體問題,具體分析,找問題原因了。

  • 流量變大,服務能力不足了:加節點、加節點,橫向擴展堆機器。

  • 消息堆積,消費能力不足了:加消費者,加消費者,多張嘴就好了。

  • 服務網絡風暴了,抖動了:不是業務服務的問題,找 SRE,拼命催它們。大羣拼命 @ 它們。

  • ... ...

二、問題定位

上面所說的快速恢復都是針對能夠快速界定問題原因的情景。但是,很多時候你會發現,那些原因都排除了,問題還在,還在。

還在不是回聲,是抓耳撓腮,我很無奈啊!

好吧,一套流程走起來:保留現場,查資源佔用,查堆棧信息、查 gc 等等。

1、找到進程 id

jps:jps

ps aux | grep java

ps

top:

top

2、找到線程 pid

top -Hp 進程pid

top

快捷鍵“R”進行排序,可以通過快捷鍵“H”查看幫助信息。

快捷鍵“1” 查看每個cpu使用情況:

topx

3、查看 gc 情況

jstat -gc 進程pid

jstat

也可以加額外的參數循環輸出:jstat -gc 進程pid 間隔時間 輸出次數

jstatx

4、線程 pid 轉化爲進制

printf '0x%x' 線程pid

printf

5、查看線程堆棧

jstack 進程pid | grep 轉化後的線程pid

jstack

6、io 情況查看:

vmstat:

vmstat

“r”:運行中;“b”:io block等待。

7、查看 jvm 信息

jinfo 進程 pid

jinfo

8、old 區實例查詢:

jmap -histo pid | sort -n -r -k 2 | head -10

jmap

三、關於研發流程

其實最好的問題解決方法就是避免問題的出現。

不要去依賴每個人自己的自律性,也不要相信人性。有時候冷酷的規定,制度、流程反而是規避問題的最佳手段。

或許你也聽過,每個看似荒唐的規定背後,都有一段不堪回首的往事。

image

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章