当前位置:网站首页>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>
边栏推荐
- MySQL statistical skills: on duplicate key update usage
- [deploy pytoch project through onnx using tensorrt]
- Advanced technology management - what is the physical, mental and mental strength of managers
- Unity Xlua MonoProxy Mono代理类
- Mysql统计技巧:ON DUPLICATE KEY UPDATE用法
- 2048游戏逻辑
- 【yolov5.yaml解析】
- 如何让你的产品越贵越好卖
- What about SSL certificate errors? Solutions to common SSL certificate errors in browsers
- MySQL 巨坑:update 更新慎用影响行数做判断!!!
猜你喜欢
【云原生 | Kubernetes篇】Ingress案例实战(十三)
XML parsing
Is it difficult to apply for a job after graduation? "Hundreds of days and tens of millions" online recruitment activities to solve your problems
redis 集群模式原理
【使用TensorRT通过ONNX部署Pytorch项目】
[deploy pytoch project through onnx using tensorrt]
【L1、L2、smooth L1三类损失函数】
Ziguang zhanrui's first 5g R17 IOT NTN satellite in the world has been measured on the Internet of things
石油化工企业安全生产智能化管控系统平台建设思考和建议
The ninth Operation Committee meeting of dragon lizard community was successfully held
随机推荐
Harbor image warehouse construction
[loss functions of L1, L2 and smooth L1]
[configuration method of win11 multi-user simultaneous login remote desktop]
高校毕业求职难?“百日千万”网络招聘活动解决你的难题
紫光展锐全球首个5G R17 IoT NTN卫星物联网上星实测完成
Network five whip
idea设置打开文件窗口个数
11.(地图数据篇)OSM数据如何下载使用
How to get a token from tokenstream based on Lucene 3.5.0
Programmers are involved and maintain industry competitiveness
C#实现WinForm DataGridView控件支持叠加数据绑定
Ncp1342 chip substitute pn8213 65W gallium nitride charger scheme
【TFLite, ONNX, CoreML, TensorRT Export】
龙蜥社区第九次运营委员会会议顺利召开
技术管理进阶——什么是管理者之体力、脑力、心力
【yolov3损失函数】
Idea set the number of open file windows
[upsampling method opencv interpolation]
Prevent browser backward operation
[office] eight usages of if function in Excel