kernel: fmsedge[18328]: segfault at 0000000000000000 rip 0000003a31e7f808 rsp 00007fffb772b1

最近有一臺業務機頻繁down機,重啓後查看系統日誌,發現如下內容

Nov 25 15:43:09 dgtests Server[18328]: Shared memory heap (__FCS__serverstats_) has exceeded 90 usage. Consider increasing the heap size to prevent future memory allocation failures.
Nov 25 15:43:09 dgtests last message repeated 2 times
Nov 25 15:43:09 dgtests kernel:fmsedge[18328]: segfault at 0000000000000000 rip 0000003a31e7f808 rsp 00007fffb772b1e8 error 6

從字面意義上分析,這個是由於內存訪問越界造成的,不管是用戶態程序還是內核態程序訪問越界都會在log日誌message文件中記錄,

Nov 25 15:43:09 dgtests kernel:fmsedge[18328]: segfault at 0000000000000000 rip 0000003a31e7f808 rsp 00007fffb772b1e8 error 6 

這裏kernel前面的dgtest爲主機名,後面的fmsedge爲程序名,segfault at 0000000000000000 rip 0000003a31e7f808 rsp 00007fffb772b1e8 爲訪問越界的地址以及當時進程堆棧地址等信息,最後的是error number,這裏的error number 爲 6 ,計算機中二進制表達爲 110 , 即 bit2=1, bit1=1, bit0=0, 按照上面的解釋,我們可以得出這條信息是由於用戶態程序寫操作訪問越界造成的,結論的得出基於下面的理論:

bit2: 值爲1表示是用戶態程序內存訪問越界,值爲0表示是內核態程序內存訪問越界
bit1: 值爲1表示是寫操作導致內存訪問越界,值爲0表示是讀操作導致內存訪問越界
bit0: 值爲1表示沒有足夠的權限訪問非法地址的內容,值爲0表示訪問的非法地址根本沒有對應的頁面,也就是無效地址


結合 110 進行分析,我們的錯誤爲 用戶態程序寫操作訪問越界造成 ,這裏標記一下,以作爲以後分析使用。


發佈了60 篇原創文章 · 獲贊 8 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章