主頁(yè) > 知識(shí)庫(kù) > 當(dāng)master down掉后,pt-heartbeat不斷重試會(huì)導(dǎo)致內(nèi)存緩慢增長(zhǎng)的原因及解決辦法

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

熱門標(biāo)簽:電話機(jī)器人怎么代理商 家庭農(nóng)場(chǎng)地圖標(biāo)注名稱怎樣起名 千呼電話機(jī)器人可以試用嗎 我要地圖標(biāo)注數(shù)量有限制嗎 零成本地圖標(biāo)注賺錢 安卡拉地圖標(biāo)注app 400電話辦理泰安 互聯(lián)網(wǎng)電話外呼系統(tǒng) 電銷需要外呼系統(tǒng)嗎

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

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

重現(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ù)庫(kù)啟停對(duì)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ù)庫(kù)

# service mysqld stop

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

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

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

后來研究pt-heartbeat的源碼,才發(fā)現(xiàn)代碼有點(diǎ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ù)庫(kù)的連接,如果獲取失敗,則重試1次,然后通過die函數(shù)拋異常退出。

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

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

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

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

再次測(cè)試

啟動(dòng)數(shù)據(jù)庫(kù)

# service mysqld start

執(zhí)行pt-heartbeat命令

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

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

# service mysqld stop

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

“test:”就是加入的測(cè)試字符。

結(jié)論

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

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

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

最后,給percona官方提了個(gè)bug

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

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

您可能感興趣的文章:
  • 詳解spring boot使用@Retryable來進(jìn)行重處理
  • Spring Cloud重試機(jī)制與各組件的重試總結(jié)
  • 詳解Spring Cloud Zuul重試機(jī)制探秘
  • Java編程Retry重試機(jī)制實(shí)例詳解

標(biāo)簽:池州 黃山 濱州 新鄉(xiāng) 大同 文山 東營(yíng) 來賓

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《當(dāng)master down掉后,pt-heartbeat不斷重試會(huì)導(dǎo)致內(nèi)存緩慢增長(zhǎng)的原因及解決辦法》,本文關(guān)鍵詞  當(dāng),master,down,掉后,pt-heartbeat,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《當(dāng)master down掉后,pt-heartbeat不斷重試會(huì)導(dǎo)致內(nèi)存緩慢增長(zhǎng)的原因及解決辦法》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于當(dāng)master down掉后,pt-heartbeat不斷重試會(huì)導(dǎo)致內(nèi)存緩慢增長(zhǎng)的原因及解決辦法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章