当前位置:网站首页>Troubleshooting of high memory usage of redis in a production environment
Troubleshooting of high memory usage of redis in a production environment
2022-07-05 11:44:00 【We've been on the road】
The server goes online after a regular release , It is found that the cache expiration speed is much lower than the configured 10min Be overdue .
The phenomenon : Just logged into the system background , After that 1 The cache expires in minutes , Unable to log in to the background , Enter Alibaba cloud redis The server , Found logged in key period , During this period, I also encountered various strange problems , Inexplicably log in to the system, but later drop the line , Later, I went to Alibaba cloud and found redis Memory Take up as much as 100%. I guessed that there might be threads in a large number of write caches , And then put redis The space is full , because redis The server configuration is volatile-lru Strategy : When the memory is full , There are a lot of cache writes , Just delete Set expiration time Of key Medium It hasn't been used for the longest time recently Of key.
Then I ran to redis The server puts the current rdb( memory dump ) Download a copy locally to analyze what it is key Writing data crazily , Found this key, I can find and use this in the program key Code for , And then do the corresponding processing .
Log in to Alibaba cloud , Go to the latest backup
1、 Download to a full volume key Of rdb file
Then execute the following command to install python2.7 And load rdb plug-in unit , Generate csv file .
2、 Put this rdb Files use rdbTools Turn it into csv file .
-
pip install rdb
# install rdb
-
rdb -c memory hins8714399_data_20191015223705.rdb > memory.csv
# take redis Memory snapshot file , Store in csv In the document
3、 Will change csv Documents can be imported directly into mysql In the database , And then use mysql Query for , You can find out the one with the largest memory consumption key
Be careful A little bit is adopt csv Import mysql The default generated field types are varchar, We need to change the type here to int type , Used for sorting queries .
4、mysql There's a memory library , And then execute
SELECT * from memory ORDER BY size_in_bytes desc LIMIT 0, 10
According to the use of memory from large to small , Before the memory is occupied 10 Of key
Found these expired on null Of key, Find out The code does not address these key Set expiration time , It's permanent key, Some more redis Set the queue for consumption , Write a lot of data to the queue that never expires , Then the consumption thread only 2 individual , It's faster to add to the queue , Queue consumption is slow , Backstage I put consumption redis The thread of the queue is set to 20、10、5 Find an optimal number of threads ,CPU The occupation is not too high , The queue is not stacked 、 Make full use of the performance of the machine , Solve the actual needs .
summary : Through a toss , Learned how to parse redis Of rdb Snapshot file , analysis redis Distribution of memory , Memory footprint , that key Take up a lot of , that key Account for less , There is also a memory elimination strategy , Why this key Expire first , The other one will expire later .
Expand 1: Interested students can check more redis Memory retirement strategy
- volatile-lru: Pick the least recently used data from the memory data set with expiration time Eliminate ;
- volatile-ttl: Select the data about to expire from the memory data set with the expiration time Eliminate ;
- volatile-random: Pick any data from the memory data set with the expiration time set Eliminate ;
- allkeys-lru: Pick the least recently used data from the memory data set Eliminate ;
- allkeys-random: Pick any data from the data set Eliminate ;
- no-enviction( deportation ): Exclusion data .( Default elimination strategy . When redis Memory data reaches maxmemory, Under this strategy , Go straight back to OOM error );
About maxmemory Set up , By means of redis.conf in maxmemory Parameter setting , Or by order CONFIG SET Dynamic modification
About the setting of data elimination strategy , By means of redis.conf Medium maxmemory-policy Parameter setting , Or by order CONFIG SET Dynamic modification
</article>
边栏推荐
- Unity xlua monoproxy mono proxy class
- 多表操作-自关联查询
- Yolov5 target detection neural network -- calculation principle of loss function
- 2048 game logic
- 以交互方式安装ESXi 6.0
- Redis集群的重定向
- redis 集群模式原理
- How did the situation that NFT trading market mainly uses eth standard for trading come into being?
- 一次生产环境redis内存占用居高不下问题排查
- 13.(地图数据篇)百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换
猜你喜欢
Redis集群的重定向
[deploy pytoch project through onnx using tensorrt]
AutoCAD -- mask command, how to use CAD to locally enlarge drawings
12.(地图数据篇)cesium城市建筑物贴图
Riddle 1
[crawler] bugs encountered by wasm
[office] eight usages of if function in Excel
pytorch-多层感知机MLP
【无标题】
MySQL giant pit: update updates should be judged with caution by affecting the number of rows!!!
随机推荐
一次生产环境redis内存占用居高不下问题排查
【 YOLOv3中Loss部分计算】
How to protect user privacy without password authentication?
Acid transaction theory
[singleshotmultiboxdetector (SSD, single step multi frame target detection)]
How can China Africa diamond accessory stones be inlaid to be safe and beautiful?
[office] eight usages of if function in Excel
redis 集群模式原理
Risc-v-qemu-virt in FreeRTOS_ Scheduling opportunity of GCC
13.(地图数据篇)百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换
Mysql统计技巧:ON DUPLICATE KEY UPDATE用法
Harbor image warehouse construction
【yolov3损失函数】
POJ 3176 cow bowling (DP | memory search)
CDGA|数据治理不得不坚持的六个原则
Unity Xlua MonoProxy Mono代理类
11. (map data section) how to download and use OSM data
How to get a token from tokenstream based on Lucene 3.5.0
The most comprehensive new database in the whole network, multidimensional table platform inventory note, flowus, airtable, seatable, Vig table Vika, flying Book Multidimensional table, heipayun, Zhix
redis主从中的Master自动选举之Sentinel哨兵机制