最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Linux上定位后臺服務(wù)偶發(fā)崩潰的解決方法

 更新時間:2020年11月18日 09:56:40   作者:浩天之家  
在本篇內(nèi)容中小編給大家整理的是一篇關(guān)于Linux上定位后臺服務(wù)偶發(fā)崩潰的解決方法,有需要的朋友們可以學(xué)習(xí)參考下。

問題描述

在最近的后臺服務(wù)中,新增將某個指令的請求數(shù)據(jù)落盤保存的功能。在具體實現(xiàn)時,采用成員變量來保存請求消息代理頭,在接收響應(yīng)以及消息管理類釋放時進(jìn)行銷毀。測試反饋,該服務(wù)偶發(fā)崩潰。

問題分析

測試環(huán)境上運行的是rel版程序,由于在編譯時去掉了調(diào)試信息(-g)以及開啟O3級別優(yōu)化,從崩潰dump的堆棧上,只看到程序崩潰的調(diào)用棧,函數(shù)入?yún)⒌缺粌?yōu)化掉,由于此處沒有打日志,只能想其他辦法來復(fù)現(xiàn)。猜測是重復(fù)釋放指針導(dǎo)致的崩潰,接下來繼續(xù)分析。

rel版本的調(diào)用棧上看,只看見最后銷毀的函數(shù)調(diào)用,而在實際代碼中,有兩處銷毀的函數(shù)調(diào)用入口,為什么在dump中看到的調(diào)用棧順序與實際代碼不一致呢?猜測是開啟O3優(yōu)化,將函數(shù)內(nèi)聯(lián)。

做了以下實驗來分析,

void test_dump()
{
	int* p = NULL;
	*p = 2;		// occur dump
}

void test_f2(int b)
{
	b += 1;
	test_dump();
}

void test_f1(int a)
{
	a+=1;
	test_f2(a);
}

int main()
{
 test_f1(1);
	return 0;
}

在Debug以及Rel模式下,觸發(fā)崩潰,使用gdb來輸出堆棧信息分別如下:

結(jié)論:在Rel模式下,O3級別的優(yōu)化內(nèi)聯(lián)了調(diào)用函數(shù),如果從崩潰點往上回溯有多個可能入口點,那僅憑dump信息不能確認(rèn)是哪個入口觸發(fā)的崩潰。

構(gòu)造測試環(huán)境

通過分析代碼,得知要觸發(fā)可能的多重釋放,需要構(gòu)造一邊創(chuàng)建,一邊銷毀的場景。

創(chuàng)建:可通過測試工具,定時高頻發(fā)送特定指令,觸發(fā)創(chuàng)建流程銷毀:可在定時任務(wù)中,進(jìn)行無效狀態(tài)上報,觸發(fā)銷毀流程為了加快崩潰復(fù)現(xiàn)速度,創(chuàng)建以及銷毀的速度需要合理匹配,如果太快銷毀,會導(dǎo)致無法進(jìn)入創(chuàng)建流程。經(jīng)過分析嘗試,最終設(shè)定測試工具每50毫秒發(fā)送一次,后臺服務(wù)每50ms上報無效狀態(tài)。

為進(jìn)一步驗證崩潰的想法,在銷毀操作等關(guān)鍵路徑添加日志,啟動Rel版來重現(xiàn)。經(jīng)過長時間的測試,獲得了2次寶貴的崩潰dump以及對應(yīng)的日志。每次dump要花費2個半小時甚至更多才能復(fù)現(xiàn),說明這個問題是偶發(fā)問題,很可能與多線程競態(tài)有關(guān)。復(fù)現(xiàn)該問題的時間成本有點高,不過,從獲得的dump以及日志已足以定位問題。

日志分析

同一后臺服務(wù),不同業(yè)務(wù)模塊的日志分布在不同日志文件中,在分析時,需要將各部分日志聚合起來,方便復(fù)現(xiàn)全流程。在聚合時,可以按需截取各模塊的最后若干行日志,每種日志中包含正常以及異常的日志,將其匯總到單一文件,然后結(jié)合代碼進(jìn)行逐行關(guān)聯(lián)分析。

在分析過程中,遇到一些框架方面的疑問,通過詢問相關(guān)同事得到解答。目前的消息收發(fā)框架在接收消息時,先將消息放入線程池的消息隊列,通過信號量來喚醒線程,線程從消息隊列中獲取消息,從消息中取出處理函數(shù)進(jìn)行處理。
在應(yīng)用層處理不同消息時,可能處理同一個變量時,會有發(fā)生競態(tài)。通過對釋放指針的分析,正常釋放指針指都有一定的規(guī)律,當(dāng)觸發(fā)崩潰時,釋放的指針值與正常的值有明顯區(qū)別。

經(jīng)驗小結(jié) 發(fā)現(xiàn)有dump文件時,查看dump文件生成時間,將當(dāng)時的日志以及可執(zhí)行文件,連同dump文件一并放在獨立的文件夾中,便于后續(xù)分析。因為當(dāng)前的日志文件以及可執(zhí)行文件可能被刪除以及更新。每一次問題的解決,都是一次對已有系統(tǒng)的再深入認(rèn)識,理解。構(gòu)造復(fù)現(xiàn)環(huán)境時,要使用Rel版本,且只能通過日志來確認(rèn)程序流程,而不是斷點。在linux上,不能使用嵌套屬性的互斥鎖,它會破壞設(shè)計意圖,讓潛在的死鎖更加難以發(fā)現(xiàn)。讓錯誤盡早暴露好過后續(xù)找錯。大膽假設(shè),小心求證,勝利的曙光終會出現(xiàn)。

到此這篇關(guān)于Linux上定位后臺服務(wù)偶發(fā)崩潰的解決方法的文章就介紹到這了,更多相關(guān)Linux上定位后臺服務(wù)崩潰問題內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Linux磁盤分區(qū)實現(xiàn)原理及方法解析

    Linux磁盤分區(qū)實現(xiàn)原理及方法解析

    這篇文章主要介紹了Linux磁盤分區(qū)實現(xiàn)原理及方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • 安裝CentOS 6.x報錯

    安裝CentOS 6.x報錯"Disk sda contains BIOS RAID metadata"解決方法

    今天在安裝CentOS6.2的時候,當(dāng)進(jìn)到檢測硬盤的時候,總是過不去,報錯如下: Disk sda contains BIOS RAID metadata, but is not part of any recognized BIOS RAID sets. Ignoring disk sda,真是不知如何解決,下面小編把我的思路分享到腳本之家平臺,需要的朋友參考下
    2019-11-11
  • Linux中解除端口占用的方法

    Linux中解除端口占用的方法

    這篇文章主要介紹了Linux中解除端口占用的方法,本例以8080端口被占用為例,通過實例代碼給大家介紹,需要的朋友可以參考下
    2019-08-08
  • Mac通過不同終端SSH連接遠(yuǎn)程服務(wù)器的講解

    Mac通過不同終端SSH連接遠(yuǎn)程服務(wù)器的講解

    今天小編就為大家分享一篇關(guān)于Mac通過不同終端SSH連接遠(yuǎn)程服務(wù)器的講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • centos設(shè)置fqdn(全稱域名)和hostname的方法

    centos設(shè)置fqdn(全稱域名)和hostname的方法

    這篇文章主要介紹了centos設(shè)置fqdn(全稱域名)和hostname的方法,需要的朋友可以參考下
    2014-03-03
  • linux下make命令實現(xiàn)輸出高亮的方法

    linux下make命令實現(xiàn)輸出高亮的方法

    Linux 下 make 命令是系統(tǒng)管理員和程序員用的最頻繁的命令之一。管理員用它通過命令行來編譯和安裝很多開源的工具,程序員用它來管理他們大型復(fù)雜的項目編譯問題。這篇文章主要給大家介紹了關(guān)于linux下make命令實現(xiàn)輸出高亮的方法,需要的朋友可以參考下。
    2017-07-07
  • 在Centos7中配置NIS的詳細(xì)過程

    在Centos7中配置NIS的詳細(xì)過程

    大家好,本篇文章主要講的是在Centos7中配置NIS的詳細(xì)過程,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • 確保Linux VPS及服務(wù)器更加安全之Xshell設(shè)置密鑰登錄

    確保Linux VPS及服務(wù)器更加安全之Xshell設(shè)置密鑰登錄

    這篇文章主要介紹了Xshell設(shè)置密鑰登錄確保Linux VPS及服務(wù)器更加安全,需要的朋友可以參考下
    2016-10-10
  • centos 7中firewall防火墻的常用命令總結(jié)

    centos 7中firewall防火墻的常用命令總結(jié)

    大家都知道centos 7中防火墻是一個非常的強大的功能了,但對于centos 7中在防火墻中進(jìn)行了升級了,下面這篇文章主要介紹了centos 7中firewall防火墻的常用命令,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-03-03
  • Centos 6和Centos 7下服務(wù)啟動方法及添加到開機啟動項的方法

    Centos 6和Centos 7下服務(wù)啟動方法及添加到開機啟動項的方法

    這篇文章主要介紹了Centos 6和Centos 7下服務(wù)啟動方法及添加到開機啟動項的方法的相關(guān)資料,需要的朋友可以參考下
    2016-10-10

最新評論

邵阳市| 南皮县| 论坛| 蛟河市| 新宾| 榆中县| 行唐县| 锡林郭勒盟| 荆州市| 北安市| 大悟县| 上虞市| 曲周县| 河东区| 炉霍县| 济源市| 肥东县| 涞源县| 遵义县| 林甸县| 定结县| 晋江市| 高邑县| 花垣县| 丹阳市| 汉中市| 青田县| 尼玛县| 麻栗坡县| 咸阳市| 襄汾县| 通州区| 盱眙县| 新建县| 兴海县| 台东市| 邮箱| 武安市| 房产| 双牌县| 蒲江县|