从Top命令入手
查看本机内存使用情况
top
或者(平时更推荐下面的方法,可动态可视化占用情况)12
yum install htop
htop
以下为top显示情况
top - 11:32:45 up 1:17, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 198 total, 2 running, 195 sleeping, 1 stopped, 0 zombie
%Cpu(s): 0.3 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 781.7 total, 84.3 free, 441.3 used, 256.2 buff/cache
MiB Swap: 1024.0 total, 854.0 free, 170.0 used. 210.9 avail Mem
top - 11:32:45 up 1:17, 1 user, load average: 0.00, 0.00, 0.00
当前时间为11:32:45,在线1小时17分钟,现有一个用户正在使用,最后一个字段意思是在过去的1min,5min,15min内的平均负载均为0
平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是在就绪队列里的进程数
只要就绪队列里有一个进程在排队就说明cpu很忙,工作饱和,也就是说,只要load average里任一数字超过1,就说明CPU很忙了,以下为进程处理流程图:
Tasks: 193 total, 1 running, 192 sleeping, 0 stopped, 0 zombie
进程数:共193个进程,1个正在运行,192正在休眠,0中止,0僵尸进程
什么是僵尸进程?
僵尸进程已经被杀死,不再运行,但是仍占用内存空间
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st
第一个cpu的使用情况,按1可以切换到下一个cpu,按2可以看到node模块的使用情况,以下为具体参数介绍,主要用到us,sy,ni三个参数
0.0 us 用户空间占用CPU百分比
0.3 sy 内核空间占用CPU百分比
0.0 ni 用户进程空间内改变过优先级的进程占用CPU百分比
100.0 id 空闲CPU百分比
0.0 wa 等待输入输出的CPU时间百分比
0.0 hi 硬中断(Hardware IRQ)占用CPU的百分比
0.0 si 软中断(Software Interrupts)占用CPU的百分比
0.0 st 用于有虚拟cpu的情况,用来指示被虚拟机偷掉的cpu时间
MiB Mem : 780.9 total, 125.3 free, 433.8 used, 221.8 buff/cache
MiB Swap: 1024.0 total, 850.5 free, 173.5 used. 223.1 avail Mem
内存,当物理内存(Mem)还剩30%时,系统就开始使用交换分区(swap),total,free,used分别表示各个部分的存储量
buff/cache 用作内核缓存的内存量
avail 代表可用于进程下一次分配的物理内存数量
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 246040 6832 3220 S 0.0 0.9 0:02.94 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
SHR:share,共享内存占用的空间,进程之间的通信方式共有六种:
- 共享内存
- 管道
- socket文件
- 队列
- 信号
- 信号量(锁)
指标 | 意义 |
---|---|
PR | 优先级 |
NI | nice值。负值表示高优先级,正值表示低优先级 |
VIRT | 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES |
RES | 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA |
SHR | 共享内存大小,单位kb |
S | 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程 |
%CPU | 上次更新到现在的CPU时间占用百分比,top是据此对进程进行排序的 |
%MEM | 进程使用的物理内存百分比 |
TIME+ | 进程使用的CPU时间总计,单位1/100秒 |
COMMAND | 命令名/命令行 |
进程与线程
定义
进程是竟争计算机系统资源的基本单位,每一个进程都有一个自己的地址空间
线程是 CPU 调度的一个基本单位
三句话弄懂进程与线程的关系
进程里面包含了线程,一个进程里面可以有很多线程,一个没有线程的进程可以被看作是单线程。
线程是操作系统可识别的最小执行和调度单位。
进程拥有一个完整的虚拟地址空间,不依赖于线程而独立存在;反之,线程是进程的一部分,没有自己的地址空间,与进程内的其他线程一起共享分配给该进程的所有资源。
为什么线程比进程省资源?
进程:pcb+code+data
线程:tcb+code+data
- 线程可以共享它所属的进程的资源,省下了进程间通过操作系统通讯的资源
- 线程没有自己的地址空间,不占用系统资源
为什么线程比进程省资源?
进程:pcb+code+data
线程:tcb+code+data
- 线程可以共享它所属的进程的资源,省下了进程间通过操作系统通讯的资源
- 线程没有自己的地址空间,不占用系统资源
因为以上两点因此节约了内存里存储代码的空间