跟运维学 Linux - 03

这篇具有很好参考价值的文章主要介绍了跟运维学 Linux - 03。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

权限机制和性能指标

前面我们学完了操作文件用户相关知识,本篇学习权限性能相关知识。

文件的属性看起

看 linux 的权限,先从文件的属性看起

ls -l 加 -d 是只看这个文件夹:

pjl@pjl-pc:~$ sudo ls -ld /root
drwx------ 8 root root 4096 7月  18 16:20 /root

最左侧的 d 表示目录,这个前面已经说过,后面的又是什么?我们两部分来讲:rwx------root root

属主和属组

root root,第一个 root 表示这个文件夹是 root 用户,后一个 root 表示这个文件夹是 root 组的。

专业的叫法,前者叫做文件夹的属主,后者叫做文件夹的属组

我们再来看一个:

pjl@pjl-pc:~$ ls -ld /home/test19
drwxr-xr-x 2 test19 test19 4096 7月  18 15:32 /home/test19

这里说明 /home/test19 文件夹的主人是 test19 用户,test19 组成员也是这个文件夹的主人。

既然 root 用户和 root 组成员是 /root 文件夹的主人,是否就可以对其为所欲为

权限位

明白了属主和属组,如何看一个一个的文件以及文件夹的权限?

我们把 rwx------ 拆成三部分来看:rwx------

root 用户的权限对应第一部分:rwx。可读,可写,可执行。

root 组成员的权限对应第二部分:---。不可读、不可写、不可执行

权限位由三部分组成:读权限(r/-) + 写权限(w/-) + 执行权限(x/-)。

位权限和普通文件的关系

普通文件和文件夹的权限位,代表的意思不一样。

先看普通文件:

pjl@pjl-pc:~/linux-test$ ls -l
总用量 4
-rwxrw-r-- 1 pjl pjl 6 7月  19 17:14 a.txt

pjl 用户对应的权限是可读可写可执行(rwx)。

对于 pjl 组成员的权限是可读可写不可执行(rw-)。

对于普通文件,可读就是能读取(例如 cat、head)文件内容:

pjl@pjl-pc:~/linux-test$ cat a.txt
apple

对于普通文件,可写权限就是可以通过编辑保存。如果没有写权限,vim 不让你保存。

执行权限,后续讲脚本的时候再说,简单理解:是否可以运行脚本。

// 创建一个脚本
pjl@pjl-pc:~/linux-test$ ls -l
-rw-rw-r-- 1 pjl pjl 26 7月  19 17:40 a.sh
// 没有执行权限
pjl@pjl-pc:~/linux-test$ ./a.sh
-bash: ./a.sh: 权限不够
// 增加执行权限
pjl@pjl-pc:~/linux-test$ chmod u+x a.sh
pjl@pjl-pc:~/linux-test$ ls -l
-rwxrw-r-- 1 pjl pjl 26 7月  19 17:40 a.sh
// 能执行了
pjl@pjl-pc:~/linux-test$ ./a.sh
hello
位权限和文件夹的关系

以这个文件夹为例:

pjl@pjl-pc:~/linux-test$ ls -ld dir1
d-wxrwxr-x 2 pjl pjl 4096 7月  19 18:38 dir1

文件夹如果有读权限,才能使用 ls:

pjl@pjl-pc:~/linux-test$ ls dir1
ls: 无法打开目录'dir1': 权限不够

文件夹写权限,表示我们可以改变这个文件夹下的内容。比如创建文件、删除文件、创建子文件夹。

pjl@pjl-pc:~/linux-test$ touch dir1/b.txt
pjl@pjl-pc:~/linux-test$ ls dir1
ls: 无法打开目录'dir1': 权限不够

文件夹执行权限,表示能不能进入这个文件夹。最直接就是 cd 能不能用:

pjl@pjl-pc:~/linux-test$ cd dir1
pjl@pjl-pc:~/linux-test/dir1$ ls
ls: 无法打开目录'.': 权限不够
// 虽然文件夹没有读权限,但可以查看里面的文件内容
pjl@pjl-pc:~/linux-test/dir1$ cat b.txt
i am b.txt
其他用户权限

rwx------ 的最后三位(---)表示其他用户的权限。也就是属主和属组以外的用户。

例如 /root 文件夹对于其他用户的权限是---:不可读、不可写、不可执行

drwx------ 12 root root 4096 6月  14 09:35 /root

我们创建用户 user1 去读、写和执行:

// 不可读
user1@pjl-pc:~$ ls /root
ls: 无法打开目录'/root': 权限不够
// 不可执行
user1@pjl-pc:~$ cd /root
-bash: cd: /root: 权限不够
// 不可写
user1@pjl-pc:~$ touch /root/a.txt
touch: 无法创建 '/root/a.txt': 权限不够
user1@pjl-pc:~$

修改权限

如何修改权限,用一个小任务来举例说明。

linux 下有一个用户 user1,他的家目录是 /home/user1,不过目前他无法进入自己的家目录。

pjl@pjl-pc:~/linux-test$ su - user1
输入密码
su: warning: cannot change directory to /home/user1: 权限不够
-bash: /home/user1/.bash_profile: 权限不够
user1@pjl-pc:/home/pjl/linux-test$ ls /home/user1
ls: 无法打开目录'/home/user1': 权限不够

作为系统管理员,我们要查看原因:

pjl@pjl-pc:~/linux-test$ ls -ld /home/user1
d--------- 4 root root 4096 7月  19 19:01 /home/user1

这里有两个问题:

  • 属主和属组不应该是 root,而应该是用户自己
  • 位权限都是 -

使用 chown 改变属主和数组:

pjl@pjl-pc:~/linux-test$ sudo chown -R user1:user1 /home/user1
pjl@pjl-pc:~/linux-test$ ls -ld /home/user1
d--------- 4 user1 user1 4096 7月  19 19:01 /home/user1

现在还是进不去,需要修改位权限。

使用 chmod 修改位权限:

// u=rwx 给属主位权限设置成 rwx
pjl@pjl-pc:~/linux-test$ sudo chmod u=rwx /home/user1
pjl@pjl-pc:~/linux-test$ ls -ld /home/user1
drwx------ 4 user1 user1 4096 7月  19 19:01 /home/user1
// g=rx 给属组位权限位设置成 rx
pjl@pjl-pc:~/linux-test$ sudo chmod g=rx /home/user1
pjl@pjl-pc:~/linux-test$ ls -ld /home/user1
drwxr-x--- 4 user1 user1 4096 7月  19 19:01 /home/user1

Tip:用数字设置权限位更方便

// 同时设置属主、属组和其他用户权限
// 7 = r(4) + w(2) + x(1)
// 7 = r(4) + w(2) + x(1)
// 4 = r(4)
pjl@pjl-pc:~/linux-test$ sudo chmod 774 /home/user1
pjl@pjl-pc:~/linux-test$ ls -ld /home/user1
drwxrwxr-- 4 user1 user1 4096 7月  19 19:01 /home/user1

现在就正常了:

pjl@pjl-pc:~/linux-test$ su - user1
输入密码
user1@pjl-pc:~$ pwd
/home/user1
user1@pjl-pc:~$ ls -ld /home/user1
drwxrwxr-- 4 user1 user1 4096 7月  19 19:01 /home/user1

性能指标

作为 linux 工程师,会听到主管:现在服务器够用吗,要在买几台吗?

先登录一遍服务器,查看当前容量和性能,在做决定。

在 linux 下如何查看性能指标?赶快学一下!

磁盘

先执行命令 df(disk free 的缩写)查看磁盘使用情况:

pjl@pjl-pc:~/linux-test$ df -h
文件系统        容量  已用  可用 已用% 挂载点
udev            3.8G  4.0K  3.8G    1% /dev
tmpfs           790M  1.4M  788M    1% /run
/dev/sda3        98G   23G   71G   25% /
/dev/sda2       2.0G  319M  1.5G   18% /boot
/dev/sda1       511M   11M  501M    3% /boot/efi
/dev/sda5       708G   55G  618G    9% /data

感觉看不太懂!

我们最关心的是还剩多少空间,我们可以关注可用已用%这2列。

每一行就是硬盘上各个分区的使用情况。

什么是分区,和windows的C盘、D盘有什么不同?带着这些疑问我们进入下一节。

硬盘和分区

以我们熟悉的 windows 为例,一块硬盘分成了两个分区(01、02),通常我们使用鼠标点击图标(C盘)进入分区01,或者用鼠标点击图标(D盘)进入分区02

在 linux 中,一块磁盘也分成两个分区(01、02),不同的是没有图标(C盘、D盘),也没有鼠标,而是通过目录进入对应的分区。

我们用命令 fdisk -l(全称是 fixed disk) 查看有几块硬盘,几个分区:

pjl@pjl-pc:~/linux-test$ sudo fdisk -l
Disk /dev/sda:931.53 GiB,1000204886016 字节,1953525168 个扇区
Disk model: WDC WD10EZEX-08W
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 4096 字节
I/O 大小(最小/最佳):4096 字节 / 4096 字节
磁盘标签类型:gpt
磁盘标识符:ADCE9537-745A-4B58-94AD-E260DD688EF6

设备             起点       末尾       扇区   大小 类型
/dev/sda1        2048    1050623    1048576   512M EFI 系统
/dev/sda2     1050624    5244927    4194304     2G Linux 文件系统
/dev/sda3     5244928  214960127  209715200   100G Linux 文件系统
/dev/sda4   214960128  424675327  209715200   100G Linux 文件系统
/dev/sda5   424675328 1934133247 1509457920 719.8G Linux 文件系统
/dev/sda6  1934133248 1953523711   19390464   9.3G Linux swap

最上方的 /dev/sda 表一块磁盘。前面我们说过“linux 中一切都是文件”。在 linux 中,用来表示硬盘和分区(或者说设备)的文件,统一放在 /dev 目录中。

sda 代表什么?将其拆开 sd 和 a。sd 表示 SATA 接口的硬盘,而 a 表示第一块硬盘,如果有更多的硬盘,就顺序往下排列:b、c、d...

Tip: 一般个人电脑,硬盘接口分两种,老式的 ide硬盘 和新的 SATA硬盘,现在基本上都是 SATA。

磁盘上的分区就用数字表示,例如sda硬盘的分区:/dev/sda1、/dev/sda2...

结合 fdisk 和 df

现在我们结合 fdisk 和 df 来查看:

pjl@pjl-pc:~/linux-test$ sudo fdisk -l
输入密码
Disk /dev/sda:931.53 GiB,1000204886016 字节,1953525168 个扇区
Disk model: WDC WD10EZEX-08W
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 4096 字节
I/O 大小(最小/最佳):4096 字节 / 4096 字节
磁盘标签类型:gpt
磁盘标识符:ADCE9537-745A-4B58-94AD-E260DD688EF6

设备             起点       末尾       扇区   大小 类型
/dev/sda1        2048    1050623    1048576   512M EFI 系统
/dev/sda2     1050624    5244927    4194304     2G Linux 文件系统
/dev/sda3     5244928  214960127  209715200   100G Linux 文件系统
/dev/sda4   214960128  424675327  209715200   100G Linux 文件系统
/dev/sda5   424675328 1934133247 1509457920 719.8G Linux 文件系统
/dev/sda6  1934133248 1953523711   19390464   9.3G Linux swap

df 最左侧是分区,最右侧是分区的入口:

pjl@pjl-pc:~/linux-test$ df -h
文件系统        容量  已用  可用 已用% 挂载点
udev            3.8G  4.0K  3.8G    1% /dev
tmpfs           790M  1.4M  788M    1% /run
/dev/sda3        98G   23G   71G   25% /
/dev/sda2       2.0G  319M  1.5G   18% /boot
/dev/sda1       511M   11M  501M    3% /boot/efi
/dev/sda5       708G   55G  618G    9% /data
tmpfs           3.9G  8.0K  3.9G    1% /dev/shm
tmpfs           5.0M  4.0K  5.0M    1% /run/lock
tmpfs           3.9G     0  3.9G    0% /sys/fs/cgroup
tmpfs           790M   48K  789M    1% /run/user/1000

比如分区 /dev/sda3 入口是 /。前面我们已经知道 / 是根目录。

比如 /dev/sda5 入口是 /data。

现在我们做一个试验,来验证分区的入口。

现在 /dev/sda5 已用容量是 55590 M:

// -m 表示M
pjl@pjl-pc:/data$  df -m |egrep 'sda5|可用'
文件系统        1M-块  已用   可用 已用% 挂载点
/dev/sda5      724447 55590 631989    9% /data

我们在 /data 目录中使用 dd 生成一个200M的文件:

// /dev/zero 是一个特殊的文件,当你读它的时候,它会提供无限的空字符
pjl@pjl-pc:/data$ dd if=/dev/zero of=swapfile bs=1M count=200
记录了200+0 的读入
记录了200+0 的写出
209715200 bytes (210 MB, 200 MiB) copied, 0.224172 s, 936 MB/s
pjl@pjl-pc:/data$ ls
home  lost+found  root  swapfile  usershare

现在 /dev/sda5 已用容量比之前正好多 200M。

pjl@pjl-pc:/data$ df -m |egrep 'sda5|可用'
文件系统        1M-块  已用   可用 已用% 挂载点
/dev/sda5      724447 55790 631789    9% /data

tmpfs 又是什么,带着疑问我们进入下一节。

内存

快速理解内存

平时我们玩电脑,无非就是听音乐、玩游戏、看电影,这些数据平时统统放在硬盘中,因为硬盘空间大。以玩下象棋为例,电脑会有如下一个大致流程:

  1. cpu 向硬盘发送命令,找到所需的游戏数据
  2. 游戏数据从硬盘调入到内存中
  3. 每玩一步都在内存中。cpu 大多数也只和内存互动数据,因为内存比硬盘快得多。
  4. 游戏结束,将结果保存到磁盘中,等待下次在玩。

Tip:硬盘容量最大,存放的都是暂时不用的;内存通过不能永久存储数据,断电就清空了;计算机速度:cpu > 内存 > 硬盘;如果 cpu 直接和硬盘交互,就得苦苦等候。

free 查看内存指标

既然内存那么重要,我们最关心的是还有多少可用内存。

命令很简单,使用 free 查看:

pjl@pjl-pc:/data$ free -h
              总计         已用        空闲      共享    缓冲/缓存    可用
内存:       7.7Gi       1.6Gi       1.3Gi        10Mi       4.8Gi       5.9Gi
交换:       9.2Gi          0B       9.2Gi

我们看第一行,总共有 7.7 G,已使用 1.6G。

Tip:共享,几乎无实际用处。

空闲1.3G,可用5.9G,哪个才是剩余内存?为了弄清楚,我们得说一下 linux 内存原理

free 查看内存的基本原理

古代打战使用屯田制,没有战争的时候,士兵就去耕田。

这里的空闲(free)就是不打战也不耕田的士兵。

缓冲/缓存(cache/buffer)就是耕田的士兵。

在君王眼中,耕田没有打战的优先级高。一旦战事来临,空闲的和耕田的都可派出去。

可用=空闲+缓冲/缓存。所以这里剩余内存是 5.9G。

空闲很好理解,那么缓冲/缓存代表什么意思?请看下节。

内存中的 cache 高速缓存

内存的速度很快,但远远赶不上 cpu。

把 CPU 比作给灾区送水的车,内存比作灾区用桶取水的人,车出水的速度很快,灾区的人用桶取水的速度却很慢,水车不能一直在这等着灾民慢慢取水,因为还得去其他灾区送水。

cache 就好比蓄水池,cpu 把水快速放入蓄水池就走了,灾区的人从蓄水池中慢慢取水。

就像这样:

cpu(送水车) -> cache(蓄水池) -> 内存(灾区取水的人)
buffer 缓冲区

buffer 缓冲区是为了提高写硬盘的速度。

打个比方,姑娘摘苹果要运到集市卖,如果每摘一个苹果就放到卡车中,效率太低,所以会准备一个箩筐,先把苹果放入箩筐,箩筐满了在一次性放入卡车。

buffer 就是一个大箩筐,每当有大量数据要写入硬盘时,把零碎的数据先放入 buffer。当 buffer 积累到一定程度,在一次性写入硬盘。

cache 是为了高效的读,buffer 为了高效的写

现在缓冲/缓存是 4585 M:

pjl@pjl-pc:/data$ free -m
              总计         已用        空闲      共享    缓冲/缓存    可用
内存:        7890        1897        1407          14        4585        5778
交换:        9467           9        9458

清理缓存后是 579 M:

// 清理页缓存、目录项和inode缓存
pjl@pjl-pc:/data$ sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
pjl@pjl-pc:/data$ free -m
              总计         已用        空闲      共享    缓冲/缓存    可用
内存:        7890        1846        5463          13         579        5856
交换:        9467           1        9466

测试失败:打算先查看缓存,通过执行 time find /,预期缓存增加,下次在执行 time find /,所花费的的时间应该减少

CPU

这一项指标有点抽象,不像硬盘和内存那么一目了然。

有朋友可能就会疑问:不就是一个 cpu 使用率吗,比如现在用了80%,一个数字而已。

很遗憾,linux 没有这样直观的方法来看 cpu,而是需要掌握一定的CPU使用率计算公式,才能了解当下 cpu 的高低。

先学什么是进程

进程就是一个应用。

比如你使用浏览器是一个进程,使用QQ又是一个进程。

由于 windows 是图形化的,所以看得比较清楚。

而在 linux 中想要看到进程,就需要一些方法。

比如我们用 ping 命令就会开启一个进程:

pjl@pjl-pc:/data$ ping 192.168.1.110
PING 192.168.1.110 (192.168.1.110) 56(84) bytes of data.
64 bytes from 192.168.1.110: icmp_seq=1 ttl=64 time=0.028 ms
64 bytes from 192.168.1.110: icmp_seq=2 ttl=64 time=0.021 ms
64 bytes from 192.168.1.110: icmp_seq=3 ttl=64 time=0.020 ms
64 bytes from 192.168.1.110: icmp_seq=4 ttl=64 time=0.034 ms
64 bytes from 192.168.1.110: icmp_seq=5 ttl=64 time=0.032 ms
64 bytes from 192.168.1.110: icmp_seq=6 ttl=64 time=0.031 ms
64 bytes from 192.168.1.110: icmp_seq=7 ttl=64 time=0.028 ms
64 bytes from 192.168.1.110: icmp_seq=8 ttl=64 time=0.036 ms
64 bytes from 192.168.1.110: icmp_seq=9 ttl=64 time=0.034 ms
64 bytes from 192.168.1.110: icmp_seq=10 ttl=64 time=0.038 ms
...

现在这个命令行完全被这个进程占据,我们不能再输入其他命令。这个叫前台进程

与之对应的有后台进程,比如:

// >> 是追加内容。这里是将 ping 的输出追加到 ping.log 文件中
pjl@pjl-pc:~/linux-test$ ping 192.168.1.110 >> ping.log &
[1] 486803
pjl@pjl-pc:~/linux-test$

通过 & 读做and,把它放在命令行末尾,可以将该进程放在后台。于是我们可以继续敲别的命令。

这个命令是否还在执行,我们可以通过 tail -f 看到ping 进程正不停地往文件中写数据:

pjl@pjl-pc:~/linux-test$ tail -f ping.log
64 bytes from 192.168.1.110: icmp_seq=5 ttl=64 time=0.031 ms
64 bytes from 192.168.1.110: icmp_seq=6 ttl=64 time=0.022 ms
64 bytes from 192.168.1.110: icmp_seq=7 ttl=64 time=0.031 ms
64 bytes from 192.168.1.110: icmp_seq=8 ttl=64 time=0.029 ms
64 bytes from 192.168.1.110: icmp_seq=9 ttl=64 time=0.024 ms
64 bytes from 192.168.1.110: icmp_seq=10 ttl=64 time=0.026 ms
...
ps 查看用户自己的进程
pjl@pjl-pc:~/linux-test$ jobs
[1]+  运行中               ping 192.168.1.110 >> ping.log &

这里看到刚才放在后台运行的 ping 进程。

jobs 只能看到那些用 & 放入后台的进程,更多的后台进程无法显示。

接下来我们需要使用:ps(process status) 进程状态。

直接输入 ps 通常只会显示两个进程:

pjl@pjl-pc:~/linux-test$ ps
    PID TTY          TIME CMD
  56412 pts/1    00:00:00 bash
 499971 pts/1    00:00:00 ps
pjl@pjl-pc:~/linux-test$ whoami
pjl

第一个 bash,指当前用户正在用的命令行是 bash;第二个 ps 是刚才我们运行了 ps,所以自身产生了一瞬间的进程,也同样显示在这里。

使用另一个用户输入 ps,虽然也是 bash 和 ps 进程,从进程号(PID)我们可以看出,每个用户的进程是不同的。

user1@pjl-pc:~$ ps
    PID TTY          TIME CMD
 499859 pts/0    00:00:00 bash
 499878 pts/0    00:00:00 ps
user1@pjl-pc:~$ whoami
user1
ps 查看全局进程

通过 ps -ef 查看操作系统所有的进程:

pjl@pjl-pc:~/linux-test$ ps -ef | head
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 7月19 ?       00:00:19 /sbin/init splash
root           2       0  0 7月19 ?       00:00:00 [kthreadd]
root           3       2  0 7月19 ?       00:00:00 [rcu_gp]
root           4       2  0 7月19 ?       00:00:00 [rcu_par_gp]
root           6       2  0 7月19 ?       00:00:00 [kworker/0:0H-kblockd]
root           8       2  0 7月19 ?       00:00:00 [mm_percpu_wq]
root           9       2  0 7月19 ?       00:00:04 [ksoftirqd/0]
root          10       2  0 7月19 ?       00:00:36 [rcu_sched]
root          11       2  0 7月19 ?       00:00:00 [migration/0]

PID 表示进程Id,PPID是父进程id。

先有父亲,然后有儿子,我们可以看到有许多进程的 PPID 是 1:

UID          PID    PPID  C STIME TTY          TIME CMD
root         889       1  0 7月19 ?       00:08:41 /usr/sbin/NetworkManager --no-daemon
root         890       1  0 7月19 ?       00:00:00 /usr/bin/python3 /usr/bin/location.py
root         894       1  0 7月19 ?       00:00:00 /usr/bin/python3 /usr/bin/hedron-domain-hook.py
root         897       1  0 7月19 ?       00:00:04 /usr/sbin/kylin-daq-daemon
root         903       1  0 7月19 ?       00:00:00 /usr/bin/systime
root         906       1  0 7月19 ?       00:00:00 /usr/bin/miracat_uibcctl
root         907       1  0 7月19 ?       00:00:00 /bin/bash /usr/bin/execstart.sh
syslog       910       1  0 7月19 ?       00:00:00 /usr/sbin/rsyslogd -n -iNONE

PID 是 1 的进程通常是操作系统的启动进程(叫init),是所有进程的祖先进程,它是系统启动时第一个被创建的进程。

STIME 是进程启动的时间,例如这里是7月19,如果是24小时内,则会显示 13:11 类似的时间。

Time 指从启动到当前,一共花费cpu多长时间。

我们可能会疑惑:第一个进程(PID=1)从昨天开始运行,到现在才花费 cpu 19秒,这个进程不是一直都在吗?请看下节

Tip: ps -efps aux 都是用于显示当前系统运行的进程信息,但输出格式略有差异。

pjl@pjl-pc:~/linux-test$ ps aux | head
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.1 168768 11008 ?        Ss   7月19   0:19 /sbin/init splash
root           2  0.0  0.0      0     0 ?        S    7月19   0:00 [kthreadd]
root           3  0.0  0.0      0     0 ?        I<   7月19   0:00 [rcu_gp]
root           4  0.0  0.0      0     0 ?        I<   7月19   0:00 [rcu_par_gp]
root           6  0.0  0.0      0     0 ?        I<   7月19   0:00 [kworker/0:0H-kblockd]
root           8  0.0  0.0      0     0 ?        I<   7月19   0:00 [mm_percpu_wq]
root           9  0.0  0.0      0     0 ?        S    7月19   0:04 [ksoftirqd/0]
root          10  0.0  0.0      0     0 ?        I    7月19   0:36 [rcu_sched]
root          11  0.0  0.0      0     0 ?        S    7月19   0:00 [migration/0]
用令牌计算CPU使用率

我们可以同时在计算机上干很多事,比如写作、听音乐、玩游戏...,cpu 不是同一时刻做多件事(cpu 同一时刻只能执行一条指令),而是一会干这个,一会干那个,只是速度非常快。

cpu 工作方式是这样的:有好多任务等待 cpu 处理,根据先来后到的原则以及优先级的不同,会给任务分配CPU令牌(也就是时间片)。

为了方便理解,假如一个时间片是1秒,在60秒内,cpu 的工作情况如下:

10秒 20秒 10秒 10秒 10秒
进程01 cpu没事做 进程01 进程02 进程03

cpu 给进程01分配了20秒的时间,进程01的cpu使用率是20/60≈33%。

如果需要瞬时的使用率,将这60秒想象成1秒即可。

通过 ps aux 可以查看当前系统运行的进程,里面就有 ping,进程号是 486803:

// 存在 ping 进程
pjl@pjl-pc:~$ ps aux |egrep 'ping|PID'
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
pjl   486803  0.0  0.0  12028   840 pts/1    S    15:58   0:00 ping 192.168.1.110
pjl   489792  0.0  0.0  11652   692 pts/0    S+   16:07   0:00 grep -E --color=auto ping|PID

上文我们留了一个问题:某个进程从昨天开始运行,到现在为止才花费 cpu 19秒。

这个进程可能只需要在特定事件或触发条件下执行任务,并且在其他时间内保持休眠或空闲状态。

我们启动一个进程,让 cpu 负荷:

// 会一直运行下去
pjl@pjl-pc:~$ md5sum /dev/zero &
[1] 141089

执行 top 命令:

top - 10:48:29 up 8 days, 17:13,  2 users,  load average: 75.53, 82.12, 83.52
任务: 944 total,   8 running, 936 sleeping,   0 stopped,   0 zombie
%Cpu(s): 22.6 us, 35.7 sy,  0.0 ni, 41.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   7890.4 total,   2118.1 free,   2614.4 used,   3157.8 buff/cache
MiB Swap:   9468.0 total,   9392.5 free,     75.5 used.   5055.7 avail Mem

 进程号 USER      PR  NI    VIRT    RES    SHR    %CPU  %MEM     TIME+ COMMAND
 141089 pjl   20   0   10596    484    420 R  93.3   0.0   1:00.62 md5sum
 143856 root      20   0   12336   2208   2016 S  10.8   0.0   0:00.24 ping
 134506 pjl   20   0   26996   7032   5564 R   9.0   0.1   0:12.68 sshd
 143657 root      20   0   12336   2408   2216 S   7.6   0.0   0:00.37 ping
 143665 root      20   0   12336   2208   2016 S   7.6   0.0   0:00.36 ping

抽取这段信息来看,md5sum cpu 使用率 93.3,而CPU空闲的时间比例(41.7 id) 是 41.7,也就是 cpu 使用率是 58.3,对不上!

// 空闲时间(id)
%Cpu(s): 22.6 us, 35.7 sy,  0.0 ni, 41.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

 进程号 USER      PR  NI    VIRT    RES    SHR    %CPU  %MEM     TIME+ COMMAND
 141089 pjl   20   0   10596    484    420 R  93.3   0.0   1:00.62 md5sum

在按一下键盘 1,笔者这里显示有4个核,所以 58.3 是4核总共的 cpu 使用率。文章来源地址https://www.toymoban.com/news/detail-623029.html

top - 10:49:01 up 8 days, 17:14,  2 users,  load average: 91.78, 86.05, 84.82
任务: 966 total,  42 running, 923 sleeping,   0 stopped,   1 zombie
// 4 核
%Cpu0  : 34.6 us, 30.6 sy,  0.0 ni, 34.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :  1.1 us, 33.7 sy,  0.0 ni, 65.2 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu2  :  7.6 us, 41.6 sy,  0.0 ni, 50.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  : 32.7 us, 37.2 sy,  0.0 ni, 30.1 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   7890.4 total,   2115.8 free,   2616.2 used,   3158.3 buff/cache
MiB Swap:   9468.0 total,   9392.5 free,     75.5 used.   5053.9 avail Mem

 进程号 USER      PR  NI    VIRT    RES    SHR    %CPU  %MEM     TIME+ COMMAND
 141089 pjl   20   0   10596    484    420 R  90.0   0.0   1:09.05 md5sum
 144346 root      20   0   12336   2136   1944 R   8.7   0.0   0:00.27 ping
 144364 root      20   0   12336   2308   2116 R   6.5   0.0   0:00.20 ping
 144354 root      20   0   12336   2236   2044 R   6.1   0.0   0:00.19 ping
 134506 pjl   20   0   26996   7032   5564 S   5.8   0.1   0:13.91 sshd
 144248 root      20   0   12336   2124   1932 R   5.5   0.0   0:00.37 ping
 144370 root      20   0   12336   2124   1932 R   3.2   0.0   0:00.10 ping
 144371 root      20   0   12336   2124   1932 R   2.9   0.0   0:00.09 ping
 144280 root      20   0   12336   2204   2012 S   2.6   0.0   0:00.15 ping
 144345 root      20   0   12336   2236   2044 S   2.6   0.0   0:00.08 ping

到了这里,关于跟运维学 Linux - 03的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【性能测试】运维测试01之性能测试整体认知包括:TPS、请求响应时间、事务响应时间、并发用户数、吞吐量、吞吐率、点击率、资源使用率等性能指标详细介绍

    性能测试整体认知包括:TPS、请求响应时间、事务响应时间、并发用户数、吞吐量、吞吐率、点击率、资源使用率。 1.1 需求一 1.熟悉Linux、windows等操作系统,熟悉shell脚本; ⒉.熟悉jvm调优, tomcat调优等基础策略 3.熟悉mysq数据库,熟练掌握javascript、java、python、groovy等至少一门

    2024年02月16日
    浏览(29)
  • Linux 常见性能指标 -- 磁盘

    本系列记录操作系统常见性能指标,写这个主要是记录也是回顾,笔记很长,拆分了几个部分,本篇记录 磁盘 的性能指标 简单描述:I/O 请求从发出到收到响应的间隔时间 是衡量磁盘性能的关键指标,响应时间越短,说明磁盘的处理速度越快。响应时间受到磁头寻道时间、

    2024年01月23日
    浏览(29)
  • Linux 常见性能指标 -- 网络

    本系列记录操作系统常见性能指标,写这个主要是记录也是回顾,笔记很长,拆分了几个部分,本篇记录 网络 的性能指标 日常最常见的问题就是 ping 能不能通,telnet 端口通不通,来判断网络是否正常。但是有些时候会发现访问变慢了,操作响应慢了,是网络卡了?所以需要

    2024年01月25日
    浏览(69)
  • Linux性能瓶颈分析之TOP指标分析

    1.查看cpu基础信息 2.查看cpu详细信息 3.统计cpu信息 如图所示: us :表示 CPU 在用户态运行的时间百分比,通常用户态 CPU 高表示有应用程序比较繁忙。 sy :表示 CPU 在内核态运行的时间百分比,通常内核态 CPU 越低越好,否则表示系统存在某些瓶颈。 ni :表示用 nice 修正进程

    2024年02月11日
    浏览(60)
  • Linux 服务器性能参数指标怎么看?

    这里只是一些简单的工具查看系统的相关参数,当然很多工具也是通过分析加工 /proc、/sys 下的数据来工作的,而那些更加细致、专业的性能监测和调优,可能还需要更加专业的工具(perf、systemtap 等)和技术才能完成哦。毕竟来说,系统性能监控本身就是个大学问。   ➜ ~ to

    2024年02月12日
    浏览(50)
  • Linux(03) Debian系统新建用户,赋予其ROOT权限;Debian系统删除用户

    方式① :在root权限下,useradd只是创建了一个用户名,如 (useradd +用户名 ),它并没有在/home目录下创建同名文件夹,也没有创建密码,因此利用这个用户登录系统,是登录不了的,为了避免这样的情况出现,可以用 (useradd -m +用户名)的方式创建,它会在/home目录下创建同

    2024年02月03日
    浏览(35)
  • 云计算第1阶段_Linxu基础知识_day03,Linux运维面试题选择题

    ├── boot ├── dev ├── etc ├── home ├── lib - usr/lib ├── lib64 - usr/lib64 ├── media ├── mnt ├── opt ├── proc ├── root ├── run ├── sbin - usr/sbin ├── srv ├── sys ├── tmp ├── usr └── var 目录介绍(了解): /root #root用户的家目录 /home #存储

    2024年04月13日
    浏览(36)
  • jmeter 在linux服务器中执行性能测试、监听服务器资源指标

    下载apache-jmeter-5.5文件; 下载ServerAgent-2.2.3文件; 解压apache-jmeter-5.5文件;(需先安装java环境) 找到apache-jmeter-5.5apache-jmeter-5.5bin目录,运行 ApacheJMeter.jar 创建 测试计划 、 线程组 、 HTTP请求 及各类监听组件; 保存脚本为 xxx.jmx 文件。 将apache-jmeter-5.5.tgz 压缩包上传至服务器,

    2024年02月09日
    浏览(62)
  • Linux系统运维:性能监视和分析工具sar命令详解

    目          录 一、sar工具介绍 二、sar工作原理 (一)原理概述 (二)sar数据收集器 三、sar命令语法 四、sar主要功能介绍 (一)功能概述 (二)CPU统计数据 (三)磁盘I/O统计数据 (四)网络统计数据 1、是使用-n DEV选项的sar输出 2、关于网络错误的信息可以用sar -n EDE

    2024年02月21日
    浏览(60)
  • 云计算第1阶段_Linxu基础知识_day03,字节跳动8年老Linux运维面试官经验谈

    5 远程连接sshd服务 ps:sshd默认端口号:22 5.1 手动修改默认端口号 6 文件拷贝、移动、删除 6.1 拷贝文件或目录 6.2 移动文件或目录 **ps:**判断上一条命令是否执行成功 命令:echo $? 如果返回值为0,证明我们上一条命令执行是成功的, 如果返回值非0,证明我们上一条命令执行

    2024年04月12日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包