亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        排查Redis存儲失敗

        2020-12-31 05:47:01河南劉建臣
        網(wǎng)絡(luò)安全和信息化 2020年6期
        關(guān)鍵詞:磁盤命令進(jìn)程

        ■ 河南 劉建臣

        單位的一臺Web服務(wù)器后臺使用的是Redis服務(wù)器,其工作一直比較正常。而最近出現(xiàn)無法寫入數(shù)據(jù)的故障,給業(yè)務(wù)帶來了很大的影響。

        該機(jī)安裝的是CentOS6.X系統(tǒng),使用的是四核的CPU,內(nèi)存為16GB,在該機(jī)上執(zhí)行“top”命令,發(fā)現(xiàn)內(nèi)存的使用率為70%,CPU的負(fù)荷并不大。執(zhí)行“df”“l(fā)sof”“iotop”等命令,發(fā)現(xiàn)磁盤讀寫情況沒有問題。進(jìn)入Redis日志文件路徑(這里為“/var/log/redis”),然后執(zhí)行“vi redis.log”命令,發(fā)現(xiàn)其中存在“Can't save in background:fork:Cannot allocate memory”錯(cuò)誤提示。

        故障排查

        根據(jù)以上錯(cuò)誤信息,說明當(dāng)Redis存儲數(shù)據(jù)時(shí),因?yàn)閮?nèi)存無法分配導(dǎo)致故障的發(fā)生。但是執(zhí)行“top”命令發(fā)現(xiàn)內(nèi)存并沒有耗盡,似乎應(yīng)該可以為Redis分配足夠的內(nèi)存。

        執(zhí)行“vi/etc/redis/redis.conf”命令,在Redis配置文件中發(fā)現(xiàn)“save 900 1” “save 300 10” “save 60 10000” “appendonly no”“maxmemory 10GB”等信息。其中三個(gè)“save”項(xiàng)目指的是自動觸發(fā)Redis數(shù)據(jù)持久化到磁盤的策略,即當(dāng)指定的時(shí)間內(nèi)數(shù)據(jù)發(fā)生設(shè)定次數(shù)變動時(shí),就會觸發(fā)“bgsave”命令將數(shù)據(jù)存儲到磁盤。

        例如,對于“save 900 1”來說,當(dāng)900秒內(nèi)數(shù)據(jù)變化為1次時(shí),就將變化的數(shù)據(jù)存儲到磁盤中。根據(jù)Redis日志文件提供的信息,可以看到當(dāng)觸發(fā)了“save 60 1000”策略時(shí),才出現(xiàn)了無法分配內(nèi)存的故障。這意味著在60秒時(shí)間內(nèi),當(dāng)數(shù)據(jù)變化的次數(shù)達(dá)到10000次時(shí),才出現(xiàn)無法分配內(nèi)存的問題。

        但是對于其他兩個(gè)Save策略來說,在存儲數(shù)據(jù)時(shí)是沒有問題的。在“appendonly”項(xiàng)中的參數(shù)為“no”,說明并沒有開啟Resia的AOF持久化機(jī)制。如果開啟該機(jī)制,那么當(dāng)每次執(zhí)行寫操作時(shí),都會自動記錄對應(yīng)的Log日志,這將提高數(shù)據(jù)安全性。

        我們知道,Redis是內(nèi)存型數(shù)據(jù)庫,數(shù)據(jù)都是存儲在內(nèi)存中,為了避免Redis進(jìn)程關(guān)閉導(dǎo)致數(shù)據(jù)的永久丟失,需要定期將Redis中的數(shù)據(jù)以命令等形式從內(nèi)存保存到硬盤。當(dāng)以后重啟Redis時(shí),就可以利用持久化機(jī)制實(shí)現(xiàn)數(shù)據(jù)恢復(fù)。

        當(dāng)然,為保護(hù)數(shù)據(jù)安全,還要盡可能的將持久化文件復(fù)制到遠(yuǎn)程存儲空間中保存。Redis持久化分為RDB和AOF兩種方式,前者是將當(dāng)前進(jìn)程中的數(shù)據(jù)生成快照保存到硬盤,也稱快照持久化,保存的文件后綴是“.rdb”。當(dāng)Redis重新啟動時(shí),可以讀取快照文件恢復(fù)數(shù)據(jù)。

        后者是將Redis執(zhí)行的每次寫命令記錄到單獨(dú)的日志文件中,當(dāng)Redis重啟時(shí)再次執(zhí)行AOF文件中的命令來恢復(fù)數(shù)據(jù)。由于AOF持久化的實(shí)時(shí)性更好,遇到Redis異常退出時(shí)丟失的數(shù)據(jù)更少,因此AOF是目前主流的持久化方式。在默認(rèn)狀態(tài)下,該機(jī)制是處于不開啟的狀態(tài),即Redis會采取異步機(jī)制將數(shù)據(jù)寫入到磁盤中。在“maxmemory”參數(shù)中執(zhí)行Redis可以使用的最大的內(nèi)存量,當(dāng)Redis在啟動時(shí),會加能夠數(shù)據(jù)加載到內(nèi)存中,當(dāng)達(dá)到最大的內(nèi)存使用量時(shí),Redis會嘗試清除已經(jīng)或者即將到期的Key鍵值。

        當(dāng)處理完畢后,如果依然達(dá)到最大的內(nèi)存使用量,就無法執(zhí)行寫入操作,但依然可以執(zhí)行數(shù)據(jù)的讀取操作。這里的Redis的最大內(nèi)庫存使用量為10GB,但是實(shí)際內(nèi)存量為16GB,看起來還有很多可用的內(nèi)存,并不應(yīng)該出現(xiàn)無法分配內(nèi)存的提示。

        繼續(xù)查閱Redis日志文件,發(fā)現(xiàn)了“WARNING overcommit_memory is set to 0!” “Background save may fail under low memory condition”等提示信息,大意是說明在低內(nèi)存的環(huán)境下,后臺存儲存儲數(shù)據(jù)存在風(fēng)險(xiǎn)。面對這種情況,一般的應(yīng)對策略是打開“/etc/sysctl.conf”文件,在其中對名為“vm.overcommit_memory”的內(nèi)存存儲參數(shù)進(jìn)行修改。

        之后執(zhí)行“sysctl vm.overcommit_memory=1”命令命令使該修改生效。“vm.overcommit_memory”參數(shù)實(shí)際對應(yīng)的是“/proc/sys/vm/overcommit_memory”文件,該文件的主要作用是指定系統(tǒng)內(nèi)核針對內(nèi)存的分配策略。該參數(shù)默認(rèn)值為0,表示當(dāng)內(nèi)核對于內(nèi)存分配情況進(jìn)行檢測時(shí),如果發(fā)現(xiàn)應(yīng)有程序沒有足夠的可用內(nèi)存的話,那么內(nèi)存申請操作失敗,并將錯(cuò)誤信息發(fā)送給目標(biāo)程序。反之,則允許申請內(nèi)存,保證應(yīng)用程序正常工作。

        如果將該參數(shù)的值設(shè)置為1,表示不管當(dāng)前的內(nèi)存使用情況處于什么狀態(tài),都允許分配所有可用的物理內(nèi)存內(nèi)存給應(yīng)用程序。如果參數(shù)設(shè)置為2,表示內(nèi)核允許分配超過所有物理內(nèi)存和交換空間總和的內(nèi)存量。對于Redis來說,建議將參數(shù)的值設(shè)置為1,便于其利用所有的物理內(nèi)存。在本例中該參數(shù)的值實(shí)際上設(shè)置為0,這意味著雖然系統(tǒng)存在一定的空閑內(nèi)存,但是其小于Redis所申請的內(nèi)存量,自然會出現(xiàn)無法分配內(nèi)存的故障。

        故障解決

        Redis的持久化機(jī)制數(shù)據(jù)回寫方式包括同步回寫和異步回寫。對于前者來說,Redis對應(yīng)執(zhí)行的是SAVE命令,即由Redis主進(jìn)程直接將數(shù)據(jù)寫入磁盤。當(dāng)寫入的數(shù)據(jù)量較大時(shí),該命令將阻塞主進(jìn)程,導(dǎo)致客戶端無法連接Redis,只有當(dāng)SAVE操作完成后,主進(jìn)程才開始工作,客戶端才可以正常連接Redis。

        對于后者來說,實(shí)際上和Redis的BGSAVE命令對應(yīng)。即Redis主進(jìn)程通過fork一個(gè)子進(jìn)程,復(fù)制主進(jìn)程的內(nèi)存并通過子進(jìn)程將數(shù)據(jù)寫入到磁盤中。

        在執(zhí)行BGSAVE命令過程中,并不影響Redis主進(jìn)程,客戶端可以正常連接Redis,等子進(jìn)程fork執(zhí)行存儲完成后,通知主進(jìn)程并關(guān)閉子進(jìn)程。

        根據(jù)在Redis配置文件,可以看到當(dāng)滿足了自動觸發(fā)Redis數(shù)據(jù)持久化到磁盤的策略時(shí),Redis就會后臺調(diào)用BGSAVE命令,BGSAVE命令需要fork一個(gè)子進(jìn)程,這就相當(dāng)于復(fù)制了一個(gè)Redis主進(jìn)程的內(nèi)存鏡像。該服務(wù)器的物理內(nèi)存是16GB,因?yàn)镽edis主進(jìn)程占用了最大10GB內(nèi)存,對應(yīng)的由BGSAVE命令行fork的子進(jìn)程也需占用了最大10GB內(nèi)存。

        這樣,Redis就需要最大的內(nèi)存量就變成了20GB內(nèi)存,該機(jī)的物理內(nèi)存顯然無法滿足該要求,所以才出現(xiàn)無法分配內(nèi)存的故障,這必然導(dǎo)致Redis無法向磁盤寫入數(shù)據(jù)的問題。

        根據(jù)以上分析,解決問題最直接的方法是對Redis的配置文件進(jìn)行修改,將“maxmemory 10GB”配置項(xiàng)進(jìn)行修改,降低其最大內(nèi)存使用量,例如修改為“maxmemory 5GB”等。之后執(zhí)行“/etc/init.d/redisserver restart”之類的命令來重啟Redis,讓配置生效。也可以增加該機(jī)的而無力內(nèi)存量,例如將物理內(nèi)存增加到32GB,來滿足實(shí)際的需要。

        猜你喜歡
        磁盤命令進(jìn)程
        只聽主人的命令
        債券市場對外開放的進(jìn)程與展望
        中國外匯(2019年20期)2019-11-25 09:54:58
        解決Windows磁盤簽名沖突
        電腦愛好者(2019年2期)2019-10-30 03:45:31
        修改磁盤屬性
        移防命令下達(dá)后
        磁盤組群組及iSCSI Target設(shè)置
        創(chuàng)建VSAN群集
        這是人民的命令
        社會進(jìn)程中的新聞學(xué)探尋
        我國高等教育改革進(jìn)程與反思
        大胸美女吃奶爽死视频| 爆爽久久久一区二区又大又黄又嫩| 人妻精品无码一区二区三区| 最新国产成人在线网站| 欧美成人在线A免费观看| 日韩精品成人一区二区三区久久久| 漂亮人妻被强了中文字幕| 人妻少妇精品视频三区二区一区| 四虎影视永久在线精品| 精品少妇大屁股白浆无码| 亚洲精品中文字幕乱码人妻| 精品熟女av中文字幕| 国产裸体美女永久免费无遮挡| 国产成人无码一区二区在线观看 | 国产最新女主播福利在线观看| 中文字幕丰满乱子无码视频| 国产无遮挡a片又黄又爽| 亚洲国产综合专区在线电影| 东京热东京道日韩av| 精品人妻少妇av中文字幕| 看全色黄大色大片免费久久| 丝袜AV在线一区二区三区| 亚洲国产一区二区三区视频在线| 亚州终合人妖一区二区三区| 成人爽a毛片免费视频| 丰满人妻无奈张开双腿av| 亚洲精品国产福利在线观看| 国产国拍精品亚洲av在线观看| 好大好湿好硬顶到了好爽视频| 亚洲另类精品无码专区 | 国产偷窥熟女精品视频| 日韩在线手机专区av| 国产一级内射一片视频免费| 国产福利永久在线视频无毒不卡| 色偷偷久久一区二区三区| 欧美破处在线观看| 精品亚洲国产日韩av一二三四区| 亚洲精品v欧洲精品v日韩精品| 手机看片福利日韩| 黄页免费人成网址大全| 国内精品少妇高潮视频|