一、INFO CPU
通过INFO CPU
命令可以查看Redis
进程对于CPU的使用情况,如下:
这几个字段的含义如下所示:
used_cpu_sys: System CPU consumed by the Redis server
used_cpu_user:User CPU consumed by the Redis server
used_cpu_sys_children: System CPU consumed by the background processes
used_cpu_user_children: User CPU consumed by the background processes
二、什么是System CPU
?什么是User CPU
?
CPU通常来说有三种状态:
- Idle, 空闲,什么也不做.
- Running a user space program,运行在用户态,例如
shell
或者chrome浏览器
等用户态程序。 - Running the kernel, 运行在内核态,管理中断或者资源,执行系统调用,例如用户态程序malloc内存,fork子进程等.
通过top
命令可以查看到CPU的信息:
%Cpu(s): 24.8 us, 0.5 sy, 0.0 ni, 73.6 id, 0.4 wa, 0.0 hi, 0.2 si, 0.0 st
关注的主要信息就是这三种us 用户态
,sy 内核态
,id 空闲
,这三个值加起来接近100.
其他字段信息解释见:http://blog.scoutapp.com/articles/2015/02/24/understanding-linuxs-cpu-stats
三、Redis INFO CPU 信息来源
实际上是通过调用 getrusage 这个系统调用完成的。
NAME
getrusage -- get information about resource utilization
int getrusage(int who, struct rusage *r_usage);
DESCRIPTION
getrusage() returns information describing the resources utilized by the current process, or all its terminated child processes.
可以统计一个进程占用的CPU信息,第二个参数是统计信息的结构体,将信息保存至结构体返回。
因此INFO CPU
命令输出的信息表示的是:从Redis启动到此刻,CPU所分别花费在系统和用户态的时间累积,因此只要Redis进程不退出,这个数值是不断变大的
,源码位置:
https://github.com/antirez/redis/blob/bb3b5ddd1968d2715acc37b63124ccf461276160/src/server.c#L2817
继续给文章开头启动的Redis
插入1G的数据,可以看见使用CPU
时间都增长了:
四、这个信息有什么作用?
未完待续…
20191107更新:
这个信息的作用见:https://groups.google.com/forum/#!topic/redis-db/XpOgZOA4dfY
总结一下就是:
- 对于Redis的开发者(社区贡献者),可以通过这个信息来看到Redis运行情况,即启动一段时间或者执行某个命令一段时间之后分别耗费在内核或者用户态的时间。
- 对于普通用户(Redis的使用者)了解这个信息没什么作用,也不能通过这个信息判断CPU或者Redis负载情况。