1 硬盘相关情况
1.1 使用 df 命令快速查看硬盘状况
1.2 初识 Linux 下的硬盘和分区
- 在 Windows 下,一块硬盘被分成两个分区,一般是 C 盘、D 盘形式表示。如果想要访问这个分区,直接用鼠标双击就可以进去。
- 在 Linux 下,一块硬盘是不变的,有两个分区也是不变的。变化的是没有了桌面图标和鼠标。取而代之的是用一个目录作为分区的表示和入口。
1.3 Linux 下分区查看和访问
使用 fdisk -l 命令可以宏观地来查看当前有几个硬盘,几个分区。 上图 /dev/sda 就代表了一块硬盘,/dev/目录,之前学过操作系统都是文件,所以一个硬盘或者一个分区也都是用文件表示。而在 Linux 下,用来表示硬盘和分区(或者说是设备)的文件统一放在 /dev/目录下。
再来说 sda 代表什么,这里其实应该把这个词拆开来看:sd 和 a 。sd 代表这是一个 SATA 接口的硬盘(一般的个人计算机硬盘接口分为两种,即老式的 IDE 硬盘和新的 SATA 硬盘,现在基本上都是 SATA),而 a 在这里表示第一块硬盘,如果还有更多的硬盘,就会顺序地往下排列:sdb,sdc,sdd 等。
1.4 结合 fdisk 命令和 df 命令查看硬盘分区信息
上图中 df 命令的输出结果的左边第一列指的就是分区。
df 命令的输出结果的最右边一列,表示分区的入口在哪里。” / “ 也是一个目录,由于它是最开始的第一个目录,所以又叫他根目录。
df 命令输出结果的两个分区分别对应的入口一个是 ” / “,另一个是 ” /boot “,在执行 cd 命令时可以选择进入。
2 Linux 下查看内存
2.1 快速理解内存是什么
上图是 CPU 和内存、硬盘之间的关系。电影,电子书,游戏,听歌,这些电影,游戏,音乐都是统称为数据。所有的这些数据都是保存在硬盘中,因为硬盘的地方最大。
如果说要打游戏,会有上图一个简单的流程。
第一步: CPU 向硬盘发起命令,把所需的游戏数据先定位好,方便查找
第二步:游戏数据会从硬盘调入内存中
第三步:一边玩游戏,CPU 一边把每一步走棋都进行计算,把这些中间下棋的结果先暂停都存在内存中
第四步:不想玩的时候,在游戏中单机保存游戏,这样当前的战局结果会被存入硬盘中,想接着玩,会先从内存中读取上一次的结果。
说明
硬盘作为最大的容器,平时所有的内容都存在里面(大多数存的内容都暂时不用),不过它的速度最慢,所以 CPU 不可能一直跟它索要数据,不然 CPU 要等很久。 内存的容量比硬盘要小很多,但内存的速度比硬盘快的多。所以例如玩游戏,CPU 会大部分都只和内存互动,把中间产生的所有结果都先放在内存中,只有当单击保存游戏以后,这个结果才会被存回硬盘中。 一般的内存都不能永久存储数据,一旦突然停电,没有保存,那么当前你的游戏会全白玩,内存中的数据都丢失。 内存的好坏会直接影响计算机的运行速度。 为什么内存这么重要?因为内存的存取速度远远超过硬盘的速度,脱离了内存,计算机 CPU 就不能正常地存取数据,所以内存是直接影响计算性能的重要部件。 计算机部件运行速度排行为:CPU > 内存 > 硬盘
2.2 使用 free 命令快速查看 Linux 下的内存指标
free -h --查看内存指标
- total:指一共有多少内存
- used:正在被使用的内存
- free:完全空闲的内存
- shared:共享内存(几乎没有实际的用处)
- buffer/cache:缓存缓冲内存
- available:真是可用的内存
2.3 使用 free 命令查看内存的基本原理
简单举例说明,从汉代开始,中国的打仗就开始采用屯田制,简单地说就是:士兵们有战争时就去打仗,空闲时就去耕田,一举两得。对应到Linux的内存使用,其实跟这个例子比较类似。
- 休息的士兵:不打仗、不耕田,就在军营中天天吃饭休息。这一部分的士兵就是相当于 free 内存,也就是空闲的内存。
- 耕田的士兵:在地里耕种,也在给国家做着贡献,不过在国君的眼中,耕田的优先级远没有打仗的高,所以说这些耕种的士兵其实也是处于随时待命的状态,一旦前方战事吃紧,那么他们立刻可以换上军装去打仗,并不耽误。这一部分的士兵相当于 buffer/cache 内存。
- 正在打仗的士兵:就是在使用中的士兵,在前方厮杀忙得不可开交。这就是相当于 used,也就是忙中内存。
- 回头看,所谓的还有多少内存,其实就是休息的士兵+耕田的士兵总和就是随时可用的士兵。也就是 available 是真实可以用的内存, available = free + buffer/cache。
2.4 Linux 中的 cache 高速缓存
把 CPU 比作救火车,cache 比作蓄水池,内存比作拎水桶的用户,假设一个救灾用火的场景。灾区缺水,一辆救火车负责把大量的水运送给用户,而救火车用的是高压水枪,出水的速度极快无比,但是灾区的用户只能每个人拎着水桶来取水,如果救火车用高压枪直接喷给用户,那就变成洗澡,不是送水。
既然这样,救火车不得不大幅度降低自己的效率,把高压水枪的压力减到最小,慢慢地给用户出水,用户逐个排队来救火车、高压水枪这里取水,这样的话,救火车效率就变得极其低下,还有那么多受灾的地区,盼着救火车赶过去。
为了解决这个问题,如果在中间设置一个蓄水池,让救火车先把所有的水快速地冲入进去,然后救火车就赶去别处,而用户们自己再去蓄水池取水,这样问题就解决了。
CPU 的速度最快,内存速度远远赶不上 CPU(虽然内存比硬盘快的多,但跟 CPU 比起来还是太慢),那么 CPU 为了提高效率,就先把中间数据交给 cache 高速缓存,然后 CPU 把剩下的任务甩给 cache 缓存,自己就去忙别的,接下来,内存再到缓存中取数据。cache 可以理解为上面的蓄水池。
2.5 Linux 内存中的 buffer 缓冲区
buffer 叫做缓冲区,主要为了提高写硬盘的速度。
例子:樱桃大丰收,村里决定集体采摘,然后用大货车运到集市上去卖。假如每人每摘下来一个樱桃,就立刻送到卡车上去,效率太低。所以每人配备一个大箩筐,采摘下来的樱桃先放满一箩筐,然后再依次送到卡车上装车。这样就大大提高了效率,也缓解了村民的工作压力。
buffer缓冲区就是这个大箩筐,每当有大量数据要被写入硬盘时,把所有的零碎数据(一个个的樱桃),先统一放入 buffer 中,当buffer 积累到一定量时,再一次性写入硬盘。这样,既提高了效率,又大大地缓解了硬盘的压力。这就是内存中的 buffer 缓冲区。
总的来说,cache 为了高效率地读,buffer 为了高效率地写,这两种都是内存缓冲技术,也是 Linux 管理内存高效的重要标志。
[root@localhost /]# echo 3 > /proc/sys/vm/drop_caches --清理 cache 缓存
3 Linux 下查看 CPU 指标
3.1 什么是进程
一个正在跑着的应用就是一个进程。例如:在 win 上正用虚拟机学 Linux,而同时还戴着耳机听音乐。桌面最下面的任务栏里还开着浏览器,开着 QQ。这些都是正在运行的软件,不管你当前的注意力放在哪一个软件上,他们都是进程。在Linux下无法直观地看到进程。需要一些命令才操作。
- ping命令是一个用来检查网络通不通的小工具,不是 Linux 系统独有的,其他操作系统也都有的。ping 命令可以持续不断地往一个 IP地址上发送数据包,如果到达这个 IP 的网络是通的,那么就会如上显示。用ping命令后,就开启了一个持续不断运行的进程,它每秒钟发送一次,收回一次。
127.0.0.1 是一个 IP 地址,不过这个是本机的 IP地址。ping 127.0.0.1 等于是检查自己通不通,肯定是通的。
这样就开启了一个持续不断的运行的程序,也就是一个进程。ping 命令一旦开始运行后,当前的命令行就被它占据了,只能盯着看,不能做别的事,Ctrl + C 组合键可以终止这个进程。像 ping 这样,把当前使用的命令行或者窗口给霸占的进程,叫做前台进程或者是跟你直接互动的进程。
3.2 执行和观察后台
ping 127.0.0.1 >> ping.log &
--(>> ping.log)把 ping 的输出信息,保存到一个文件中,& 当前进程放入后台进程,使用 >> 符号把内容放入文件又称作重定向。
jobs
--查看以 & 方式放入后台的进程,只能看到 & 放入后台的进程tail -f ping.log
-- 可以不断追踪文件的末尾内容tail -f 的效果感觉就像看着 ping 命令输出一样,其实这是每一次 ping 后把一条输出信息存进去的效果。
jobs 命令显示出在后台的进程,并且一个进程前面都有一个进程号。 使用 【 fg % 进程号 】 就可以让这个进程回到前台。
3.3 使用 ps 命令观察 Linux 下用户自己的进程
ps 其实是process status 的缩写,意思就是进程状况。bash 意思是当前正在用的这个命令行,ps 其实是因为刚刚运行了 ps 命令。PID 是进程 id 的意思,在 Linux 中一个进程有独一无二的进程 PID。在只输入 ps (不加任何参数)的情况下,看到的结果输出是属于自己的,意思就是说同一台服务器上,张三输入 ps 后看到的是属于自己的进程。
3.4 使用 ps 命令观察 Linux 下全局的进程
ps -ef --查看整个操作系统的进程
PID:父进程 ID 号
先有父进程,然后子进程是由父进程创建出来的,父子之间就有一种连带的关系、归属的关系。
STIME:进程启动的时刻。就是这个进程什么时间被开起来的。启动时间如果超过了 24 小时,就只能显示 年,月,日,不能显示具体是时分秒。
TIME:进程总共占用 CPU 的时间。
3.5 用令牌的形式计算 CPU 使用率
CPU 整体的工作形式好像是公交车,走一站停一下上几个人,继续去下一站。
在计算中,待处理的任务有很多,根据先来后到、优先级不同的原则,操作系统给这些任务合理地分配 CPU 令牌也就是时间片,有了令牌的任务,就好比是公交车有了乘客,那么公交车 CPU 到来的时候,载上指定的人数,然后继续往后面的站开。
假如现在 CPU 要处理三个任务(也就是三个进程),在 1min 的时间内,进程 01 一共使用了 10 + 10 = 20s 的时间,也就是说 CPU 为了进程 01,分配了 20s 的工作时间给他。那么在这 1min 的时间内,进程 01 的CPU的使用率是 20s / 60s * 100% = 33%。
其实,CPU 的使用率就是用时间累加的方式来计算。
3.6 top 命令查看 CPU 使用率
上下两部分是同时刷新的,默认情况下,每个几秒就刷新一次,如果连续按 Enter 键,也可以让 top 命令迅速刷新。
上半部分:显示 Linux 系统的整体状况,包括负载,进程数,CPU 使用率,内存等
下半部分:显示一个个的进程,跟ps命令相似,ps 命令更细致,这里是按照倒序排列,把当前使用资源最多的进程逐行显示出来。
lishisen@DESKTOP-HD7SLCE:~$ top
top - 17:15:29 up 2:33, 1 user, load average: 0.02, 0.01, 0.00
Tasks: 27 total, 1 running, 26 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 8059164 total, 7020104 free, 412116 used, 626944 buff/cache
KiB Swap: 2097152 total, 2097152 free, 0 used. 7409464 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 225060 8700 6620 S 0.0 0.1 0:00.29 systemd
第一行,任务队列信息,同 uptime 命令的执行结果
- 17:15:29:当前系统时间
- up 2:33:系统已经运行了多长时间
- 1 user:当前有1个用户登陆系统
- load average: 0.02, 0.01, 0.00:load average 数据是每隔5秒检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑 CPU 的数量,结果高于 5 的时候就表明系统在超负荷运转了,三个数值分别为 1 分钟、5 分钟、15分钟的负载情况
第二行,Tasks 任务(进程)
- 系统现在共有27个进程,其中处于运行中的1个,26个在休眠,stopped 状态有0个,zombie状态(僵尸)有0个。
第三行,cpu 状态信息
- 0.0 us:用户空间占用 CPU 的百分比
- 0.0 sy:内核空间占用 CPU 的百分比
- 0.0 ni:改变过优先级的进程占用 CPU 的百分比
- 100.0 id:空闲 CPU 百分比
- 0.0 wa:IO等待占用 CPU 的百分比
- 0.0 hi:硬中断占用 CPU 的百分比
- 0.0 si:软中断占用 CPU 的百分比
第四行,内存状态
- 8059164 total:物理内存总量
- 7020104 free:空闲内存总量
- 412116 used:使用中的内存总量
- 626944 buff/cache:缓存的内存量
第五行,swap 交换分区信息
- 2097152 total:交换区总量
- 2097152 free:空闲交换区总量
- 0 used:使用的交换区总量
- 7409464 avail Mem
第七行,各进程的状态监控
- PID:进程id
- USER:进程所有者
- PR:进程优先级
- NI:nice值,负值表示高优先级,正值表示低优先级
- VIRT:进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
- SHR:共享内存大小,单位kb
- S:进程状态。D=不可中断的睡眠状态,R=运行,S=睡眠,T=追踪/停止,Z=僵尸进程
- %CPU:上次更新到现在的 CPU 时间占用百分比
- %MEM:进程使用的物理内存百分比
- TIME+:进程使用的 CPU 时间总计,单位 1/100秒
- COMMAND:进程名称(命令名/命令行)
在 top 界面按一下数字 1 可以看到每一个核的使用率。