數(shù)據(jù)庫(kù)假死時(shí)超時(shí)參數(shù)不生效

1、背景描述

最近在重寫對(duì)數(shù)據(jù)庫(kù)的探活,循環(huán)不斷對(duì)所有數(shù)據(jù)庫(kù)進(jìn)行select 1探活,但是發(fā)現(xiàn)當(dāng)數(shù)據(jù)庫(kù)出現(xiàn)假死的情況下,整個(gè)循環(huán)都卡主,連接hang死在假死的數(shù)據(jù)庫(kù),主要是這種異常無(wú)法通過(guò)connect_timeout超時(shí)來(lái)觸發(fā)異常,很難捕捉

2、目前解決辦法

目前解決辦法是通過(guò)裝飾器直接對(duì)函數(shù)進(jìn)行額外的超時(shí)判斷,將連接信息放到一個(gè)函數(shù)中,然后通過(guò)裝飾器對(duì)函數(shù)進(jìn)行額外的超時(shí)判斷,如果再遇到這種假死問題就可以通過(guò)裝飾器來(lái)拋出異常

裝飾器代碼

    def function_timeout(seconds, err_msg='Function call timed out'):
        """
            Timeout decorater.
            Restrict function exec in special seconds or throw TimeoutError exception.
        """

        def decorated(func):
            def _handle_timeout(signum, frame):
                raise Exception(err_msg)

            def wrapper(*args, **kwargs):
                signal.signal(signal.SIGALRM, _handle_timeout)
                signal.alarm(seconds)
                try:
                    result = func(*args, **kwargs)
                finally:
                    signal.alarm(0)
                return result

            return functools.wraps(func)(wrapper)

        return decorated

    @function_timeout(5)
    def connection():
        xxx

3、案例展示

1、模擬數(shù)據(jù)庫(kù)假死,直接kill -19 pid即可模擬

image.png

2、首先不用裝飾器,在connect_timeout時(shí)間設(shè)置5s的情況下,程序hang死,手動(dòng)終止看時(shí)間超過(guò)5s


image.png

3、在使用裝飾器的情況下,在超時(shí)配置的超時(shí)時(shí)間后,會(huì)自動(dòng)拋出調(diào)用函數(shù)超時(shí)的異常用于捕捉

image.png

4、此方法問題

目前無(wú)法在多線程中使用,水平優(yōu)先,如果有大神有好的解決辦法辛苦分享下,感謝大佬們

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 文章目錄前言1.第一問:redis支持哪些數(shù)據(jù)類型:2 第二問:redis持久化方式和說(shuō)明:2.1 RDB(默認(rèn))...
    一位先生_閱讀 233評(píng)論 0 0
  • 今天我正打算值班,我的實(shí)習(xí)同事叫我一起去參加會(huì)議,是公司的教務(wù)姐姐特地花寶貴時(shí)間給我們開會(huì),半個(gè)小時(shí)的會(huì)議收獲特別...
    卿涵學(xué)姐說(shuō)閱讀 449評(píng)論 0 0
  • 最近復(fù)習(xí)了一些知識(shí)點(diǎn) 父元素坍塌問題:大家應(yīng)該知道,對(duì)于一個(gè)元素來(lái)說(shuō),不給他固定高度的時(shí)候他的高度是由內(nèi)容撐開的,...
    陳澤宇_2021強(qiáng)化班閱讀 130評(píng)論 0 0
  • 從 JetPack 4.4 開始,可以使用包管理工具升級(jí)到下一個(gè) JetPack 版本。請(qǐng)按照以下步驟執(zhí)行升級(jí):a...
    懂你的閱讀 764評(píng)論 0 0
  • 第六天 鳥兒昨晚快12點(diǎn)離窩,一晚未歸…這倒春寒的氣溫!嗐!我都擔(dān)心寶寶能否孵化得了!睡前百度一下,也沒有得到...
    一個(gè)女菜農(nóng)閱讀 201評(píng)論 0 0

友情鏈接更多精彩內(nèi)容