redis想获取服务器状态,redis之服务器

redis服务器中的serverCron函数默认每100毫秒执行一次,这个函数负责管理服务器的资源,并保持服务器自身的良好运转

1. 更新服务器时间缓存

为了减少系统调用获取当前时间,服务器状态中的unixtime属性和mstime属性被用作当前时间的缓存。只有在使用高精度时间的功能时,才会再次执行系统调用获取当前时间

2. 更新LRU时钟(10s)

服务器状态中的lruclock属性保存了服务器的lru时钟,这个属性也是服务器时间缓存的一种。每个redis对象都会有一个lru属性,这个lru属性保存了对象最后一次被命令访问的事件,当服务器需要计算一个数据库键的空转时间,程序会用服务器的lruclock属性记录的时间减去对象的lru属性记录的事件,得出结果即为对象的空转时间

3. 更新服务器每秒执行命令次数

serverCron函数中的trackOperationsPerSecond函数会以每100ms一次的频率执行,这个函数的功能时以抽样计算的方式,估算并记录服务器在最近一秒钟处理的命令请求数量,这个值可以通过INFO status命令的instantaneous_ops_per_sec域查看

4. 更新服务器内存峰值记录

服务器状态中的stat_peak_memory记录了服务器的内存峰值大小

5. 处理SIGTERM信号

SIGTERM信号的处理器函数,是打开服务器状态的shutdown_asap标识,每次serverCron函数运行时,程序都会对服务器状态的shutdown_asap属性进行检查,并根据属性的值决定是否关闭服务器

6. 管理客户端资源

调用clientsCron函数,检查客户端与服务器之间的连接超时与否和释放缓冲区大小->重新分配

7. 管理数据库资源

调用databasesCron函数,对服务器中的数据库进行删除过期键,收缩字典等操作

8. 执行被延迟的BGREWRITEAOF

服务器的aof_rewrite_scheduled标识记录了服务器是否延迟了BGREWRITEAOF命令,

9. 检查持久化操作的运行状态

服务器状态使用rdb_child_pid属性和aof_child_pid属性记录执行BGSAVE命令和BGREWRITEAOF命令的子进程的ID,

这两个属性也可以用来检查两个命令是否正在执行,只要其中一个不是-1,程序就会执行一次wait3函数,如果有信号到达,那么表示有后台命令执行完成,需要执行响应的后续操作;如果没有信号到达,不做动作。如果两个属性均为-1:先查看是否有BGREWRITEAOF被延迟;再查看服务器的自动保存条件是否已经被满足;之后是检查服务器设置的aof重写条件是否满足。

10. 将aof缓冲区中的内容写入aof文件

11. 关闭异步客户端(缓冲区大小超出限制的客户端)

12. 增加cronloops计数器的值

服务器的初始化可以大致分为以下几个步骤

1. 初始化服务器状态结构,由initServerConfig函数完成

2. 载入配置选项, initServerConfig函数

3. 初始化服务器数据结构,initServer函数

4. 还原数据库状态

5. 执行事件循环

阅读(6718) | 评论(0) | 转发(0) |

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值