999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

排查Redis存儲(chǔ)失敗

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

■ 河南 劉建臣

單位的一臺(tái)Web服務(wù)器后臺(tái)使用的是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存儲(chǔ)數(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)目指的是自動(dòng)觸發(fā)Redis數(shù)據(jù)持久化到磁盤的策略,即當(dāng)指定的時(shí)間內(nèi)數(shù)據(jù)發(fā)生設(shè)定次數(shù)變動(dòng)時(shí),就會(huì)觸發(fā)“bgsave”命令將數(shù)據(jù)存儲(chǔ)到磁盤。

例如,對(duì)于“save 900 1”來說,當(dāng)900秒內(nèi)數(shù)據(jù)變化為1次時(shí),就將變化的數(shù)據(jù)存儲(chǔ)到磁盤中。根據(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)存的問題。

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

我們知道,Redis是內(nèi)存型數(shù)據(jù)庫,數(shù)據(jù)都是存儲(chǔ)在內(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)程存儲(chǔ)空間中保存。Redis持久化分為RDB和AOF兩種方式,前者是將當(dāng)前進(jìn)程中的數(shù)據(jù)生成快照保存到硬盤,也稱快照持久化,保存的文件后綴是“.rdb”。當(dāng)Redis重新啟動(dòng)時(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會(huì)采取異步機(jī)制將數(shù)據(jù)寫入到磁盤中。在“maxmemory”參數(shù)中執(zhí)行Redis可以使用的最大的內(nèi)存量,當(dāng)Redis在啟動(dòng)時(shí),會(huì)加能夠數(shù)據(jù)加載到內(nèi)存中,當(dāng)達(dá)到最大的內(nèi)存使用量時(shí),Redis會(huì)嘗試清除已經(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)境下,后臺(tái)存儲(chǔ)存儲(chǔ)數(shù)據(jù)存在風(fēng)險(xiǎn)。面對(duì)這種情況,一般的應(yīng)對(duì)策略是打開“/etc/sysctl.conf”文件,在其中對(duì)名為“vm.overcommit_memory”的內(nèi)存存儲(chǔ)參數(shù)進(jìn)行修改。

之后執(zhí)行“sysctl vm.overcommit_memory=1”命令命令使該修改生效。“vm.overcommit_memory”參數(shù)實(shí)際對(duì)應(yīng)的是“/proc/sys/vm/overcommit_memory”文件,該文件的主要作用是指定系統(tǒng)內(nèi)核針對(duì)內(nèi)存的分配策略。該參數(shù)默認(rèn)值為0,表示當(dāng)內(nèi)核對(duì)于內(nèi)存分配情況進(jìn)行檢測(cè)時(shí),如果發(fā)現(xiàn)應(yīng)有程序沒有足夠的可用內(nèi)存的話,那么內(nèi)存申請(qǐng)操作失敗,并將錯(cuò)誤信息發(fā)送給目標(biāo)程序。反之,則允許申請(qǐng)內(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)存量。對(duì)于Redis來說,建議將參數(shù)的值設(shè)置為1,便于其利用所有的物理內(nèi)存。在本例中該參數(shù)的值實(shí)際上設(shè)置為0,這意味著雖然系統(tǒng)存在一定的空閑內(nèi)存,但是其小于Redis所申請(qǐng)的內(nèi)存量,自然會(huì)出現(xiàn)無法分配內(nèi)存的故障。

故障解決

Redis的持久化機(jī)制數(shù)據(jù)回寫方式包括同步回寫和異步回寫。對(duì)于前者來說,Redis對(duì)應(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。

對(duì)于后者來說,實(shí)際上和Redis的BGSAVE命令對(duì)應(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í)行存儲(chǔ)完成后,通知主進(jìn)程并關(guān)閉子進(jìn)程。

根據(jù)在Redis配置文件,可以看到當(dāng)滿足了自動(dòng)觸發(fā)Redis數(shù)據(jù)持久化到磁盤的策略時(shí),Redis就會(huì)后臺(tái)調(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)存,對(duì)應(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ù)以上分析,解決問題最直接的方法是對(duì)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)程故障
故障一點(diǎn)通
債券市場(chǎng)對(duì)外開放的進(jìn)程與展望
中國外匯(2019年20期)2019-11-25 09:54:58
奔馳R320車ABS、ESP故障燈異常點(diǎn)亮
故障一點(diǎn)通
故障一點(diǎn)通
故障一點(diǎn)通
江淮車故障3例
我國高等教育改革進(jìn)程與反思
Linux僵死進(jìn)程的產(chǎn)生與避免
男女平等進(jìn)程中出現(xiàn)的新矛盾和新問題
主站蜘蛛池模板: 黄色网在线免费观看| 久久久波多野结衣av一区二区| 91av国产在线| 99人妻碰碰碰久久久久禁片| 中文字幕在线看| 色婷婷成人网| 妇女自拍偷自拍亚洲精品| 亚洲最新在线| 国产三级国产精品国产普男人| 久久久久人妻一区精品色奶水 | 国产91丝袜在线播放动漫| 国产农村精品一级毛片视频| 亚洲国产成人超福利久久精品| 国产精品va| 情侣午夜国产在线一区无码| 国外欧美一区另类中文字幕| vvvv98国产成人综合青青| 成人噜噜噜视频在线观看| 国产免费观看av大片的网站| 国产99在线| 91蜜芽尤物福利在线观看| 亚洲欧美日韩中文字幕在线一区| 亚洲欧美在线精品一区二区| 久久综合一个色综合网| 国产欧美日韩免费| 国产黑丝视频在线观看| 高清国产在线| 成年A级毛片| 午夜国产理论| 国产精女同一区二区三区久| 91精品啪在线观看国产91| 一本一道波多野结衣一区二区 | 国产主播在线一区| www.av男人.com| 91精品人妻一区二区| 欧美日韩激情| 欧美性天天| 免费看一级毛片波多结衣| 精品无码国产一区二区三区AV| 亚洲三级色| 国产成人在线无码免费视频| 国产视频a| 91小视频在线观看| 久久久久88色偷偷| 91久久国产成人免费观看| 国产毛片高清一级国语| 久久成人18免费| 在线中文字幕网| 国产麻豆aⅴ精品无码| 日韩国产亚洲一区二区在线观看| 欧美第二区| 新SSS无码手机在线观看| 国产精品丝袜在线| 亚洲精品图区| 亚洲精品波多野结衣| 日韩大乳视频中文字幕| 免费网站成人亚洲| 国产成人免费观看在线视频| 日韩成人午夜| 97在线观看视频免费| 国精品91人妻无码一区二区三区| 韩日午夜在线资源一区二区| 国产一区免费在线观看| 日韩少妇激情一区二区| 成人自拍视频在线观看| 在线播放国产一区| 精品无码国产一区二区三区AV| 18禁色诱爆乳网站| 黄色网址免费在线| 2020精品极品国产色在线观看 | 亚洲人成在线精品| 欧美午夜精品| 精品福利网| 97av视频在线观看| 免费99精品国产自在现线| 国产特一级毛片| 美女被狂躁www在线观看| 色婷婷亚洲十月十月色天| 制服丝袜亚洲| 亚洲视频在线青青| 秋霞一区二区三区| 日韩大乳视频中文字幕|