前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >笔记 | Linux 性能监视与跑分测试

笔记 | Linux 性能监视与跑分测试

作者头像
悠风
发布2019-08-28 16:32:47
11K0
发布2019-08-28 16:32:47
举报

测试环境

系统:Kali Linux amd64

用户:yowfung

工具:htop, net-tools, ping, iperf, UnixBench 等

Linux 性能测试是运维和安全测试相关人员的一门必备技能。了解基本的性能查看命令可以帮助你更全面地了解服务器环境,掌握基本的性能测试能够让你对服务器的运行性能有更细致的了解。这里我整合了一些基本的性能查看与测试技巧,主要包含有基本信息查看、磁盘读写测试、网络通信测试和综合性能跑分测试等,以便日后查阅。


基本信息查看

查看 CPU 参数:

cat /proc/cpuinfo

该命令会列出 CPU 的详细信息,包括 CPU 个数、核心数、主频、型号等。

下面这些命令是筛选查看 CPU 的某个信息:

# 查看逻辑 CPU 的个数:
cat /proc/cpuinfo | grep 'physical id' | sort | uniq
 
# 查看 CPU 的型号:
cat /proc/cpuinfo | grep 'model name' | sort | uniq
 
# 查看单个 CPU 的内核数:
cat /proc/cpuinfo | grep 'cpu cores' | sort | uniq
 
# 查看 CPU 总线程数:
cat /proc/cpuinfo | grep 'processor'

查看内存参数:

cat /proc/meminfo

该命令可以查看内存的详细信息,包括内存容量、交换空间、高速缓存等。

查看内存使用情况:

free -mh

该命令可查看当前 Linux 对内存和交换空间的占用情况。

查看进程情况:

# 安装 htop
sudo apt install htop
 
# 运行 htop
htop

htop 软件可以查看当前的 CPU 和内存使用情况,以及当前正在运行的进程,其界面也是很炫酷美观的。

查看磁盘使用情况:

df -h

该命令可以查看所有挂载分区的容量和使用情况。

查看网卡信息:

ifconfig -a

查看 PCI 总线信息:

lspci

磁盘读写测试

磁盘 I/O (Input/Outpu) 读写速度是磁盘性能的一个重要指标。测试主机磁盘 IO 性能可以用以下两个命令。

# 方案一
dd if=/dev/zero of=test bs=4k count=256000 oflag=dsync
 
# 方案二
dd if=/dev/zero of=test bs=4k count=256000 conv=fdatasync

两个都是往硬盘中写入 1 Gbytes 的数据,只是第一个的速度慢的要命。 使用 dsync,dd 会从 /dev/zero 中,每次读取 4Kbytes 数据,然后直接写入到硬盘当中,重复此步骤,直到共读取并且写入了 1 Gbytes 的数据。 使用 fdatasync,dd 会从 /dev/zero 中一次性读取 1 Gbytes 的数据,写入到磁盘的缓存中,然后再从磁盘缓存中读取,一次性写入到硬盘当中。


网络通信测试

测试网络连通情况:

ping -c 4 {HOST}

其中 {HOST} 为目标主机,可以是域名或 IP 地址。有显示响应时间则表示网络连通。

测试网速:

# 下载测试脚本
git clone https://github.com/sivel/speedtest-cli.git
 
# 进入下载目录
cd speedtest-cli/
 
# 运行网速测试
./speedtest.py

运行这个脚本后,可以明显看得出下载和上传的网速。需要注意的是,这里的单位是 Mbit/s,而不是我们平常所说网速的多少 MB/s,他们之间的换算关系为 8Mbit/s = 1MB/s。

测试 TCP 吞吐量和 UDP 丢包率:

iperf 是一款基于TCP/IP 和 UDP/IP 的网络性能测试工具,它可以用来测量网络带宽和网络质量,还可以提供网络延迟抖动、数据包丢失率、最大传输单元等统计信息。网络管理员可以根据这些信息了解并判断网络性能问题,从而定位网络瓶颈,解决网络故障。

以下的测试过程需要由两台主机来配合完成,如果没有两台物理主机的话,也可以在虚拟机或 docker 容器中进行。

在下面的测试中,我们假设客户端主机为 172.20.10.3,服务器主机为 172.17.0.2,测试前分别在客户端主机和服务器主机中安装 iperf。

# 安装 iperf 软件
sudo apt install iperf3

在服务器主机中输入以下命令开启 iperf 服务,此时服务器会启动监听 5201 端口。

iperf3 -s

测试 TCP 吞吐量:在客户端主机中输入以下命令。

iperf3 -c {ServerHost}

其中 {ServerHost} 为服务器主机的 IP,这里为上面假设的 172.17.0.2。 为了确定网卡的最大吞吐量,iperf 将尝试从客户端尽可能快地向服务端发送数据请求,并且会输出发送的数据量和网卡平均带宽值。 从图中输出信息可以看出,iperf 默认测试 10 秒钟,共传送了 76.2 GB 的数据量,网卡的带宽平均速率为 65.5 Gbits/s,即 8.19 GB/s。由于我在测试时,服务器主机在本地电脑的 docker 容器中,故才会有这么惊人的传输速率,而在实际应用时,服务器主机应该选择实际被测试的目标,一般情况下不会有这么高的传输速率。

为了模拟更真实的测试,你可以添加 iperf 命令的参数,自定义传送的数据量、测试时长、输出频率以及线程数等。

iperf3 -c {ServerHost} -t {Time} -i {Interval} -n {Number} -P {Parallel}

其中 {ServerHost} 为服务器主机的 IP,{Time} 为测试的时长,{Tnterval} 为每隔几秒输出一个测试结果,{Number} 为要传送的数据量,{Parallel} 为采用多少线程进行传输。这里值得注意的是,这里 -t 参数和 -n 参数不能同时设置。 如上图所示,这里设置了 107374182400 字节的数据量,即 100 GB,每隔 5 秒输出一次测试结果,并且设置为双线程传输。可以看到最终的平均传输速率为 68.6 Gbits/s,并且每一条虚线分隔的,都是一次传输的记录,每次都有两条(双线程)记录和一条总的平均记录。 这里要提醒一下,如果你是用来测试你的付费云主机,请注意你的带宽流量费用,非必要时不要像我这样一次性传送这么大的数据量。

下面来测试 UDP 丢包和延迟。

说明:由于 UDP 协议是一个非面向连接的轻量级传输协议,并且不提供可靠的数据传输服务,因此对 UDP 应用的关注点不是传输数据有多快,而是它的丢包率和延时指标。

iperf3 -c {ServerHost} -u -i {Interval} -b {Bandwidth}

其中 {ServerHost} 为服务器主机的 IP,{Interval} 为每隔多少秒输出一次测试结果,{Bandwidth} 为需要传输的带宽。进行 UDP 测试的主要参数为 -u。 如上图,设置为每隔 1 秒输出测试结果,带宽为 200M。注意虚线下面的信息,Jitter 表示抖动时间(或称为传输延迟),Lost/Total 表示丢失的数据报和总的数据报数量,后面的 0% 是平均丢包的比率,Datagrams 表示总共传输数据报的数量。 这里需要说明的是,由于我是使用本地的 docker 容器进行测试,所以得到的结果比较理想(0%),而实际上 UDP 的丢包率很少会出现这样理想的情况的。


综合性能跑分

UnixBench 是一款开源的测试 Unix 系统基本性能的工具,是比较通用的测试性能的工具,Unixbench 的主要测试项目有:系统调用、读写、进程、图形化测试、2D、3D、管道、运算、C库等系统基准性能提供测试数据。

操作步骤:

# 进入系统临时目录
cd /tmp
 
# 下载 UnixBench 源码包
wget https://github.com/kdlucas/byte-unixbench/archive/v5.1.3.tar.gz
 
# 解压缩
tar -zxvf v5.1.3.tar.gz
 
# 进入软件目录
cd byte-unixbench-5.1.3/UnixBench/
 
# 运行跑分测试
sudo ./Run

测试时间比较久,等待测试完成后,可以看到如下这样的界面:

看最后一行的 System Benchmarks Index Score,是跑分测试的综合总得分。 列表中 BASELINE 为基准线,RESULT 为跑分结果,而 INDEX 则为测试系统的测试结果与一个基线系统测试结果的比值,即 INDEX = RESULT / BASELINE × 10。 这样得出的值比原始测试结果更有参考价值。

再来看看每一项测试结果所表示的含义吧。

项目

说明

Dhrystone 2 using register variables

此项用于测试 string handling。因为没有浮点操作,所以深受软件和硬件设计、编译和链接、代码优化、对内存的cache、等待状态、整数数据类型的影响。

Double-Precision Whetstone

这一项测试浮点数操作的速度和效率。覆盖面很广的一系列 C 函数:sin,cos,sqrt,exp,log 被用于整数和浮点数的数学运算、数组访问、条件分支和程序调用。

Execl Throughput

此测试考察每秒钟可以执行的 execl 系统调用的次数。

File Copy

测试从一个文件向另外一个文件传输数据的速率。每次测试使用不同大小的缓冲区。

Pipe Throughput

测试一秒钟内一个进程可以向一个管道写 512 字节数据然后再读回的次数。

Pipe-bases Context Switching

测试两个进程每秒钟通过一个管道交换一个不断增长的整数的次数。这个测试程序首先创建一个子进程,再和这个子进程进行双向的管道传输。

Process Creation

测试每秒钟一个进程可以创建子进程然后收回子进程的次数(子进程一定立即退出)。Process Creation 的关注点是新进程进程控制块(process control block)的创建和内存分配。

Shell Scripts

测试一秒钟内一个进程可以并发地开始一个 shell 脚本的 n (一般取值为1、2、4、8)个拷贝的次数。

System Call Overhead

测试进入和离开操作系统内核的代价,即一次系统调用的代价。它利用一个反复地调用 getpid 函数的小程序达到此目的。

Graphical Tests

测试非常粗的 2D 和 3D 图形性能,尤其是 3D 测试非常有限。测试结果和硬件,系统合适的驱动关系很大。


必要说明:

我在写这篇推文的时候,也参考了网上很多大咖写的博客和书籍,这里所涉及的大部分方案均不是我首先提出的,我只是将各位大咖的资料做了一个整合与加工,如果对本篇推文提及的一些技术有不懂的,可以移步查阅下面的参考来源,也可以在公众号给我留言。

参考文章:

《dd命令的conv=fsync,oflag=sync/dsync》 | 学步园

《基于Linux系统的性能测试》 | CSDN

《Unixbench 测试工具分析》 | 简书

《Linux网络性能评估工具iperf 、CHARIOT测试网络吞吐量》 | konglingbin

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 悠风的采坑日记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本信息查看
  • 磁盘读写测试
  • 网络通信测试
  • 综合性能跑分
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档