任何一个后端应用,包括代码都要考虑对于CPU和内存的影响.redis本质上类似于nodejs,单进程、单线程,事件驱动,但不同的是redis是CPU密集型的。这里列出了redis与内存CPU的相关考虑点。

单进程、单线程的redis如何实现高并发

同nodejs类似
* 优点:
1. 采用多路 I/O 复用技术可以让单个线程高效的处理多个连接请求;
2. 避免线程切换而消耗CPU
* 缺点:
1. 无法发挥多核CPU性能,不过可以通过在单机开多个Redis实例来完善

如果redis内存满了怎么办

  1. 增加内存
  2. 使用内存淘汰策略
  3. 搭建redis集群

如果redis导致CPU过高怎么办

  1. 连接数过多,通过redis-cli info | grep connected_clients查看当前连接
    解决:

    • 关闭僵尸连接; redis-cli登录后,client list查看所有客户端连接,client kill ${ip}:${port} 关闭连接;
    • 修改最大连接数maxclients: 10000,默认10000;
    • 修改redis timeout参数: 修改配置文件中的timeout 设置redis的keepalive时间。客户端断连的包发出去后,redis server没有接受到,则会出现redis server以为连接正常的情况。因此需要在redis server 启动超时设置,如果在一定的时间内,客户端没有消息过来,则redis server主动断开连接。
    • 修改redis进程的文件数限制: echo -n "Max open files 3000:3000" > /proc/PID/limits
    • 修改系统参数的最大文件数限制: /etc/security/limits.conf; redis服务器默认设置的最大连接数maxclients是10000,但是受服务器最大文件数影响,服务器默认最大文件数是1024,所以redis最大连接也为1024-32=992; 解决办法
  2. 慢查询,因为redis是单线程,如果有慢查询的话,会阻塞住之后的操作,通过redis日志查
  3. value值过大:如果是纯文本,可以考虑换种存储方式,如果是对象,可以考虑用hash;
  4. aof重写/rdb fork发生?瞬间会堵一下Redis服务器

redis性能优化

  1. Master最好不要做任何持久化工作,包括内存快照和AOF日志文件,特别是不要启用内存快照做持久化。
  2. 如果数据比较关键,某个Slave开启AOF备份数据,策略为每秒同步一次。
  3. 为了主从复制的速度和连接的稳定性,Slave和Master最好在同一个局域网内。
  4. 尽量避免在压力较大的主库上增加从库。
  5. 为了Master的稳定性,主从复制不要用图状结构,用单向链表结构更稳定,即主从关系为:Master<--Slave1<--Slave2<--Slave3.......,这样的结构也方便解决单点故障问题,实现Slave对Master的替换,也即,如果Master挂了,可以立马启用Slave1做Master,其他不变
  6. 使用Redis负载监控工具:redis-monitor,它是一个Web可视化的 redis 监控程序
  7. redis分库,这样方便于管理与维护。

redis占用资源监控工具——redis-monitor

部署
OK: init configuration file into /root/.redis-monitor/redis_monitor_config.py.
OK: database is initialed into /root/.redis-monitor/redis_monitor.db.

参考

  1. redis cpu占用过高排查
  2. 单进程单线程的Redis如何能够高并发

redis与CPU、内存的更多相关文章

  1. 设置Redis最大占用内存

    https://blog.csdn.net/happyrabbit456/article/details/54945667 Redis需要设置最大占用内存吗?如果Redis内存使用超出了设置的最大值会 ...

  2. Redis INFO CPU 信息详解

    一.INFO CPU 通过INFO CPU命令可以查看Redis进程对于CPU的使用情况,如下: 这几个字段的含义如下所示: used_cpu_sys: System CPU consumed by ...

  3. Redis所需内存 超过可用内存怎么办

    爬虫和转载请注明原文地址:博客园蜗牛 http://www.cnblogs.com/tdws/p/5727633.html Redis所需内存 超过可用内存怎么办 Redis修改数据多线程并发—Red ...

  4. 统计和分析系统性能【IO CPU 内存】的工具集合

    统计和分析系统性能[IO CPU 内存]的工具集合 blktrace http://www.oschina.net/p/blktrace 获取磁盘写入的信息 root@demo:~/install/p ...

  5. 分布式缓存技术redis学习系列(二)——详细讲解redis数据结构(内存模型)以及常用命令

    Redis数据类型 与Memcached仅支持简单的key-value结构的数据记录不同,Redis支持的数据类型要丰富得多,常用的数据类型主要有五种:String.List.Hash.Set和Sor ...

  6. 分布式缓存技术redis学习(二)——详细讲解redis数据结构(内存模型)以及常用命令

    Redis数据类型 与Memcached仅支持简单的key-value结构的数据记录不同,Redis支持的数据类型要丰富得多,常用的数据类型主要有五种:String.List.Hash.Set和Sor ...

  7. Redis 数据结构与内存管理策略(上)

    Redis 数据结构与内存管理策略(上) 标签: Redis Redis数据结构 Redis内存管理策略 Redis数据类型 Redis类型映射 Redis 数据类型特点与使用场景 String.Li ...

  8. Redis 数据结构与内存管理策略(下)

    Redis 数据结构与内存管理策略(下) 标签: Redis Redis数据结构 Redis内存管理策略 Redis数据类型 Redis类型映射 Redis 数据类型特点与使用场景 String.Li ...

  9. linux Java项目CPU内存占用高故障排查

    linux Java项目CPU内存占用高故障排查 top -Hp 进程号 显示进程中每个线程信息,配合jstack定位java线程运行情况 # 线程详情 jstack 线程PID # 查看堆内存中的对 ...

随机推荐

  1. 2017 Gartner数据科学魔力象限出炉,16位上榜公司花落谁家?

    https://www.leiphone.com/news/201703/iZGuGfnER4Sv2zRe.html 2017年Gartner数据科学平台(在2016年被称作“高级分析平台”)的魔力象 ...

  2. ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?

    官方已经给出解决方案:https://github.com/pyenv/pyenv/wiki/Common-build-problems#error-the-python-ssl-extension- ...

  3. sudo pip install MySQLdb

    安装数据库第三方包,报错: Could not find a version that satisfies the requirement MySQLdb (from versions: )No ma ...

  4. 使用 MarkDown & DocFX 升级 Rafy 帮助文档

    最近使用 DocFX 对 Rafy 框架的帮助文档进行了升级. SandCastle 之前 Rafy 框架的帮助文档,是使用 SandCastle 来编写的(https://github.com/EW ...

  5. 全文检索-Lucene.net

    Lucene.net是Lucene的.net移植版本,在较早之前是比较受欢迎的一个开源的全文检索引擎开发包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎. ...

  6. CentOS 6 安装HBase集群教程

    hbase0.99.2安装包下载(链接:https://pan.baidu.com/s/1dR-HB3P6mzsXVW6sLI8uxQ 密码:4g1n) 首先需要安装  zookeeper(点击查看) ...

  7. JS的事件绑定、事件流模型

    .t1 { background-color: #ff8080; width: 1100px; height: 40px } 一.JS事件 (一)JS事件分类 1.鼠标事件:click/dbclick ...

  8. vue项目在移动端(手机)调试

    查了很长一段时间的资料才搞好. 感悟就是:原来那么简单呐. 首要条件:同一局域网下(大致理解为链接相同的wifi) 1:命令行运行 ipconfig 2: 得到ipv4值, 用该值替换localhos ...

  9. Myeclipse+selenium2.0+Junit+TestNg环境搭建

    这周末把自动化的环境搭好了,在网上也百度了很多,现在分享下,希望大家少走一点歪路. 需要用到的安装包都在这个里面,自取: 链接:https://pan.baidu.com/s/10ohf757ztgN ...

  10. IDEA设置生成带注释的getter和setter解决方案 (图文教程)

    近日在研究重构代码的时候有用到idea的不少插件,比如CheckStyle,同时下载了阿里的开发规约,收到不少启发. 规约中会要求所有的方法都有Javadoc,但是通常我们用idea默认生成的gett ...