概括性
- 线程 == 多个执行实例;
- 多线程是一种编程模型,多线程并不一定需要多CPU多Core, 单CPU单Core系统依然可以运行多线程程序(虽然最大化利用多CPU多Core的处理能力是多线程程序设计的一个重要目标)
- 【时间分片技术】 -- cpu 亲和性 & 绑核
1个人无法同时做多件事,单CPU/单Core也不可以,操作系统通过 时间分片技术 应对远多于CPU/Core数的多任务执行的挑战。也可以把有些任务只分配给某些人去完成,这对应到 CPU亲和性和绑核。
相关查看命令
lscpu
lscpu -- 这个很不错!
- CPU(s): 系统中的逻辑CPU总数
- Thread(s) per core: 每个物理核心支持的逻辑线程数,
例如支持超线程技术的CPU通常为2 【什么是超线程哇???】
mpstat
显示各个CPU的统计信息
mpstat -- 显示各个CPU的统计信息
mpstat
Linux 5.4.0-113-generic (hostname) 08/17/2021 _x86_64_ (4 CPU)
12:00:00 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
12:10:01 AM all 1.50 0.00 0.50 0.10 0.00 0.20 0.00 0.00 0.00 97.70
12:10:01 AM 0 1.00 0.00 0.40 0.20 0.00 0.10 0.00 0.00 0.00 98.30
12:10:01 AM 1 1.70 0.00 0.30 0.10 0.00 0.20 0.00 0.00 0.00 97.70
12:10:01 AM 2 1.80 0.00 0.60 0.10 0.00 0.10 0.00 0.00 0.00 97.40
12:10:01 AM 3 1.40 0.00 0.70 0.00 0.00 0.40 0.00 0.00 0.00 97.50
- CPU: 代表CPU的编号。当显示all时,表示对所有CPU的汇总统计。
- %usr: 用户态CPU时间的百分比。指在用户空间执行的任务消耗的处理器时间。
【高%usr值可能表示CPU密集型应用正在运行,比如计算密集的处理或数据压缩】
- %nice: 经过调整优先级的用户态CPU时间的百分比。指运行经过nice命令调整优先级的进程所消耗的处理器时间。 【不是很懂?】
- %sys: 内核态CPU时间的百分比。指内核空间执行的任务消耗的处理器时间。
【高%sys值可能表示有大量的系统调用或内核操作,比如大量的I/O操作】
- %iowait: I/O等待时间的百分比。表示CPU等待I/O操作完成而消耗的时间
【高%iowait值通常表示硬盘或网络I/O瓶颈】
- %irq: 硬中断(硬件中断)处理时间的百分比。指硬件中断处理程序消耗的处理器时间
- %soft: 软中断(软件中断)处理时间的百分比。指软中断处理程序(通常是设备驱动程序)的处理消耗的处理器时间
- %steal: 虚拟化中"偷窃"时间的百分比。表示虚拟机管理程序在虚拟机上运行其他进程时消耗的时间。高%steal值通常出现在虚拟化环境中,表示虚拟机资源争用。
- %guest: 客户机CPU时间的百分比。指在Hypervisor上运行的客户机操作系统消耗的时间
- %gnice: 经调整优先级的客户机CPU时间的百分比。与%guest类似,但指经过nice调整优先级的客户机任务。
- %idle: 空闲时间的百分比。当CPU没有任务执行且未处于等待状态时消耗的时间。高%idle值表示CPU大部分时间处于空闲状态
使用建议
- 高
%usr
值:检查是否有CPU密集型应用正在运行,可能需要优化代码或分配更多CPU资源。- 高
%sys
值:可能存在大量系统调用或内核操作,检查是否有不必要的系统调用或I/O操作。- 高
%iowait
值:表示存在I/O瓶颈,考虑优化存储设备或分配更多带宽。- 高
%steal
值:常见于虚拟化环境,表示虚拟机管理程序抢占了CPU时间。考虑优化虚拟机配置。
vmstat
用于报告系统的虚拟内存、进程、CPU活动、磁盘I/O、分页和系统调用的统计信息。它可以帮助你快速了解系统的性能瓶颈和资源使用情况。
vmstat 1 5
将每秒报告一次系统统计信息,共5次。
vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 83560 12374 3044920 0 0 1 1 4 6 1 0 99 0 0
0 0 0 83560 12374 3044920 0 0 0 0 113 204 0 0 100 0 0
0 0 0 83560 12374 3044920 0 0 0 0 79 150 0 0 100 0 0
-
procs 板块
- r: 运行队列中的进程数。表示有多少个进程正在等待CPU时间。如果这个值长期高于CPU核心数,可能表示CPU瓶颈。
- b: 等待资源(如I/O操作)的进程数。表示有多少进程正处于不可中断的睡眠状态(通常等待磁盘I/O)。
-
memory 板块
- swpd: 已使用的交换空间(swap space)量,单位为KB。
- free: 空闲内存量,单位为KB。
- buff: 用作缓冲区的内存量,单位为KB。
- cache: 用作文件系统缓存的内存量,单位为KB。
-
swap 板块
- si: 从交换空间读入内存的量(swap-in),单位为KB/s。
- so: 从内存写入交换空间的量(swap-out),单位为KB/s。
-
io 板块
- bi: 块设备读操作量,单位为块/秒。
- bo: 块设备写操作量,单位为块/秒。
-
system 板块
- in: 每秒钟的中断数,包括时钟中断。
- cs: 每秒钟的上下文切换次数。高上下文切换数可能表示线程过多或锁争用严重。
-
cpu 板块
- us: 用户空间运行时间,比率值。表示非内核进程消耗的CPU时间百分比。
- sy: 内核空间运行时间,比率值。表示内核进程和系统调用消耗的CPU时间百分比。
- id: 空闲时间,比率值。表示CPU闲置的时间百分比。
- wa: 等待I/O操作完成的时间,比率值。表示CPU等待I/O操作的时间百分比。
- st: 被虚拟机抢占的时间,比率值。表示虚拟化环境中,由其他虚拟机抢占的时间百分比。
快速分析
- 高
r
值:如果r
值长期高于CPU核心数,系统可能存在CPU瓶颈。- 高
b
值:如果b
值较高,表明有多个进程在等待I/O操作。- swap 板块 - 高
si
和so
值:表示系统正在频繁使用交换空间,可能需要增加物理内存。- io 板块 - 高
bi
和bo
值:表示系统正在进行大量的磁盘读写操作。- 高
us
值:表示用户进程正在大量使用CPU,可能需要优化这些进程。- 高
sy
值:表示系统进程或系统调用频繁,可能需要检查和优化内核参数。- 高
wa
值:表示系统在等待磁盘I/O操作,需要检查I/O性能问题。- 高
st
值:表示虚拟化环境下,本虚拟机被其他虚拟机抢占了CPU资源。
温故知新
线程池子相关配置 (核心线程数是指线程池在空闲情况下最小保留的线程数量(即使这些线程是空闲的)
✅ 配置原则:应根据系统的CPU核心数和应用程序的并发需求来设置。
✅ I/O密集型任务:核心线程数 可以设置为 CPU 核心数的2倍或更多。
✅ CPU密集型任务:核心线程数 应设置为 CPU 核心数 + 1 或 CPU 核心数