Linux常用命令

本文将简要介绍常用Linux运维相关的命令如何使用

Free

功能:显示系统使用和空闲的内存情况,包括物理内存、交互区内存(swap)和内核缓冲区内存。共享内存将被忽略

命令参数

  • -g/-h 以 GB为单位/自适应单位 显示内存使用情况。
  • -s <间隔秒数>  持续观察内存使用状况。
  • -t  显示内存总和列。

示例

1
2
3
4
5
6
free -h
# docker的unbuntu容器
total used free shared buff/cache available
Mem: 1998 269 288 0 1441 1572
Swap: 1023 0 1023

输出介绍

  • Mem:内存

  • Swap:磁盘交换空间(虚拟内存

  • total:总计物理内存/交换空间的大小

  • used:已使用的物理内存/交换空间大小

  • free:可用内存/交换空间大小(对操作系统而言)

  • shared:多个进程共享的内存大小(已被废弃)

  • buff/cache:磁盘缓存的大小

  • available:可是用的内存/交换空间大小(对应用程序而言

buff/cache

  • A buffer is something that has yet to be “written” to disk.
  • A cache is something that has been “read” from the disk and stored for later use.

根据木桶短板理论,在目前的计算机系统中毫无疑问,磁盘IO是最慢的。因为传统的磁盘(见下图),需要访问某一扇区的数据,需要移动磁头到对应扇区,对应磁道,这些物理上的时间消耗在当今的计算机中实在是太慢了。因此需要提高计算机性能往往从更换外存设备为SSD入手。

基本概念

  • Page 页:进程中的块称为页,每个进程的页码都是从0开始,并且在主存中维护一个页表。
  • Page Frame 页帧:内存中的块称为页框,把可用的内存按照页框的大小,从0开始编号。
  • Block 块:外存中也已同样单位划分称为块

进程在执行时需要申请内存空间,就是要为每个页面分配主存中的可用页框,这就产生了页和页框的一一对应

Tips:区分页和页框是非常有必要的,页只是一个固定大小的数据块,可以存放在主存的页帧中也可以存放在外存的块中。

一般页的大小为4kB。页框大小等于页的大小。

地址结构

对于一个32位的系统,且页大小4K时,其地址结构为如下所示

31 ….. 12 11 … 0
页号P 页内偏移量

地址结构由页号页内偏移量组成:

页内偏移量为2的12次方 = 4KB

页号为2的20次方 = 4MB

页码*页内偏移量 = 4GB, 也就是32位地址内存寻址的极限。

页表

为了方便在内存中找到进程的每个页面所对应的物理页框,系统为每个进程建立了一张页表,记录页面在内存中对应的物理块号,一般存放在内存中

页表项的组成不同于地址结构,是由页号和块号组成的。

在配置页表后,进程执行时。通过查找页表,来获取每页在内存中的物理块号。页表的作用是实现从页号到物理块号的地址映射。

TLB快表(联想寄存器)

现在的访问流程是,获取数据页逻辑地址页码,去页表查询物理地址页码,根据物理地址页码查询内存或磁盘。

这样若数据在内存中,实际上是访问了两次内存的,快表的出现就是为了加快数据访问的速度。

通过在地址变换结构中增加一个具有并行查找能力的高速缓冲寄存器——快表,又称联想寄存器(TLB)用于存放当前访问过的页表项。因此,内存中的数据也称为慢表。

  1. CPU给出逻辑地址后,由硬件进行地址转换并将页号送入高速缓冲寄存器TLB,比较快表中的页号。
  2. 如果匹配成功,直接取出物理地址的页框号和页内偏移量组成新的物理地址。这样存取数据只经过一次内存。
  3. 若失败,则访问内存中的页表,在读出页表项后,将其存入快表,以便于后续再次访问。若快表已满则按一定算法进行淘汰。

Tips:有些处理机选择快表慢表同时查询,快表查询成功则结束慢表查询。

一般快表的的命中率高于90%,这样分页带来的速度损失就极大的降低了。快表的设定原理基于著名的局部性原理

局部性原理:所访问数据往往集中在连续的一片区域中。


top

命令功能

显示当前系统正在执行的进程的相关信息,包括进程ID、内存占用率、CPU占用率等

命令参数

  • -b 批处理

  • -c 显示完整的治命令

  • -I 忽略失效过程

  • -s 保密模式

  • -S 累积模式

  • -i<时间> 设置间隔时间

  • -u<用户名> 指定用户名

  • -p<进程号> 指定进程

  • -n<次数> 循环显示的次数

示例

1
2
3
4
5
6
7
8
9
10
11
top

top - 15:29:54 up 1 day, 21:20, 0 users, load average: 0.10, 0.03, 0.01
Tasks: 2 total, 1 running, 1 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.1 us, 0.9 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 2046748 total, 307648 free, 258716 used, 1480384 buff/cache
KiB Swap: 1048572 total, 1048572 free, 0 used. 1627892 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 18504 3480 3064 S 0.0 0.2 0:00.07 bash
17 root 20 0 36628 3184 2720 R 0.0 0.2 0:00.01 top

输出介绍

  • 第一行: 任务队列信息,同 uptime 命令的执行结果,具体参数说明情况如下:

    • 15:29:54 当前系统时间

    • up 1 day, 21:20:系统连续运行时间

    • 0 users:当前登录系统用户数

    • load average: 0.10, 0.03, 0.01 — load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。

      load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了

  • 第二行:Tasks — 任务(进程),具体信息说明如下:

    系统现在共有2个进程,其中处于运行中的有1个,1个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。

  • 第三行:cpu状态信息,具体属性说明如下:

    • 0.1%us — 用户空间占用CPU的百分比。 User

    • 0.9% sy — 内核空间占用CPU的百分比。 System

    • 0.0% ni — 改变过优先级的进程占用CPU的百分比

    • 99.0% id — 空闲CPU百分比

    • 0.0% wa — IO等待占用CPU的百分比 Wait

    • 0.0% hi — 硬中断(Hardware IRQ)占用CPU的百分比

    • 0.0% si — 软中断(Software Interrupts)占用CPU的百分比

  • 第四行:内存(详情见Free命令解析)

    对于内存监控,在top里我们要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。

  • 第五行:进程

    • PID — 进程id

    • USER — 进程所有者

    • PR — 进程优先级

    • NI — nice值。负值表示高优先级,正值表示低优先级

    • VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES

    • RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA

    • SHR — 共享内存大小,单位kb

    • S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程

    • %CPU — 上次更新到现在的CPU时间占用百分比

    • %MEM — 进程使用的物理内存百分比

    • TIME+ — 进程使用的CPU时间总计,单位1/100秒

    • COMMAND — 进程名称(命令名/命令行)

使用技巧

多U多核CPU监控

在top界面按下1开关,多核CPU数据显示。

高亮显示当前运行进程

敲击键盘“b”(打开/关闭加亮效果)

top交互命令

h 显示帮助画面,给出一些简短的命令总结说明

k 终止一个进程。

i 忽略闲置和僵死进程。这是一个开关式命令。

q 退出程序

r 重新安排一个进程的优先级别

S 切换到累计模式

s 改变两次刷新之间的延迟时间(单位为s),如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s

f或者F 从当前显示中添加或者删除项目

o或者O 改变显示项目的顺序

l 切换显示平均负载和启动时间信息

m 切换显示内存信息

t 切换显示进程和CPU状态信息

c 切换显示命令名称和完整命令行

M 根据驻留内存大小进行排序

P 根据CPU使用百分比大小进行排序

T 根据时间/累计时间进行排序

W 将当前设置写入~/.toprc文件中

相关资料

《操作系统概念》

竹子-博客 每天一个Linux命令系列