zoukankan      html  css  js  c++  java
  • redis与CPU、内存

    任何一个后端应用,包括代码都要考虑对于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如何能够高并发
  • 相关阅读:
    【嵌入式开发】写入开发板Linux系统-模型S3C6410
    大约cocos2d-X 3.x使用引擎版本自带的物理引擎Physics
    它们的定义PropertyPlaceHolder无法完成更换任务
    [Cocos2d-x]在Cocos2d-x 3.x如何通过版本号WebSocket连接server数据的传输
    Java 内存架构
    类似的微博推断客户关系sql声明
    Kienct与Arduino学习笔记(2) 深度图像与现实世界的深度图的坐标
    etl工具,kettle实现了周期
    Android中自定义checkbox样式
    ndroid网络(4):HttpClient必经之路----使用线程安全的单例模式HttpClient,及HttpClient和Application的融合
  • 原文地址:https://www.cnblogs.com/zhaowinter/p/10786862.html
Copyright © 2011-2022 走看看