Linux 性能压测

目录

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:错误率,表示在测试过程中发生的错误数量。较低的错误率表示磁盘运行稳定。

你可能感兴趣的:(linux,运维,服务器)