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

當(dāng)master down掉后,pt-heartbeat不斷重試會導(dǎo)致內(nèi)存緩慢增長的原因及解決辦法

 更新時間:2016年10月01日 09:47:49   作者:iVictor  
這篇文章主要介紹了當(dāng)master down掉后,pt-heartbeat不斷重試會導(dǎo)致內(nèi)存緩慢增長的原因及解決辦法,需要的朋友可以參考下

最近同事反映,在使用pt-heartbeat監(jiān)控主從復(fù)制延遲的過程中,如果master down掉了,則pt-heartbeat則會連接失敗,但會不斷重試。

重試本無可厚非,畢竟從使用者的角度來說,希望pt-heartbeat能不斷重試,直到重新連接上數(shù)據(jù)庫。但是,他們發(fā)現(xiàn),不斷的重試會帶來內(nèi)存的緩慢增長。

重現(xiàn)

環(huán)境:

pt-heartbeat v2.2.19,MySQL社區(qū)版 v5.6.31,Perl v5.10.1,RHEL 6.7,內(nèi)存500M

為了避免數(shù)據(jù)庫啟停對pt-heartbeat內(nèi)存使用率的影響,故MySQL和pt-heartbeat分別運(yùn)行在不同的主機(jī)上。

運(yùn)行pt-heartbeat

# pt-heartbeat --update -h 192.168.244.10 -u monitor -p monitor123 -D test --create-table

監(jiān)控pt-heartbeat的內(nèi)存使用率

獲取pid

# ps -ef |grep pt-heartbeat
root 1505 1471 0 19:13 pts/0 00:00:08 perl /usr/local/bin/pt-heartbeat --update -h 192.168.244.10 -u monitor -p monitor123 -D test --create-table
root 1563 1545 2 19:50 pts/3 00:00:00 grep pt-heartbeat

查看該進(jìn)程的內(nèi)存使用率

# top -p 1505

運(yùn)行了0:15.00(TIME+列),MEM一直穩(wěn)定在3.3%

現(xiàn)關(guān)閉數(shù)據(jù)庫

# service mysqld stop

剛才的pt-heartbeat命令不斷輸出以下信息

同樣CPU時間后,MEM增長到4.4%, 增長了1%,考慮到內(nèi)存500M,該進(jìn)程的內(nèi)存占用增加了5M,雖然不是很多,但考慮到進(jìn)程的內(nèi)存增加并沒有停止的意思,這個現(xiàn)象還是要引起注意的。

同時,通過pmap命令,發(fā)現(xiàn),0000000001331000地址的RSS和Dirry也會增長,增長的速率是4k/s

后來研究pt-heartbeat的源碼,才發(fā)現(xiàn)代碼有點bug

my $tries = 2;
while ( !$dbh && $tries-- ) {
PTDEBUG && _d($cxn_string, ' ', $user, ' ', $pass,
join(', ', map { "$_=>$defaults->{$_}" } keys %$defaults ));
$dbh = eval { DBI->connect($cxn_string, $user, $pass, $defaults) };
if ( !$dbh && $EVAL_ERROR ) {
if ( $EVAL_ERROR =~ m/locate DBD\/mysql/i ) {
die "Cannot connect to MySQL because the Perl DBD::mysql module is "
. "not installed or not found. Run 'perl -MDBD::mysql' to see "
. "the directories that Perl searches for DBD::mysql. If "
. "DBD::mysql is not installed, try:\n"
. " Debian/Ubuntu apt-get install libdbd-mysql-perl\n"
. " RHEL/CentOS yum install perl-DBD-MySQL\n"
. " OpenSolaris pgk install pkg:/SUNWapu13dbd-mysql\n";
}
elsif ( $EVAL_ERROR =~ m/not a compiled character set|character set utf8/ ) {
PTDEBUG && _d('Going to try again without utf8 support');
delete $defaults->{mysql_enable_utf8};
}
if ( !$tries ) {
die $EVAL_ERROR;
}
}
}

以上代碼摘自get_dbh函數(shù),用于獲取數(shù)據(jù)庫的連接,如果獲取失敗,則重試1次,然后通過die函數(shù)拋異常退出。

但是,通過設(shè)置如下斷點,發(fā)現(xiàn)當(dāng)$tries為0時,if函數(shù)里面的PTDEBUG && _d("$EVAL_ERROR")語句能執(zhí)行,但die函數(shù)就是沒有拋出異常,并退出腳本

PTDEBUG && _d($tries);
if ( !$tries ) {
PTDEBUG && _d("$EVAL_ERROR"); 
die $EVAL_ERROR; }

后來,將上述代碼的最后一個if函數(shù)修改如下:

if ( !$tries ) {
die "test:$EVAL_ERROR";
}

再次測試

啟動數(shù)據(jù)庫

# service mysqld start

執(zhí)行pt-heartbeat命令

# pt-heartbeat --update -h 192.168.244.10 -u monitor -p monitor123 -D test --create-table

停止數(shù)據(jù)庫

# service mysqld stop

剛才執(zhí)行的pt-heartbeat命令異常退出

“test:”就是加入的測試字符。

結(jié)論

很奇怪,只是單純的die $EVAL_ERROR不會拋出異常,并退出腳本,但修改后的die "test:$EVAL_ERROR"卻會退出腳本。

很顯然,這確實是個bug,不知道是不是與perl的版本有關(guān)。

很好奇,失敗的連接如何導(dǎo)致內(nèi)存的不斷增長?

最后,給percona官方提了個bug

https://bugs.launchpad.net/percona-toolkit/+bug/1629164

以上所述是小編給大家介紹的當(dāng)master down掉后,pt-heartbeat不斷重試會導(dǎo)致內(nèi)存緩慢增長的原因及解決辦法,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復(fù)大家的!

相關(guān)文章

  • Sql檢驗數(shù)據(jù)庫中各個表的數(shù)據(jù)量

    Sql檢驗數(shù)據(jù)庫中各個表的數(shù)據(jù)量

    本文主要介紹了Sql檢驗數(shù)據(jù)庫中各個表的數(shù)據(jù)量,這樣的查詢有助于評估每個表的數(shù)據(jù)量,從而更好地進(jìn)行數(shù)據(jù)庫性能優(yōu)化,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • Sql server中內(nèi)部函數(shù)fn_PhysLocFormatter存在解析錯誤詳解

    Sql server中內(nèi)部函數(shù)fn_PhysLocFormatter存在解析錯誤詳解

    這篇文章主要給大家介紹了關(guān)于Sql server中內(nèi)部函數(shù)fn_PhysLocFormatter存在解析錯誤的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-09-09
  • sqlserver/mysql按天、按小時、按分鐘統(tǒng)計連續(xù)時間段數(shù)據(jù)【推薦】

    sqlserver/mysql按天、按小時、按分鐘統(tǒng)計連續(xù)時間段數(shù)據(jù)【推薦】

    最近小編接到這樣的需求,公司需要按天,按小時查看數(shù)據(jù),可以直觀的看到時間段的數(shù)據(jù)峰值。這篇文章主要介紹了sqlserver/mysql按天,按小時,按分鐘統(tǒng)計連續(xù)時間段數(shù)據(jù) ,需要的朋友可以參考下
    2019-06-06
  • SQL計算用戶留存率問題

    SQL計算用戶留存率問題

    電商業(yè)務(wù)中需要計算用戶留存情況,在時間維度上可以分為用戶次日、多日后的留存情況,本文就來詳細(xì)的介紹一下如何計算,具有一定的參考價值,感興趣的可以了解一下
    2024-09-09
  • SQL查詢中出現(xiàn)笛卡爾積現(xiàn)象的解決方法

    SQL查詢中出現(xiàn)笛卡爾積現(xiàn)象的解決方法

    本文主要介紹了SQL查詢中出現(xiàn)笛卡爾積現(xiàn)象的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • SQL SERVER中關(guān)于exists 和 in的簡單分析

    SQL SERVER中關(guān)于exists 和 in的簡單分析

    這篇文章主要介紹了SQL SERVER中關(guān)于exists 和 in的簡單分析,需要的朋友可以參考下
    2014-08-08
  • 查詢SQL Server數(shù)據(jù)庫服務(wù)器IP地址的多種有效方法

    查詢SQL Server數(shù)據(jù)庫服務(wù)器IP地址的多種有效方法

    作為數(shù)據(jù)庫管理員或開發(fā)人員,了解如何查詢SQL Server數(shù)據(jù)庫服務(wù)器的IP地址是一項重要技能,本文將介紹幾種簡單而有效的方法,幫助你輕松獲取這一信息,無論你是新手還是經(jīng)驗豐富的專業(yè)人士,這些方法都能為你提供所需的信息,需要的朋友可以參考下
    2025-02-02
  • 存儲過程的輸出參數(shù),返回值與結(jié)果集

    存儲過程的輸出參數(shù),返回值與結(jié)果集

    存儲過程中可以定義輸出變量,返回值,執(zhí)行存儲過程還能獲得結(jié)果集。
    2010-06-06
  • SQL?Server?DATEDIFF()?函數(shù)用法

    SQL?Server?DATEDIFF()?函數(shù)用法

    這篇文章主要介紹了SQL?Server?DATEDIFF()?函數(shù)的定義和用法,通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • 將sqlserver數(shù)據(jù)遷移到mysql的詳細(xì)步驟記錄

    將sqlserver數(shù)據(jù)遷移到mysql的詳細(xì)步驟記錄

    這篇文章主要介紹了將SQL?Server數(shù)據(jù)遷移到MySQL的步驟,包括導(dǎo)出數(shù)據(jù)、轉(zhuǎn)換數(shù)據(jù)格式和導(dǎo)入數(shù)據(jù),通過示例和工具說明,幫助大家順利完成遷移任務(wù),需要的朋友可以參考下
    2025-01-01

最新評論

孝昌县| 聂拉木县| 石柱| 府谷县| 巴楚县| 普格县| 绍兴县| 额尔古纳市| 湖北省| 桑植县| 鹿泉市| 武清区| 余庆县| 荔浦县| 泰兴市| 新河县| 万年县| 巩留县| 云浮市| 安康市| 南江县| 龙南县| 遵义县| 台中市| 拉萨市| 通辽市| 中江县| 长兴县| 青阳县| 子长县| 阳曲县| 丰台区| 乐陵市| 长汀县| 拉萨市| 交城县| 松潘县| 新宁县| 广东省| 读书| 太保市|