第50問:從連線判斷應用訪問資料庫的異常行為

張哥說技術發表於2022-12-30

我發現應用有一根訪問資料庫的連線有異常流量,如何判斷是應用哪個邏輯導致了異常行為

實驗

先起鍋燒一個資料庫例項:

第50問:從連線判斷應用訪問資料庫的異常行為

我們用 mysqlslap 作為應用:

第50問:從連線判斷應用訪問資料庫的異常行為

假設在 MySQL 中,我們認為這根連線有異常流量:

第50問:從連線判斷應用訪問資料庫的異常行為

透過 ss 找到這根連線在 mysqlslap 中的控制程式碼號:

第50問:從連線判斷應用訪問資料庫的異常行為

我們透過 strace ,輸出 mysqlslap 使用這根連線的堆疊:

第50問:從連線判斷應用訪問資料庫的異常行為
其中 "-e desc" 表示追蹤所有跟檔案控制程式碼有關的系統呼叫,"-k" 表示列印堆疊
可以看到圖上列印出了控制程式碼3的一次呼叫,是 mysqlslap 在做 drop database 的動作

再挑一個控制程式碼3的堆疊,是 mysqlslap 在做 create database 的動作:

第50問:從連線判斷應用訪問資料庫的異常行為

找到控制程式碼4的對應操作:

第50問:從連線判斷應用訪問資料庫的異常行為
可以看到:
  • 控制程式碼3對應的連線的任務是 create/drop database ,進行測試前後的構建和清理工作。

  • 控制程式碼4對應的連線的任務是 run task ,對資料庫施加任務壓力,我們從資料庫上看到的異常流量,就是來自於這個邏輯。

本次實驗,我們透過連線埠號找到連線控制程式碼,透過連線控制程式碼,定位到連線異常流量的堆疊,能幫助大家定位到業務應用的異常邏輯。

這種方法只適用於 c/c++ 的應用,對於其他語言編寫的應用,我們之後會介紹其他方法來診斷。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024923/viewspace-2930247/,如需轉載,請註明出處,否則將追究法律責任。

相關文章