Linux 性能压测

发布于:2023-12-03 ⋅ 阅读:(86) ⋅ 点赞:(0)

目录

1、内存

(1) 查看内存指令

(2) 清理缓存

(3) swap分区的作用

2、cpu

(1) 查看cpu核心数

(2) 查看cpu使用率

(3) 查看cpu使用百分比

(5) 查看cpu温度

(6) cpu压力测试

3、磁盘

(1) 查看磁盘信息

(2) 数据恢复相关

(3) 查看磁盘io

(4) 磁盘压测


1、内存

(1) 查看内存指令
  1. free命令:free 命令用于显示系统内存使用情况,包括总内存、已使用内存、空闲内存以及缓冲区和缓存的使用情况。

free -h 或者 free -m

该命令以人类可读的方式显示内存大小(以MB或GB为单位),输出示例如下:

              total       used       free     shared    buffers     cached
Mem:          7.8G       2.4G       5.3G       342M       112M       1.1G
-/+ buffers/cache:       1.2G       6.6G
Swap:         2.0G         0B       2.0G

在输出中,"Mem" 行显示了总内存、已使用内存和空闲内存的详细信息。"-/+ buffers/cache" 行显示了实际使用内存和可用内存(不包括缓冲区和缓存)。

  1. top命令:top 命令用于实时监视系统的各种性能指标,包括内存使用情况。启动 top 命令后,按下 "M" 键可以按内存使用排序进程列表,以便查看占用内存最多的进程。

top

top 命令的输出中,内存使用情况显示在 "Mem" 行中,包括总内存、已使用内存、空闲内存、缓冲区和缓存的使用情况。

  1. vmstat命令:vmstat 命令用于报告虚拟内存的统计信息,包括内存使用情况、交换分区使用情况、进程、IO等。

vmstat

vmstat 命令的输出包含多个字段,其中 "free" 列显示空闲内存的数量,"swpd" 列显示交换分区已使用的数量,"buff" 和 "cache" 列显示缓冲区和缓存的大小。

  1. htop命令:htop 是一个更强大和交互式的进程监视器,可以提供更直观的内存使用情况展示。

(2) 清理缓存
  1. 使用 sync 命令:

sync

sync 命令用于将内存中的数据立即写入磁盘,并清空文件系统缓冲区。这将导致缓冲区和缓存的数据被刷新到磁盘上,释放相关的内存。

  1. 使用 drop_caches 参数:

echo 1 > /proc/sys/vm/drop_caches

使用 echo 命令将数字 1 写入 /proc/sys/vm/drop_caches 文件。这将清空缓冲区(buffers)。 如果你想清空缓存(cached),可以使用数字 2 或 3 替代 1:

echo 2 > /proc/sys/vm/drop_caches  # 清空缓存
echo 3 > /proc/sys/vm/drop_caches  # 清空缓冲区和缓存

注意:清理缓冲区和缓存可能会导致一些性能下降,因为系统需要重新读取磁盘上的数据到缓冲区和缓存中。

这些方法会清理 Linux 系统中的缓冲区和缓存,释放相关的内存。在普通的系统运行中,缓冲区和缓存的占用是正常的,它们可以提高系统性能。通常情况下,不需要频繁地手动清理缓冲区和缓存。只有在特殊情况下,如进行性能测试或遇到内存压力较大的情况时,才需要清理缓冲区和缓存。

(3) swap分区的作用
  1. 扩展可用内存:Swap 分区允许将部分不常用的内存数据存储到硬盘上,从而释放物理内存供其他进程使用。当系统的物理内存不足时,Swap 分区可以提供额外的可用内存空间。

  2. 内存回收机制:Swap 分区可以作为一种内存回收机制。当系统内存使用达到一定阈值时,操作系统会将不活跃的内存页面移入 Swap 分区,从而提供更多的空闲物理内存给活跃进程使用。当需要访问 Swap 中的数据时,操作系统会将其移回物理内存。

  3. 支持休眠和睡眠模式:Swap 分区对于休眠(Hibernate)和睡眠(Suspend)模式的支持至关重要。当系统进入休眠或睡眠状态时,当前的内存状态将被保存到 Swap 分区中,以便在唤醒时恢复到先前的状态。

  4. 系统稳定性保护:Swap 分区可以帮助系统避免由于内存不足而导致的崩溃和系统错误。当系统的物理内存耗尽时,Linux 内核会尝试将部分内存页面移到 Swap 分区,以避免系统宕机或进程崩溃。

需要注意的是,Swap 分区并不是用于替代物理内存的解决方案。它是一种补充和扩展内存的机制,适用于处理临时的内存压力或提供休眠和睡眠模式的支持。对于性能敏感的应用程序和服务器,应当优先考虑增加物理内存来改善性能,而不是依赖过多的 Swap 分区。合理设置 Swap 分区的大小,以及根据实际需求调整其使用情况,是确保系统正常运行的重要方面。

2、cpu

(1) 查看cpu核心数
  1. 使用 lscpu 命令:

lscpu

这个命令将显示有关 CPU 和系统架构的详细信息,包括 CPU 核心数、线程数、套接字数等。在输出的 "CPU(s)" 行中,"Core(s) per socket" 列显示每个 CPU 套接字的核心数,"Socket(s)" 列显示 CPU 套接字的数量。

  1. 使用 nproc 命令:

nproc

这个命令将简单地显示当前系统中的 CPU 核心数。

  1. 使用 /proc/cpuinfo 文件:

cat /proc/cpuinfo | grep "core id" | sort | uniq | wc -l

这个命令将读取 /proc/cpuinfo 文件,并统计 "core id" 字段的唯一值数量,即 CPU 核心数。

这些方法将帮助你查看 CentOS 系统中的 CPU 核心数。请注意,CPU 核心数表示物理 CPU 中的核心数量,并不考虑超线程技术(如果有的话)。

(2) 查看cpu使用率
  1. 使用 top 命令:

top

top 命令将显示系统的实时性能信息,包括 CPU 使用率。在 top 命令的输出中,可以查看 "%Cpu(s)" 行,其中的 "%idle" 列显示 CPU 的空闲时间,而 "%us" 列显示 CPU 的用户态使用率,"%sy" 列显示 CPU 的系统态使用率,"%wa" 列显示 CPU 的等待 I/O 的使用率等。 可以按 "1" 键查看每个 CPU 核心的详细信息。

  1. 使用 mpstat 命令:

mpstat

mpstat 命令用于显示多核处理器的实时统计信息,包括每个 CPU 核心的使用率。默认情况下,mpstat 命令显示所有 CPU 核心的平均使用率。 若要显示每个 CPU 核心的详细信息,可以使用以下命令:

mpstat -P ALL
  1. 使用 sar 命令: 首先,你需要安装并设置 sysstat 工具包。然后,可以使用 sar 命令来获取系统资源的历史统计信息,包括 CPU 使用率。以下是使用 sar 命令查看 CPU 使用率的示例:

sar -u

这个命令将显示 CPU 使用率的历史记录,包括用户态、系统态和空闲时间的百分比。

这些方法将帮助你查看 CentOS 系统中的 CPU 使用率。请注意,每个命令的输出可能会略有不同,具体取决于系统配置和命令的参数设置。

(3) 查看cpu使用百分比
CPU 使用率 = (总 CPU 时间 - 空闲 CPU 时间) / 总 CPU 时间 * 100

其中,总 CPU 时间是指在特定时间间隔内 CPU 的总运行时间,而空闲 CPU 时间是指在同一时间间隔内 CPU 处于空闲状态的时间。

在 Linux 系统中,可以使用以下步骤来计算 CPU 使用百分比:

  1. 获取初始的 CPU 时间和空闲 CPU 时间:

cat /proc/stat | grep 'cpu ' | awk '{print $2+$3+$4+$5+$6+$7+$8 " " $5}'

这个命令将读取 /proc/stat 文件中的 CPU 统计信息,并提取总 CPU 时间和空闲 CPU 时间。

  1. 等待一段时间(例如,几秒钟)。

  2. 获取更新后的 CPU 时间和空闲 CPU 时间:

cat /proc/stat | grep 'cpu ' | awk '{print $2+$3+$4+$5+$6+$7+$8 " " $5}'
  1. 计算 CPU 使用率:

    • 将初始的总 CPU 时间和空闲 CPU 时间保存到变量中。

    • 计算更新后的总 CPU 时间和空闲 CPU 时间与初始值之间的差值。

    • 使用上述公式计算 CPU 使用百分比。

下面是一个示例脚本,演示如何计算 CPU 使用百分比(以 Bash 脚本为例):

#!/bin/bash
​
# 获取初始的 CPU 时间和空闲 CPU 时间
read cpu_total_idle cpu_idle <<< $(cat /proc/stat | grep 'cpu ' | awk '{print $2+$3+$4+$5+$6+$7+$8 " " $5}')
​
# 等待一段时间
sleep 5
​
# 获取更新后的 CPU 时间和空闲 CPU 时间
read cpu_total_idle_new cpu_idle_new <<< $(cat /proc/stat | grep 'cpu ' | awk '{print $2+$3+$4+$5+$6+$7+$8 " " $5}')
​
# 计算 CPU 使用率
cpu_total=$((cpu_total_idle_new - cpu_total_idle))
cpu_usage=$((100 - (cpu_idle_new - cpu_idle) * 100 / cpu_total))
​
echo "CPU 使用率: $cpu_usage%"
(5) 查看cpu温度
# 安装
yum install -y lm_sensors
# 检测传感器
sensors-detect
# 检测
sensors
(6) cpu压力测试
# 下载安装sysbench
yum install -y sysbench
# 压测
sysbench cpu --cpu-max-prime=20000 --threads=8 --time=60 run
Prime numbers limit: 20000
Initializing worker threads...
Threads started!
CPU speed:
    events per second:  1191.98
General statistics:
    total time:                          10.0008s
    total number of events:              11922
Latency (ms):
         min:                                    1.56
         avg:                                    1.68
         max:                                    4.65
         95th percentile:                        1.76
         sum:                                19985.37
Threads fairness:
    events (avg/stddev):           5961.0000/7.00
    execution time (avg/stddev):   9.9927/0.01
    
# 解析
Prime numbers limit: 设置的质数计算任务的限制。
Initializing worker threads: 初始化工作线程。
Threads started!: 工作线程已启动。
CPU speed: CPU 的速度,以每秒事件数为单位。
General statistics:
total time: 总共执行的时间。
total number of events: 完成的事件总数。
Latency (ms): 响应时间的统计信息。
min: 最小响应时间。
avg: 平均响应时间。
max: 最大响应时间。
95th percentile: 响应时间的第 95 百分位数。
sum: 响应时间的总和。
Threads fairness: 线程公平性的统计信息。
events (avg/stddev): 每个线程的平均事件数和标准差。
execution time (avg/stddev): 每个线程的平均执行时间和标准差。
# 结果
通过这些统计数据,你可以了解 CPU 压力测试的执行结果和性能指标。例如,CPU 的事件速度是每秒 1191.98 个事件,总共执行了 11922 个事件。在响应时间方面,最小响应时间为 1.56 毫秒,平均响应时间为 1.68 毫秒,最大响应时间为 4.65 毫秒,95% 的响应时间低于 1.76 毫秒。线程公平性方面,每个线程的平均事件数为 5961,标准差为 7.00。

3、磁盘

(1) 查看磁盘信息
  1. 使用 df 命令:

df -h

这个命令将显示磁盘空间使用情况,包括每个挂载点的文件系统、总容量、已用空间、可用空间和使用率。"-h" 参数将以人类可读的方式显示磁盘大小。

  1. 使用 du 命令:

du -h /path/to/directory

这个命令将显示指定目录的磁盘使用情况,包括目录下的所有文件和子目录的大小。"-h" 参数将以人类可读的方式显示磁盘大小。

  1. 使用 fdisk 命令:

sudo fdisk -l

这个命令将显示系统上的所有磁盘分区信息,包括磁盘的设备名称、分区表类型、分区大小等。

  1. 使用 parted 命令:

sudo parted -l

这个命令将显示更详细的磁盘信息,包括磁盘的设备名称、分区表类型、分区大小、文件系统类型等。

  1. 使用 lsblk 命令:

lsblk

这个命令将显示块设备信息,包括磁盘的设备名称、分区、挂载点等。

(2) 数据恢复相关

适用于磁盘数据恢复的工具:

  1. TestDisk:TestDisk 是一款跨平台的开源工具,适用于各种操作系统。它可以帮助恢复丢失的分区和修复引导问题。

  2. PhotoRec:PhotoRec 是 TestDisk 的伴侣工具,用于恢复丢失的文件。你可以通过安装 TestDisk 软件包来同时获得 PhotoRec。

  3. extundelete:extundelete 是一款专门用于恢复已删除的 ext2、ext3 和 ext4 文件系统中文件的工具。 注意:在使用 extundelete 恢复文件之前,请确保你在恢复过程中避免在相关分区上写入新的数据,以避免进一步覆盖被删除的文件。

  4. Scalpel:Scalpel 是一款用于文件恢复的开源工具,它可以通过文件类型的特征进行文件碎片的扫描和恢复。你可以在 CentOS 上安装 Scalpel。

在使用任何磁盘数据恢复工具时,重要的是先停止写入新数据到需要恢复的磁盘或分区,以防止覆盖原始数据。此外,在进行磁盘数据恢复之前备份重要数据,并遵循工具的文档和使用说明,以获得最佳的恢复结果。

(3) 查看磁盘io
  1. 使用 iostat 命令:

iostat -dx
​
# 输出解析
Device:磁盘设备的名称。
rrqm/s:每秒合并的读取请求次数,即每秒发起的读取请求需要合并的次数。
wrqm/s:每秒合并的写入请求次数,即每秒发起的写入请求需要合并的次数。
r/s:每秒完成的独立读取请求次数。
w/s:每秒完成的独立写入请求次数。
rkB/s:每秒读取的数据量,以千字节(KB)为单位。
wkB/s:每秒写入的数据量,以千字节(KB)为单位。
avgrq-sz:平均请求大小,即平均每个 I/O 请求的扇区数。
avgqu-sz:平均请求队列长度,即平均每个设备的 I/O 请求队列中的请求数。
await:平均等待时间,即平均每个 I/O 请求从提交到完成的时间(包括排队时间)。
r_await:平均读取等待时间,即平均每个读取请求从提交到完成的时间。
w_await:平均写入等待时间,即平均每个写入请求从提交到完成的时间。
svctm:平均服务时间,即平均每个 I/O 请求的服务时间(不包括排队时间)。
%util:设备的利用率,即设备在指定时间间隔内的活动百分比。它表示设备的繁忙程度。

这个命令将显示磁盘的平均 I/O 统计信息,包括读取速度、写入速度、I/O 请求和等待时间等。"-d" 参数用于显示磁盘设备的统计信息,"-x" 参数用于显示更详细的磁盘 I/O 统计。

  1. 使用 vmstat 命令:

vmstat -d
​
# 输出解析
disk:磁盘设备的标识。
reads:读取次数。
total:自系统启动以来从磁盘读取的次数。
merged:合并的读取次数。
sectors:自系统启动以来从磁盘读取的扇区数。
ms:自系统启动以来读取操作花费的毫秒数。
writes:写入次数。
total:自系统启动以来写入磁盘的次数。
merged:合并的写入次数。
sectors:自系统启动以来写入磁盘的扇区数。
ms:自系统启动以来写入操作花费的毫秒数。
cur:当前请求队列的请求数。
sec:合并请求的次数。
​
根据上述解释,例如对于 sda 磁盘,自系统启动以来从该磁盘读取了 6467 次,合并了 4 次读取请求,共读取了 429193 个扇区,读取操作花费了 2873 毫秒。同时,自系统启动以来对 sda 磁盘进行了 25945 次写入,合并了 1478 次写入请求,共写入了 2051264 个扇区,写入操作花费了 14634 毫秒。当前请求队列中没有正在进行的操作,合并请求的次数为 12。

这个命令将显示磁盘的活动统计信息,包括读取和写入的次数、块数、每秒的传输速率等。

  1. 使用 sar 命令:

sar -d
​
# 输出解析
08:10:01 PM:时间戳,表示统计数据的时间点。
DEV:磁盘设备的名称。
tps:每秒完成的传输次数,表示设备的总 I/O 操作数(读取和写入)。
rd_sec/s:每秒读取的扇区数。
wr_sec/s:每秒写入的扇区数。
avgrq-sz:平均请求大小,即每个 I/O 请求的扇区数。
avgqu-sz:平均请求队列长度,表示每个设备的 I/O 请求队列中的请求数。
await:平均等待时间,表示每个 I/O 请求从提交到完成的时间(包括排队时间)。
svctm:平均服务时间,表示每个 I/O 请求的服务时间(不包括排队时间)。
%util:设备的利用率,表示设备在指定时间间隔内的活动百分比,即设备的繁忙程度。

这个命令将显示磁盘的活动统计信息,包括读取和写入的次数、传输速率、等待时间等。sar 命令通常需要事先安装并配置 sysstat 工具。

  1. 使用 iotop 命令:

iotop

这个命令将显示实时的磁盘 I/O 活动,包括每个进程的 I/O 使用情况、读取和写入速度等。

这些命令可以提供有关磁盘 I/O 活动的不同方面的信息。根据你的需求和特定的场景,选择适合的命令来查看磁盘的 I/O 情况。请注意,具体命令和输出格式可能会因操作系统和工具版本而有所不同。

(4) 磁盘压测
# 安装
yum install -y fio
# 压测
fio --name=test --ioengine=sync --iodepth=32 --rw=randwrite --bs=4k --size=1G --numjobs=4 --time_based --runtime=60 --group_reporting
​
# 参数解析
--name=test: 测试任务的名称。
--ioengine=sync: I/O 引擎,使用同步模式。
--iodepth=32: I/O 深度,即并发的 I/O 请求数。
--rw=randwrite: 读写模式,随机写入。
--bs=4k: 块大小,每次 I/O 操作的数据块大小。
--size=1G: 测试文件的大小。
--numjobs=4: 并发任务数。
--time_based: 基于时间的运行模式。
--runtime=60: 运行时间,60 秒。
--group_reporting: 打印汇总报告。
# 结果解析
IOPS(Input/Output Operations Per Second):每秒的输入/输出操作数。反映了磁盘的处理能力,值越高表示磁盘性能越好。
​
Throughput:数据吞吐量,通常以 MB/s 或 GB/s 表示。表示磁盘每秒能够传输的数据量,值越高表示磁盘性能越好。
​
Latency:延迟时间,表示从发送一个 I/O 请求到接收到响应的时间。常见的度量单位包括毫秒(ms)或微秒(μs),值越低表示磁盘响应更快。
​
Bandwidth:带宽,表示单位时间内传输的数据量。通常以 MB/s 或 GB/s 表示,与吞吐量类似。
​
I/O Depth:I/O 深度,表示同时进行的并发 I/O 请求数。较高的 I/O 深度可以提高并发性能。
​
CPU Usage:CPU 使用率,表示在测试期间 CPU 的负载情况。高 CPU 使用率可能表示测试任务对 CPU 造成了较大的负载。
​
Error Rate:错误率,表示在测试过程中发生的错误数量。较低的错误率表示磁盘运行稳定。
本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到