- ./proc是一个位于内存中的伪文件系统,该目录下保存的不是真正的文件和目录,而是一些运行时信息。例如系统内存、磁盘IO、设备挂载信息和硬件配置信息等。
- proc目录是一个控制中心,用户可以通过更改其中某些文件来改变内核的运行状态。
- proc目录也是内核提供给我们的查询中心,可以通过查看这些文件查看有关系统硬件和当前正在运行进程的信息。
- 使用proc目录文件系统来访问linux内核的内容,这个虚拟文件在内核空间和用户空间打开了一个通信窗口;
cpu load
kjk1@kkk-virtual-machine:~$ cat /proc/loadavg
0.15 0.05 0.01 1/826 111275
前三个值分别代表过去1、5、15分钟的系统负载平均值。系统负载平均值代表系统的繁忙程度。值越高,表示系统越忙。负载值大约等于系统当前运行的进程数,包括等待 CPU 的进程。如果这个值接近或超过 CPU 核心数,表示系统繁忙,可能会导致性能下降。
1/826:代表当前正在运行的进程数/系统中总进程数
111275:最近创建的进程的PID(进程标识符)
平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和 CPU 使用率并没有直接关系。
CPU使用率是指在单位时间内CPU处在非空闲态的时间比,反映了CPU的繁忙程度
平均负载为多少时合理
平均负载最理想的情况是等于 CPU 个数。
所以在评判平均负载时,首先你要知道系统有几个 CPU,这可以通过 top 命令或者从文件 /proc/cpuinfo 中读取
CPU 个数,我们就可以判断出,当平均负载比 CPU 个数还大的时候,系统已经出现了过载。
平均负载的含义上来,平均负载是指单位时间内,处于可运行状态和不可中断状态的进程数。
所以,它不仅包括了正在使用 CPU 的进程,还包括等待 CPU 和等待 I/O 的进程。
CPU 使用率,是单位时间内 CPU 繁忙情况的统计,跟平均负载并不一定完全对应。
cpu stat
cpu使用情况的统计信息
cpu softirqs
中断
中断其实是一种异步的事件处理机制,可以提高系统的并发处理能力
由于中断处理程序会打断其他进程的运行,所以,为了减少对正常进程运行调度的影响,中断处理程序就需要尽可能快地运行。
为了解决中断处理程序执行过长和中断丢失的问题,Linux 将中断处理过程分成了两个阶段,也就是上半部和下半部:
上半部用来快速处理中断,它在中断禁止模式下运行,主要处理跟硬件紧密相关的或时间敏感的工作。
下半部用来延迟处理上半部未完成的工作,通常以内核线程的方式运行。
分成顶半部和底半部两个阶段的中断处理机制有助于提高系统的响应速度和并发能力。它允许系统尽快地响应紧急事件,并在需要时延迟执行较长时间的处理。这种机制也有助于避免由于长时间中断而导致的系统不响应或性能下降的问题。
上半部直接处理硬件请求,也就是我们常说的硬中断,特点是快速执行;
而下半部则是由内核触发,也就是我们常说的软中断,特点是延迟执行。
mem info
free命令和cat /proc/meminfo
buffer和cache
Buffers 是对原始磁盘块的临时存储,也就是用来缓存磁盘的数据,通常不会特别大(20MB 左右)。这样,内核就可以把分散的写集中起来,统一优化磁盘的写入,比如可以把多次小的写合并成单次大的写等等。
Cached 是从磁盘读取文件的页缓存,也就是用来缓存从文件读取的数据。这样,下次访问这些文件数据时,就可以直接从内存中快速获取,而不需要再次访问缓慢的磁盘。
Buffer 是对磁盘数据的缓存,而 Cache 是文件数据的缓存,它们既会用在读请求中,也会用在写请求中。
net
/proc/net/dev 网络流入流出的统计信息,包括接收包的数量、发送包的数量,发送数据包时的错误和冲突情况等。
stress压测指令
代码实现
抽象类定义在monitor_inter.h中,其他子类都是继承;
在main函数中,通过一个vector将所有的子类实例装入;然后创建RPC客户端(和RPC服务端进行通信,将数据传送给RPC服务端);
使用智能指针创建了一个线程对象,在这个线程对象中,通过遍历vector其中各个对象的方法,获得更新数据;然后通过rpc客户端发送到服务端;
这个模块的数据交互是通过grpc将数据发送给客户端;