Linux系统如何做性能测试?Linux全面性能测试指南
Linux系统全面性能测试需要从多个维度进行评估,主要包括:CPU 性能 - 计算能力、多线程处理;内存性能 - 读写速度、延迟、带宽;磁盘 I/O - 随机读写、顺序读写、IOPS;网络性能 - 带宽、延迟、吞吐量;系统综合 - 整体负载能力、稳定性;性能测试:CPU内存,硬盘IO读写,带宽速度,UnixBench。
一、CPU物理个数、内核、超线程、多核心
终端Terminal(也称为命令行界面、控制台或 shell)是一个文本界面,让你能够通过输入命令与计算机操作系统进行交互。
cat /proc/cpuinfo 是在 Linux 系统中查看 CPU 信息的命令。命令解释:
cat:显示文件内容
/proc/cpuinfo:Linux 虚拟文件系统中的文件,包含 CPU 详细信息
1、登录Terminal,执行:cat /proc/cpuinfo,就会显示出主机的CPU详细参数,如内核、频率、型号等等,以下是我Linux 系统主机的CPU:

主要字段含义:
processor : 0 # 逻辑处理器编号(从0开始)
vendor_id : GenuineIntel # CPU厂商(Intel/AMD等)
cpu family : 6 # CPU家族
model : 158 # 型号
model name : Intel(R) Core(TM) i7-8700K CPU @ 3.70GHz
# CPU具体型号和主频
stepping : 10 # 步进版本
microcode : 0xca # 微码版本
cpu MHz : 3700.000 # 当前频率
cache size : 12288 KB # 缓存大小
physical id : 0 # 物理CPU编号
siblings : 12 # 单个物理CPU的逻辑核心数
core id : 0 # 核心编号
cpu cores : 6 # 物理核心数
apicid : 0 # APIC ID(高级可编程中断控制器)
initial apicid : 0
fpu : yes # 浮点运算单元
fpu_exception : yes # FPU异常支持
cpuid level : 22 # CPUID指令级别
wp : yes # 写保护支持
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault invpcid_single pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp
# CPU支持的功能特性
bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit
# 已知的安全漏洞
bogomips : 7400.00 # 粗略的性能指标
clflush size : 64 # 缓存行大小
cache_alignment : 64 # 缓存对齐大小
address sizes : 39 bits physical, 48 bits virtual
# 物理和虚拟地址位数
power management: # 电源管理特性
2、主要参数physical_id表示物理CPU个数,cpu cores是内核数,Siblings 表示位于这一物理封装上的逻辑处理器的数量,它们可能支持也可能不支持超线程(HT)技术。
3、如果有一个以上逻辑处理器拥有相同的 core id 和 physical id,则说明系统支持超线程(HT)技术。如果有两个或两个以上的逻辑处理器拥有 相同的 physical id,但是 core id 不同,则说明这是一个多内核处理器。
4、如果“siblings”和“cpu cores”一致,则说明不支持超线程,或者超线程未打开。如果“siblings”是“cpu cores”的两倍,则说明支持超线程,并且超 线程已打开。
5、直接查看逻辑CPU的个数,执行:cat /proc/cpuinfo |grep 'physical id' |sort |uniq
6、直接查看CPU的型号,执行:cat /proc/cpuinfo |grep 'model name' |sort |uniq
7、单个CPU的内核数,执行:cat /proc/cpuinfo |grep 'cpu cores' |sort |uniq
8、总的CPU线程数,执行:cat /proc/cpuinfo |grep 'processor'

注意事项
/proc/cpuinfo 是虚拟文件,内容在每次读取时动态生成
不同架构(x86, ARM等)的输出格式可能略有不同
在多CPU系统中,信息会按逻辑核心重复显示
部分信息(如频率)可能是动态变化的
二、内存大小、交换空间、高速缓存、实际使用内存
cat /proc/meminfo 是在 Linux 系统中查看内存详细信息的命令。
/proc/meminfo:Linux 虚拟文件系统中的内存信息文件。包含系统物理内存、交换空间等的详细使用情况
1、查看主机的内存信息,执行:cat /proc/meminfo,主要是看内存大小、交换空间、高速缓存。



2、主机实际使用内存大小。Linux管理内存的机制是这样的:无论物理内存有多大,Linux 都将其充份利用,将一些程序调用过的硬盘数据读入内存,利用内存读写的高速特性来提高Linux系统的数据访问性能。
3、即Linux会利用空闲的物理内存,划分出一部份空间,做为 cache 和 buffers ,以此提高数据访问性能。cache主要用来减少对磁盘的I/O操作。 所以我们经常能够看到一个总内存为8GB的Linux VPS测试出来占用的内存也是8GB。
4、那么如何才能知道Linux真正占用的内存是多少呢?执行命令:free –m

5、计算主机真实的使用内存方法是:Total-Free-Cached=真实使用内存,即1016912-18584-206944=791384,表示我的主机真实使用的内存是 791384MB。
主要字段含义详解
内存总量相关
MemTotal: 8167788 kB # 总物理内存(不含内核保留) MemFree: 245672 kB # 完全空闲的内存 MemAvailable: 2153316 kB # 可用内存(估算,包含缓存和缓冲区可回收部分)
缓存和缓冲区
Buffers: 84420 kB # 块设备(磁盘)缓冲区 Cached: 3011344 kB # 页面缓存(从磁盘读取的文件缓存) SwapCached: 3180 kB # 交换缓存(曾被交换出去,现在又换入)
活跃/非活跃内存
Active: 3764504 kB # 活跃内存(最近使用) Inactive: 2903452 kB # 非活跃内存(可回收) Active(anon): 1458636 kB # 活跃匿名页(进程堆栈) Inactive(anon): 430468 kB # 非活跃匿名页 Active(file): 2305868 kB # 活跃文件缓存 Inactive(file): 2472984 kB # 非活跃文件缓存
交换空间
SwapTotal: 2097148 kB # 交换分区总大小 SwapFree: 1512976 kB # 空闲交换空间
其他重要指标
Dirty: 448 kB # 等待写入磁盘的脏页 Writeback: 0 kB # 正在写入磁盘的页 AnonPages: 168168 kB # 匿名映射页(进程堆栈) Mapped: 643556 kB # 文件映射到内存的页 Shmem: 47364 kB # 共享内存
内核内存
Slab: 302288 kB # 内核数据结构缓存 SReclaimable: 188116 kB # 可回收的Slab SUnreclaim: 114172 kB # 不可回收的Slab KernelStack: 15008 kB # 内核栈使用 PageTables: 30504 kB # 页表大小
透明大页
AnonHugePages: 32768 kB # 匿名透明大页 ShmemHugePages: 0 kB # 共享内存大页 ShmemPmdMapped: 0 kB # PMD映射的共享内存
虚拟内存统计
VmallocTotal: 34359738367 kB # vmalloc区域总大小 VmallocUsed: 74684 kB # 已使用的vmalloc VmallocChunk: 0 kB # 最大的连续vmalloc块 Percpu: 544 kB # per-CPU数据
硬件相关
HardwareCorrupted: 0 kB # 损坏的物理内存 HugePages_Total: 0 # 大页总数 HugePages_Free: 0 # 空闲大页 HugePages_Rsvd: 0 # 预留大页 HugePages_Surp: 0 # 超额大页 Hugepagesize: 2048 kB # 大页大小 DirectMap4k: 618880 kB # 4KB页直接映射 DirectMap2M: 7946240 kB # 2MB页直接映射 DirectMap1G: 1048576 kB # 1GB页直接映射
注意事项
所有值单位都是 kB(千字节)
数据是动态变化的
不同内核版本可能字段略有不同
使用 -h 参数的现代命令更易读(如 free -h)
三、磁盘IO读写速度测试
在 Linux 系统中,有多种方法可以测试磁盘的 I/O 读写速度。方法有:使用 dd 命令(简单快速)、使用 hdparm 命令(主要用于HDD)、使用 ioping 测试延迟、使用 sysbench 综合测试、使用图形化工具等。下面采用dd 命令测试。
1、磁盘IO,即输入/输出(Input/Output),这是测试磁盘性能一个重要指标。
2、测试主机磁盘IO的性能可以执行以下两个命令:
dd if=/dev/zero of=test bs=64k count=4k oflag=dsync
dd if=/dev/zero of=test bs=8k count=256k conv=fdatasync
测试写入速度
# 测试连续写入(1GB文件) dd if=/dev/zero of=/tmp/test1.img bs=1G count=1 oflag=dsync # 更准确的测试(4K块,2048次) dd if=/dev/zero of=/tmp/test2.img bs=4k count=2048 oflag=dsync # 测试缓存写入(绕过缓存) dd if=/dev/zero of=/tmp/test3.img bs=8k count=256k conv=fdatasync
测试读取速度
# 首先创建测试文件 dd if=/dev/zero of=/tmp/testfile bs=1G count=1 # 清除缓存 echo 3 | sudo tee /proc/sys/vm/drop_caches # 测试读取 dd if=/tmp/testfile of=/dev/null bs=8k
同时测试读写
# 使用/dev/urandom生成随机数据 dd if=/dev/urandom of=/tmp/test_io bs=4k count=10000
dd参数说明:
if:输入文件
of:输出文件
bs:块大小(block size)
count:块数量
oflag=dsync:同步I/O,更准确
conv=fdatasync:写入完成后同步到磁盘
3、conv=fdatasync与oflag=dsync的区别在于:sync函数只是将所有修改过的块缓冲区排入写队列,然后就返回,它并不等待实际写磁盘操作结束。
4、而fsync函数只对由文件描述符filedes指定的单一文件起作用,并且等待写磁盘操作结束,然后返回。这是我电脑的硬盘IO测试结果。

影响测试结果的因素
磁盘类型(HDD/SSD/NVMe)
文件系统(ext4/xfs/btrfs)
挂载参数
系统当前负载
磁盘缓存设置
不同磁盘类型的预期速度
| 磁盘类型 | 顺序读取 | 顺序写入 | 4K随机读取 (IOPS) |
|---|---|---|---|
| HDD (7200rpm) | 100-200 MB/s | 80-160 MB/s | 50-150 |
| SATA SSD | 400-550 MB/s | 300-500 MB/s | 30,000-80,000 |
| NVMe SSD | 2,000-7,000 MB/s | 1,500-5,000 MB/s | 200,000-1,000,000 |
四、速度测试:上传下载速度、服务器带宽
使用 speedtest-cli 的 Python 版本进行网络速度测试。不过需要注意的是,旧版本的 speedtest-cli.py 可能已经不再维护了。
测试VPS主机入口与出口的带宽一键脚本,执行命令:
wget https://github.com/sivel/speedtest-cli/raw/master/speedtest_cli.py
python speedtest_cli.py --share

更新版 speedtest-cli 使用方法
# 安装最新版 pip install speedtest-cli # 或者 pip install speedtest-cli==2.1.3 # 运行测试 speedtest-cli # 生成分享链接 speedtest-cli --share # 简化输出 speedtest-cli --simple # 指定服务器(如上海电信) speedtest-cli --server 3633 --share
五、性能综合测试:UnixBench跑分工具测试
1、UnixBench是一款开源的测试 unix 系统基本性能的工具,是比较通用的测试性能的工具,Unixbench的主要测试项目有:系统调用、读写、进程、图形化测试、2D、3D、管道、运算、C库等系统基准性能提供测试数据。
2、UnixBench测试的结果不仅仅只是CPU,内存,或者磁盘为基准,还取决于硬件,操作系统版本,编译器,测试系统各个方面一系列的性能,然后将每个 测试结果和一个基准值进行比较,得到一个索引值,所有测试项目的索引值结合在一起形成一个测试分值。
3、UnixBench测试执行以下命令:
wget http://teddysun.com/wp-content/uploads/unixbench.sh
chmod +x unixbench.sh
./unixbench.sh
4、测试时间可能会比较长,请耐心等待。最后UnixBench会详细列出各个测试项目的得分情况,以及主机性能的综合跑分结果。 如下图,得分为879.7。

这些测试的结果有一个指数值(INDEX ,如520),这个值是测试系统的测试结果与一个基线系统测试结果比较得到的指数值,这样比原始值更容易得到参考价值,测试集合里面所有的测试得到的指数值结合起来得到整个系统的指数值。
六、测试注意事项
测试原则
隔离性:一次只测试一个组件
重复性:多次测试取平均值
对比性:与基线或标准对比
真实性:模拟真实工作负载
监控:测试时监控系统状态
结果解读要点
CPU:关注单核/多核性能、缓存命中率
内存:关注带宽、延迟、吞吐量
磁盘:关注 IOPS、吞吐量、延迟
网络:关注带宽、延迟、丢包率
系统:关注上下文切换、中断处理
七、总结
这个全面性能测试方案涵盖了 Linux 系统的各个关键方面。根据你的具体需求(如服务器性能评估、硬件选型、系统调优等),可以选择相应的测试组合进行。
以上就是Linux系统如何做性能测试?的详细内容,更多相关资料请阅读主机测评网其它文章!
本文由主机测评网发布,不代表主机测评网立场,转载联系作者并注明出处:https://zhuji.jb51.net/ceping/9668.html
