濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > redis 限制內(nèi)存使用大小的實(shí)現(xiàn)

redis 限制內(nèi)存使用大小的實(shí)現(xiàn)

熱門標(biāo)簽:魔獸2青云地圖標(biāo)注 宿遷便宜外呼系統(tǒng)平臺(tái) 鄭州人工智能電銷機(jī)器人系統(tǒng) 十堰營(yíng)銷電銷機(jī)器人哪家便宜 日本中國(guó)地圖標(biāo)注 山東外呼銷售系統(tǒng)招商 北京400電話辦理收費(fèi)標(biāo)準(zhǔn) 超呼電話機(jī)器人 貴州電銷卡外呼系統(tǒng)

記錄一次生產(chǎn)環(huán)境問(wèn)題排查過(guò)程:

生產(chǎn)環(huán)境部署方式:nginx + uwsgi + flask

問(wèn)題描述:

發(fā)現(xiàn)生產(chǎn)環(huán)境中之前正常運(yùn)行的服務(wù)突然不可用了,查看程序日志發(fā)現(xiàn)部分接口訪問(wèn)時(shí)報(bào)I/O寫(xiě)錯(cuò)誤,nginx acess.log顯示504,error.log顯示 upstream time out.
同時(shí) netstat -apn | grep 6379 | wc -l 檢查發(fā)現(xiàn)redis存在大量連接,進(jìn)一步檢查發(fā)現(xiàn)其中大多為 SYN_SENT 包,連接大多歸屬于uwsgi 進(jìn)程。

  因?yàn)槌绦蛑杏泻芏嘟涌诒徽{(diào)用是會(huì)訪問(wèn)redis, 以為是redis連接池導(dǎo)致,對(duì)程序中的redis連接池進(jìn)行優(yōu)化后重啟服務(wù),剛啟動(dòng)時(shí)一切正常,http 200, 但幾分鐘后服務(wù)再次掛掉,http 504.

檢查系統(tǒng)資源使用情況,發(fā)現(xiàn) kswapd0 進(jìn)程CPU占用很高,這個(gè)進(jìn)程是當(dāng)物理內(nèi)存不足時(shí),會(huì)將一部分硬盤當(dāng)做虛擬內(nèi)存來(lái)使用, 使用swap分區(qū)與內(nèi)存換頁(yè)操作交換數(shù)據(jù),導(dǎo)致CPU占用過(guò)高, 再細(xì)看發(fā)現(xiàn)redis-server內(nèi)存占用已超過(guò)100%:

進(jìn)入redis中查看info memory和各存儲(chǔ)數(shù)據(jù)的key下數(shù)據(jù)量,果然存在大量未處理完畢的數(shù)據(jù)。

到此問(wèn)題終于是找到了。

設(shè)置redis最大占用內(nèi)存

# 編輯redis配置文件,加入最大內(nèi)存使用限制,我根據(jù)服務(wù)器的情況設(shè)置為3G
maxmemory 3221225472

設(shè)置redis數(shù)據(jù)過(guò)期策略:

redis中有6種過(guò)期策略:

# 根據(jù)LRU算法生成的過(guò)期時(shí)間來(lái)刪除
# volatile-lru -> remove the key with an expire set using an LRU algorithm
# 根據(jù)LRU算法刪除任何key。
# allkeys-lru -> remove any key accordingly to the LRU algorithm
# 根據(jù)過(guò)期設(shè)置來(lái)隨機(jī)刪除key。
# volatile-random -> remove a random key with an expire set
# 無(wú)差別隨機(jī)刪。
# allkeys-random -> remove a random key, any key
# 根據(jù)最近過(guò)期時(shí)間來(lái)刪除(輔以TTL)
# volatile-ttl -> remove the key with the nearest expire time (minor TTL)
# 誰(shuí)也不刪,直接在寫(xiě)操作時(shí)返回錯(cuò)誤。
# noeviction -> don't expire at all, just return an error on write operations

在redis配置文件中設(shè)置過(guò)期策略為:maxmemory-policy allkeys-lru

  一開(kāi)始是設(shè)置為volatile-lru的,但是該策略只是清除設(shè)置過(guò)期時(shí)間的key值,因?yàn)楹芏鄈ey并沒(méi)有設(shè)置過(guò)期時(shí)間。因此修改為maxmemory-policy allkeys-lru,指明非活躍近期很少用的key值清除.

  在使用maxmemory-policy allkeys-lru策略時(shí),內(nèi)存超限后將不再存儲(chǔ)數(shù)據(jù),但數(shù)據(jù)的讀取刪除操作不會(huì)受影響,超限時(shí)顯示錯(cuò)誤

OOM command not allowed when used memory > 'maxmemory'

重啟程序,至此服務(wù)終于正常運(yùn)行。

總結(jié):本次的問(wèn)題歸根結(jié)底是redis中存儲(chǔ)入了大量臟數(shù)據(jù),但數(shù)據(jù)處理并沒(méi)有及時(shí)的清理掉這部分?jǐn)?shù)據(jù),最終導(dǎo)致服務(wù)停滯,allkeys-lru策略有可能會(huì)將長(zhǎng)期未用但實(shí)際有用的數(shù)據(jù)清理掉,所以還是應(yīng)優(yōu)化數(shù)據(jù)處理為主。

到此這篇關(guān)于redis 限制內(nèi)存使用大小的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)redis 限制內(nèi)存內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • redis內(nèi)存空間效率問(wèn)題的深入探究
  • redis 使用lettuce 啟動(dòng)內(nèi)存泄漏錯(cuò)誤的解決方案
  • 淺談內(nèi)存耗盡后Redis會(huì)發(fā)生什么
  • 一次關(guān)于Redis內(nèi)存詭異增長(zhǎng)的排查過(guò)程實(shí)戰(zhàn)記錄
  • 淺談redis內(nèi)存數(shù)據(jù)的持久化方式
  • 內(nèi)存型數(shù)據(jù)庫(kù)Redis持久化小結(jié)
  • 降低PHP Redis內(nèi)存占用
  • Redis教程(十四):內(nèi)存優(yōu)化介紹
  • 詳解Redis瘦身指南

標(biāo)簽:臺(tái)州 果洛 朝陽(yáng) 吉安 江蘇 北京 大慶 楊凌

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《redis 限制內(nèi)存使用大小的實(shí)現(xiàn)》,本文關(guān)鍵詞  redis,限制,內(nèi)存,使用,大,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《redis 限制內(nèi)存使用大小的實(shí)現(xiàn)》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于redis 限制內(nèi)存使用大小的實(shí)現(xiàn)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    阳西县| 梧州市| 内乡县| 玛纳斯县| 肇州县| 盐城市| 西丰县| 瓦房店市| 成安县| 镇巴县| 修水县| 峡江县| 班玛县| 姜堰市| 晴隆县| 泰顺县| 城口县| 张掖市| 舒兰市| 汝阳县| 南乐县| 信宜市| 望谟县| 尼木县| 犍为县| 曲阳县| 横山县| 小金县| 万年县| 麻阳| 阳江市| 三明市| 昭觉县| 涡阳县| 渭南市| 兴义市| 武强县| 临武县| 江安县| 曲松县| 鄂尔多斯市|