cpu 基本信息

命令

  [plaintext]
1
$ lscpu

示例

  [plaintext]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 4 On-line CPU(s) list: 0-3 Thread(s) per core: 1 Core(s) per socket: 1 Socket(s): 4 NUMA node(s): 1 Vendor ID: GenuineIntel CPU family: 6 Model: 79 Model name: Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz Stepping: 1 CPU MHz: 2199.998 BogoMIPS: 4399.99 Hypervisor vendor: VMware Virtualization type: full L1d cache: 32K L1i cache: 32K L2 cache: 256K L3 cache: 30720K NUMA node0 CPU(s): 0-3

TOP 命令

命令

  [plaintext]
1
2
3
4
5
6
7
8
9
10
11
$ top top - 07:57:03 up 314 days, 22:07, 1 user, load average: 0.78, 0.74, 0.71 Tasks: 185 total, 1 running, 184 sleeping, 0 stopped, 0 zombie Cpu(s): 25.3%us, 0.2%sy, 0.0%ni, 74.5%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 3924152k total, 3654960k used, 269192k free, 298772k buffers Swap: 8388604k total, 11580k used, 8377024k free, 1705120k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 5035 ryo 20 0 5261m 1.2g 6468 S 101.1 30.9 444:48.63 java 27085 ryo 20 0 797m 109m 4188 S 0.3 2.9 368:07.60 filebeat

字段解释

VIRT:virtual memory usage 虚拟内存

  • 进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等

  • 假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量

RES:resident memory usage 常驻内存

  • 进程当前使用的内存大小,但不包括swap out

  • 包含其他进程的共享

  • 如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反

  • 关于库占用内存的情况,它只统计加载的库文件所占内存大小

SHR:shared memory 共享内存

  • 除了自身进程的共享内存,也包括其他进程的共享内存

  • 虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小

  • 计算某个进程所占的物理内存大小公式:RES – SHR

  • swap out后,它将会降下来

DATA

  • 数据占用的内存。如果top没有显示,按f键可以显示出来。

  • 真正的该程序要求的数据空间,是真正在运行中要使用的。

top 运行显示的调整

top 运行中可以通过 top 的内部命令对进程的显示方式进行控制。

内部命令

如下:

  [plaintext]
1
2
3
4
5
6
7
8
9
10
11
s – 改变画面更新频率 l – 关闭或开启第一部分第一行 top 信息的表示 t – 关闭或开启第一部分第二行 Tasks 和第三行 Cpus 信息的表示 m – 关闭或开启第一部分第四行 Mem 和 第五行 Swap 信息的表示 N – 以 PID 的大小的顺序排列表示进程列表 P – 以 CPU 占用率大小的顺序排列进程列表 M – 以内存占用率大小的顺序排列进程列表 h – 显示帮助 n – 设置在进程列表所显示进程的数量 q – 退出 top s – 改变画面更新周期

属性含义

  [plaintext]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
序号 列名 含义 a PID 进程id b PPID 父进程id c RUSER Real user name d UID 进程所有者的用户id e USER 进程所有者的用户名 f GROUP 进程所有者的组名 g TTY 启动进程的终端名。不是从终端启动的进程则显示为 ? h PR 优先级 i NI nice值。负值表示高优先级,正值表示低优先级 j P 最后使用的CPU,仅在多CPU环境下有意义 k %CPU 上次更新到现在的CPU时间占用百分比 l TIME 进程使用的CPU时间总计,单位秒 m TIME+ 进程使用的CPU时间总计,单位1/100秒 n %MEM 进程使用的物理内存百分比 o VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES p SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。 q RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA r CODE 可执行代码占用的物理内存大小,单位kb s DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb t SHR 共享内存大小,单位kb u nFLT 页面错误次数 v nDRT 最后一次写入到现在,被修改过的页面数。 w S 进程状态。(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程) x COMMAND 命令名/命令行 y WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名 z Flags 任务标志,参考 sched.h

默认情况下仅显示比较重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。

更改显示内容

可以通过下面的快捷键来更改显示内容。

通过 f 键可以选择显示的内容。

按 f 键之后会显示列的列表,按 a-z 即可显示或隐藏对应的列,最后按回车键确定。

按 o 键可以改变列的显示顺序。

按小写的 a-z 可以将相应的列向右移动,而大写的 A-Z 可以将相应的列向左移动。最后按回车键确定。

按大写的 F 或 O 键,然后按 a-z 可以将进程按照相应的列进行排序。而大写的 R 键可以将当前的排序倒转。

top使用方法:

使用格式:

  [plaintext]
1
top [-] [d] [p] [q] [c] [C] [S] [s] [n]

参数说明:

d:指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。

p: 通过指定监控进程ID来仅仅监控某个进程的状态。

q: 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。

S:指定累计模式。

s:使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。

i:使top不显示任何闲置或者僵死进程。

c: 显示整个命令行而不只是显示命令名。

常用命令说明:

Ctrl+L:擦除并且重写屏幕

K:终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。

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

q:退出程序

r: 重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。

S:切换到累计模式。

s:改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。

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

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

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

m: 切换显示内存信息。

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

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

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

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

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

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

chat

Q1-详细介绍一下 top 命令

top命令是一个用于实时监视系统性能的命令行工具。

它提供了有关运行中的进程、系统资源使用情况以及其他系统性能指标的实时信息。

以下是top命令的详细介绍:

命令格式:

  [bash]
1
top

主要输出信息:

top命令的输出信息主要包括以下几个部分:

  1. 系统总体信息
    • 系统时间。
    • 运行时间。
    • 登录用户数。
    • 系统负载(1分钟、5分钟和15分钟的负载平均值)。
  2. 进程信息
    • 进程总数。
    • 运行中的进程数。
    • 睡眠中的进程数。
    • 僵尸进程数。
  3. CPU信息
    • 用户空间使用的CPU百分比。
    • 系统内核使用的CPU百分比。
    • 空闲CPU百分比。
    • 等待I/O的CPU百分比。
    • 硬中断和软中断的CPU百分比。
  4. 内存信息
    • 总物理内存。
    • 已用内存。
    • 空闲内存。
    • 缓存使用情况。
    • 交换空间使用情况。
  5. 进程列表
    • 列出当前运行的进程,并显示其PID(进程ID)、用户、CPU使用百分比、内存使用百分比、进程状态等信息。
    • 默认按照CPU使用百分比排序,可以通过按键切换排序方式。

常用交互命令:

  • q:退出top
  • Space:刷新top显示。
  • k:终止进程,输入PID后按回车。
  • u:显示指定用户的进程。
  • M:按内存使用百分比排序进程。
  • P:按CPU使用百分比排序进程。

示例:

  [bash]
1
top

输出解释:

top的输出信息非常丰富,提供了对系统性能的全面监视。

你可以通过观察进程列表、CPU使用情况、内存使用情况等来诊断系统性能问题,并及时采取措施。

Q2-实际例子

  [plaintext]
1
top

效果如下:

  [plaintext]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
$ top top - 09:28:32 up 1:28, 1 user, load average: 0.00, 0.00, 0.00 Tasks: 34 total, 1 running, 32 sleeping, 1 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 MiB Mem : 7808.3 total, 6318.6 free, 516.2 used, 973.4 buff/cache MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 7061.6 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1127 root 20 0 771140 82952 22408 S 0.0 1.0 0:03.00 python3.10 143 root 20 0 1836144 55612 18172 S 0.0 0.7 0:06.68 snapd 1131 root 20 0 44208 37692 10248 S 0.3 0.5 0:02.72 python3 204 root 20 0 107216 21256 13088 S 0.0 0.3 0:00.02 unattended-upgr 140 root 20 0 30124 18596 9984 S 0.0 0.2 0:00.03 networkd-dispat 38 root 19 -1 47808 15172 14156 S 0.0 0.2 0:00.09 systemd-journal 1 root 20 0 167024 12556 8344 S 0.0 0.2 0:00.73 systemd 121 systemd+ 20 0 25260 12424 8488 S 0.0 0.2 0:00.06 systemd-resolve 377 dh 20 0 16936 9012 7676 S 0.0 0.1 0:00.03 systemd 151 root 20 0 15324 7388 6448 S 0.0 0.1 0:00.07 systemd-logind 62 root 20 0 21932 5812 4448 S 0.0 0.1 0:00.13 systemd-udevd 339 dh 20 0 6080 5108 3384 S 0.0 0.1 0:00.15 bash 142 syslog 20 0 222400 5072 4508 S 0.0 0.1 0:00.02 rsyslogd 407 dh 20 0 6068 5032 3380 S 0.0 0.1 0:00.01 bash 340 root 20 0 7520 4880 3968 S 0.0 0.1 0:00.00 login 133 message+ 20 0 8584 4548 3968 S 0.0 0.1 0:00.11 dbus-daemon 1295 dh 20 0 7812 3688 3088 R 0.7 0.0 0:00.03 top 1294 dh 20 0 7812 3580 2980 T 0.0 0.0 0:00.01 top 392 dh 20 0 168752 3364 16 S 0.0 0.0 0:00.00 (sd-pam) 1105 root 20 0 4780 3288 3040 S 0.0 0.0 0:00.03 subiquity-serve 131 root 20 0 4304 2652 2404 S 0.0 0.0 0:00.00 cron 75 root 20 0 4784 1772 1332 S 0.0 0.0 0:00.62 snapfuse 79 root 20 0 4712 1728 1228 S 0.0 0.0 0:02.27 snapfuse 1031 root 20 0 4960 1692 1200 S 0.0 0.0 0:00.75 snapfuse 850 root 20 0 4848 1636 1168 S 0.0 0.0 0:00.62 snapfuse 82 root 20 0 4768 1612 1144 S 0.0 0.0 0:00.67 snapfuse 2 root 20 0 2324 1188 1084 S 0.0 0.0 0:00.00 init-systemd(Ub 201 root 20 0 3236 1068 984 S 0.0 0.0 0:00.00 agetty

linux 如何查看机器的 cpu 压力?

在Linux系统上,你可以使用多种工具来查看机器的CPU压力。

以下是一些常用的方法:

  1. top命令: 打开终端并输入top,可以查看实时的系统状态信息,包括CPU使用情况、内存使用情况等。在top界面,CPU相关的信息会显示在顶部,包括CPU利用率、进程信息等。按下键盘上的q可以退出。

      [plaintext]
    1
    top
  2. htop命令: htop是一个更先进的交互式系统监视器,提供了比top更多的功能和更友好的用户界面。你可以使用包管理工具安装htop,例如在Ubuntu上:

      [plaintext]
    1
    sudo apt-get install htop

    安装完成后,输入htop即可打开htop。

  3. mpstat命令: mpstat用于显示多处理器系统的统计信息,包括每个处理器的使用情况。以下是一个示例:

      [plaintext]
    1
    mpstat

    你也可以指定采样的时间间隔和次数,例如:

      [plaintext]
    1
    mpstat 5 3

    上述命令将每5秒输出一次统计信息,共输出3次。

  4. sar命令: sar命令用于收集、报告和保存系统活动信息,包括CPU利用率。你可以使用以下命令:

      [plaintext]
    1
    sar

    若要查看特定时间段的CPU使用情况,可以使用-s选项,例如:

      [plaintext]
    1
    sar -u -s 10:00:00 -e 10:05:00

这些工具都可以帮助你监视系统的CPU使用情况,选择其中一个或多个根据你的需求进行使用。

如何查看 linux 是几核的?

要查看Linux系统有几个CPU核心,可以使用以下几种方法:

  1. lscpu命令: lscpu命令可以显示有关CPU架构和其他详细信息,包括核心数。

      [plaintext]
    1
    lscpu

    输出中的 “Core(s) per socket” 行表示每个物理CPU插槽中的核心数,而 “Socket(s)” 行表示系统中的物理CPU插槽数。

  2. /proc/cpuinfo文件: /proc/cpuinfo文件包含有关CPU的信息,包括核心数量。可以使用grep命令来筛选核心相关的信息:

      [plaintext]
    1
    grep -E '^processor|^physical id|^core id' /proc/cpuinfo | sort -u

    上述命令将输出每个处理器的编号、物理ID和核心ID,并通过sort -u去重。

  3. nproc命令: nproc命令用于显示系统上的CPU核心数量。

      [plaintext]
    1
    nproc

    该命令会直接输出CPU核心数。

这些方法中,lscpu通常是最简单和最直观的方式来查看CPU核心数。

选择其中一种方法根据你的需要进行查看。

如果是一个 8 核的 cpu,top 时一个进程占用 %CPU 50%,是什么意思?

当在top命令中看到一个进程占用 %CPU 50%,表示该进程正在使用系统的CPU资源,而且它正在使用整个系统CPU的一半。

这通常是相对于单个CPU核心的百分比。

对于一个8核的CPU,每个核心的最大使用率是100%,因此50%表示该进程正在使用系统中一个核心的一半的计算能力。

对于一个8核CPU,50%的CPU使用率可能是由于该进程在一个核心上占用50%,而其他7个核心处于空闲状态。这也可能是由于该进程在多个核心上以平均的方式分配了计算任务,从而导致整个系统CPU使用率的50%。

在多核系统中,系统总的CPU使用率是所有核心使用率的总和。

因此,如果有多个进程占用CPU,系统的总使用率可能会超过100%。

这是因为每个进程都可以在不同的核心上运行,使得它们的使用率相加超过100%。

参考资料

Linux tail 命令详解