Linux操作系统的性能指标

2023年 10月 13日 75.3k 0

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 缓冲区

    image-20201022082434520

    buffer 叫做缓冲区,主要为了提高写硬盘的速度。

    例子:樱桃大丰收,村里决定集体采摘,然后用大货车运到集市上去卖。假如每人每摘下来一个樱桃,就立刻送到卡车上去,效率太低。所以每人配备一个大箩筐,采摘下来的樱桃先放满一箩筐,然后再依次送到卡车上装车。这样就大大提高了效率,也缓解了村民的工作压力。

    buffer缓冲区就是这个大箩筐,每当有大量数据要被写入硬盘时,把所有的零碎数据(一个个的樱桃),先统一放入 buffer 中,当buffer 积累到一定量时,再一次性写入硬盘。这样,既提高了效率,又大大地缓解了硬盘的压力。这就是内存中的 buffer 缓冲区。

    总的来说,cache 为了高效率地读,buffer 为了高效率地写,这两种都是内存缓冲技术,也是 Linux 管理内存高效的重要标志。

    [root@localhost /]# echo 3 > /proc/sys/vm/drop_caches 		--清理 cache 缓存
    

    3 Linux 下查看 CPU 指标

    3.1 什么是进程

    image-20201022083834355

    一个正在跑着的应用就是一个进程。例如:在 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 后看到的是属于自己的进程。

    image-20201022092223514

    3.4 使用 ps 命令观察 Linux 下全局的进程

    ps -ef		--查看整个操作系统的进程
    

  • PID:父进程 ID 号

    先有父进程,然后子进程是由父进程创建出来的,父子之间就有一种连带的关系、归属的关系。

  • STIME:进程启动的时刻。就是这个进程什么时间被开起来的。启动时间如果超过了 24 小时,就只能显示 年,月,日,不能显示具体是时分秒。

  • TIME:进程总共占用 CPU 的时间。

  • 3.5 用令牌的形式计算 CPU 使用率

    image-20201022094000717

    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 可以看到每一个核的使用率。

    相关文章

    服务器端口转发,带你了解服务器端口转发
    服务器开放端口,服务器开放端口的步骤
    产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
    如何使用 WinGet 下载 Microsoft Store 应用
    百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
    百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

    发布评论