Linux 环境下的性能测试——top与stress

对于Linux 环境,top命令是使用频繁且信息较全的命令, 它对于所有正在运行的进行和系统负荷提供实时更新的概览信息。stress是个简单且全面的性能测试工具。通过它可以模拟各种高负载情况。

通过topstress这两个命令的结合使用,基本可以达到压力测试的目的。

1. 查看硬件资源

# 查看cpu个数
cat /proc/cpuinfo

# 查看内存大小
cat /proc/meminfo

# 查看当前内存使用情况
free -h

# 查看磁盘大小
df -h

# 查看当前文件夹已用磁盘大小
du -sh ./*

2. 查看资源实时使用率——top命令

执行top命令

Linux 环境下的性能测试——top与stress_第1张图片

2.1 第一行

top - 03:13:05 up 7 days, 1:29, 4 users, load average: 0.85,0.67.0.57
  • top: 当前时间
  • up: 机器运行了多长时间
  • users: 当前登录用户数
  • load average: 系统负载,即任务队列的平均长度。三个数值分别为 过去的1分钟、5分钟和15分钟里,有多少进程在等待CPU资源。 如果这几个数字高于了CPU核心数(比如在4核CPU上,如果3个数字之和超过了4,就表示负载较大),则说明系统负载较高,需要优化,否则就表示系统运行稳定。

2.2 第二行

Tasks: 182 total, 1 running, 181 sleeping, 0 stopped, 0 zombie
  • Tasks: 当前有多少进程。
  • running: 正在运行的进程数 。
  • sleeping: 正在休眠的进程数 。
  • stopped: 停止的进程数 。
  • zombie: 僵尸进程数。

2.3 第三行

%Cpu(s):3.6 us, 5.1 sy, 0.0 ni, 91.2 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
  • us:用户空间占CPU的百分比(像shell程序、各种语言的编译器、各种应用、web服务器和各种桌面应用都算是运行在用户地址空间的进程,这些程序如果不是处于idle状态,那么绝大多数的CPU时间都是运行在用户态)。
  • sy:内核空间占CPU的百分比(所有进程要使用的系统资源都是由Linux内核处理的,对于操作系统的设计来说,消耗在内核态的时间应该是越少越好,在实践中有一类典型的情况会使sy变大,那就是大量的IO操作,因此在调查IO相关的问题时需要着重关注它)。
  • ni:用户进程空间改变过优先级(ni是nice的缩写,可以通过nice值调整进程用户态的优先级,这里显示的ni表示调整过nice值的进程消耗掉的CPU时间,如果系统中没有进程被调整过nice值,那么ni就显示为0)。
  • id:空闲CPU占用率。
  • wa:等待输入输出的CPU时间百分比(和CPU的处理速度相比,磁盘IO操作是非常慢的,有很多这样的操作,比如,CPU在启动一个磁盘读写操作后,需要等待磁盘读写操作的结果。在磁盘读写操作完成前,CPU只能处于空闲状态。Linux系统在计算系统平均负载时会把CPU等待IO操作的时间也计算进去,所以在我们看到系统平均负载过高时,可以通过wa来判断系统的性能瓶颈是不是过多的IO操作造成的)。
  • hi:硬中断占用百分比(硬中断是硬盘、网卡等硬件设备发送给CPU的中断消息,当CPU收到中断消息后需要进行适当的处理,消耗CPU时间)。
  • st:软中断占用百分比(软中断是由程序发出的中断,最终也会执行相应的处理程序,消耗CPU时间)。
  • st:steal time, 系统花了百分之多少等待得到真正的cpu资源 。

2.4 第四行

KiB Mem :7888320 total, 1695796 free, 4378504 used, 1814020 buff/cache
  • total:物理内存总量。
  • free:空闲内存量。
  • used:使用的内存量。
  • buffer/cache:用作内核缓存的内存量。

2.5 第五行

KiB Swap: 8126460 total, 8126460 free, 0 used. 3156100 avail Mem
  • total:交换区内存总量。
  • free:空闲交换区总量。
  • used:使用的交换区总量。
  • buffer/cache:缓冲的交换区总量。

第四第五行分别是内存信息和swap信息,所有程序的运行都是在内存中进行的,所以内存的性能对与服务器来说非常重要。不过当内存的free变少的时候,其实我们并不需要太紧张。真正需要看的是Swap中的used信息。

Swap分区是由硬盘提供的交换区,当物理内存不够用的时候,操作系统才会把暂时不用的数据放到Swap中。所以当这个数值变高的时候,说明内存是真的不够用了。

2.6 进程信息

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
  • PID: 进程id
  • USER: 进程所有者的用户名
  • PR:优先级
  • NI: nice值,负值表示高优先级,正值表示低优先级
  • VIRT: 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
  • RES: 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
  • SHR: 共享内存大小,单位kb
  • S: 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
  • %CPU: 上次更新到现在的CPU时间占用百分比
  • %MEM: 进程使用的物理内存百分比
  • TIME+: 进程使用的CPU时间总计,单位1/100秒
  • COMMAND: 命令名/命令行

3. 压力测试工具——stress

3.1 安装

  • 在RHEL/CentOS 系统可以使用 yum install stress

  • 在Debian/Ubuntu系统中,可以使用apt-get install stress

  • 源码离线安装 stress-1.0.4.tar.gz

tar -zxvf stress-1.0.4.tar.gz
cd stress-1.0.4
./configure
make 
make install

3.2 压测命令

帮助命令:stress --help

`stress' imposes certain types of compute stress on your system

Usage: stress [OPTION [ARG]] ...
 -?, --help         show this help statement
     --version      show version statement
     				显示版本号
 -v, --verbose      be verbose
 					显示详细的信息
 -q, --quiet        be quiet
 					程序在运行的过程中不输出信息
 -n, --dry-run      show what would have been done
 					输出程序会做什么而并不实际执行相关的操作
 -t, --timeout N    timeout after N seconds
 					在 N 秒后结束程序
     --backoff N    wait factor of N microseconds before work starts
     				等待N微妙后开始运行
 -c, --cpu N        spawn N workers spinning on sqrt()
 					产生 N 个进程,每个进程都反复不停的计算随机数的平方根
 -i, --io N         spawn N workers spinning on sync()
 					产生 N 个进程,每个进程反复调用 sync() 将内存上的内容写到硬盘上
 -m, --vm N         spawn N workers spinning on malloc()/free()
 					产生 N 个进程,每个进程不断分配和释放内存
     --vm-bytes B   malloc B bytes per vm worker (default is 256MB)
     				指定分配内存的大小
     --vm-stride B  touch a byte every B bytes (default is 4096)
     				不断的给部分内存赋值,让 COW(Copy On Write)发生
     --vm-hang N    sleep N secs before free (default none, 0 is inf)
     				指示每个消耗内存的进程在分配到内存后转入睡眠状态 N 秒,然后释放内存,一直重复执行这个过程
     --vm-keep      redirty memory instead of freeing and reallocating 
     				一直占用内存,区别于不断的释放和重新分配(默认是不断释放并重新分配内存)。
 -d, --hdd N        spawn N workers spinning on write()/unlink()
 					产生 N 个不断执行 write 和 unlink 函数的进程(创建文件,写入内容,删除文件)
     --hdd-bytes B  write B bytes per hdd worker (default is 1GB)
     				指定文件大小

Example: stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 10s

Note: Numbers may be suffixed with s,m,h,d,y (time) or B,K,M,G (size).

stress常用压测命令

# CPU压力测试
# 启动2个CPU进程
stress -c 2
# 启动2个CPU进程,持续时间为60s
stress -c 2 -t 60

# 内存压测
# 启动2个进程,每个进程分配1G内存,分配后不释放
stress --vm 2 --vm-bytes 1G --vm-keep

# IO压测
# 启动4个进程,将内存上的内容写到硬盘上,top命令可看到sy升高,wa升高
stress -i 4

# 磁盘IO压测
# 创建一个进程不断地在磁盘上创建10M大小的文件并写入内容
stress -d 1 --hdd-bytes 10M

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