大家好,又见面了,我是你们的朋友全栈君。
stress介绍
stress是一款压力测试工具,可以用它来对系统CPU,内存,以及磁盘IO生成负载。
安装stress
代码语言:javascript复制apt-get install stress
使用stress
直接运行 stress
就会列出关于 stress 的简单说明
root@myy /root $ stress -?
`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
--backoff N wait factor of N microseconds before work starts
-c, --cpu N spawn N workers spinning on sqrt()
-i, --io N spawn N workers spinning on sync()
-m, --vm N spawn N workers spinning on malloc()/free()
--vm-bytes B malloc B bytes per vm worker (default is 256MB)
--vm-stride B touch a byte every B bytes (default is 4096)
--vm-hang N sleep N secs before free (default none, 0 is inf)
--vm-keep redirty memory instead of freeing and reallocating
-d, --hdd N spawn N workers spinning on 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).
-? 显示帮助信息
-v 显示版本号
-q 不显示运行信息
-n,--dry-run 显示已经完成的指令执行情况
-t --timeout N 指定运行N秒后停止
--backoff N 等待N微妙后开始运行
-c --cpu 产生n个进程 每个进程都反复不停的计算随机数的平方根
-i --io 产生n个进程 每个进程反复调用sync(),sync()用于将内存上的内容写到硬盘上
-m --vm n 产生n个进程,每个进程不断调用内存分配malloc和内存释放free函数
--vm-bytes B 指定malloc时内存的字节数 (默认256MB)
--vm-hang N 指示每个消耗内存的进程在分配到内存后转入休眠状态,与正常的无限分配和释放内存的处理相反,这有利于模拟只有少量内存的机器
-d --hadd n 产生n个执行write和unlink函数的进程
--hadd-bytes B 指定写的字节数,默认是1GB
--hadd-noclean 不要将写入随机ASCII数据的文件Unlink
时间单位可以为秒s,分m,小时h,天d,年y,文件大小单位可以为K,M,G
对CPU进行压力测试
使用 stress -c N
会让stress生成N个工作进程进行开方运算,以此对CPU产生负载。
比如你的CPU有四个核,那么可以运行
代码语言:javascript复制stress -c 4
这是查看stress进程信息
代码语言:javascript复制ps -elf |grep stress |grep -v grep
代码语言:javascript复制~# ps -elf |grep stress |grep -v grep
0 S root 3540 2975 0 80 0 - 1819 - 15:12 pts/1 00:00:00 stress -c 4
1 R root 3541 3540 96 80 0 - 1819 - 15:12 pts/1 00:00:20 stress -c 4
1 R root 3542 3540 96 80 0 - 1819 - 15:12 pts/1 00:00:20 stress -c 4
1 R root 3543 3540 96 80 0 - 1819 - 15:12 pts/1 00:00:20 stress -c 4
1 R root 3544 3540 96 80 0 - 1819 - 15:12 pts/1 00:00:20 stress -c 4
F :代表这个程序的旗标 (flag), 4 代表使用者为 super user
S :代表这个程序的状态 (STAT),关于各 STAT 的意义将在内文介绍
UID: 程序被该 UID 所拥有
PID:process ID的缩写,也就进程号
PPID :process parent ID,父进程ID
C: CPU 使用的资源百分比
PRI :这个是 Priority (优先执行序) 的缩写
NI :这个是 Nice 值
ADDR: 这个是 kernel function,指出该程序在内存的那个部分。如果是个 running的程序,一般就是 "-"
SZ :使用掉的内存大小
WCHAN: 目前这个程序是否正在运作当中,若为 - 表示正在运作
TTY: 登入者的终端机位置
TIME: 使用掉的 CPU 时间。
CMD:所下达的指令为何
你会发现一共有5个stress进程,其中有4个进程是 17738
进程派生出来的工作进程。而且每个工作进程占用的CPU利用率都接近100%
对内存进行压力测试
类似的,使用 stress -m N
会让stress生成N个工作进程来占用内存。每个进程默认占用256M内存,但可以通过 --vm-bytes
来进行设置。 例如
stress -m 3 --vm-bytes 300M
会生成3个进程,每个进程占用300M内存
代码语言:javascript复制ps -elf |grep stress |grep -v grep
代码语言:javascript复制~# ps -elf |grep stress |grep -v grep
0 S root 3572 2975 0 80 0 - 1819 - 15:15 pts/1 00:00:00 stress -m 3 --vm-bytes 300M
1 R root 3573 3572 99 80 0 - 78620 - 15:15 pts/1 00:00:10 stress -m 3 --vm-bytes 300M
1 R root 3574 3572 99 80 0 - 78620 - 15:15 pts/1 00:00:10 stress -m 3 --vm-bytes 300M
1 R root 3575 3572 99 80 0 - 78620 - 15:15 pts/1 00:00:10 stress -m 3 --vm-bytes 300M
而且你会发现,虽然只是对内存进行压力测试,但实际上CPU也是很繁忙的,占有率也接近100%
对磁盘进行压力测试
对磁盘压力测试有两个参数:
stress -i N
会产生N个进程,每个进程反复调用sync()将内存上的内容写到硬盘上.
而 stress -d N
会产生N个进程,每个进程往当前目录中写入固定大小的临时文件,然后执行unlink操作删除该临时文件。 临时文件的大小默认为1G,但可以通过 --hdd-bytes
设置临时文件的大小。比如
stress -i 2 -d 4
你会发现压力测试时,当前目录所在可用空间少了2G,如下所示:root@jd-privt-local-vm0:~# df -h . Filesystem Size Used Avail Use% Mounted on /dev/sda1 20G 991M 18G 6% / root@jd-privt-local-vm0:~# df -h . Filesystem Size Used Avail Use% Mounted on /dev/sda1 20G 2.7G 17G 14% /
同时对多项指标进行压力测试
stress支持同时对多个指标进行压力测试,只需要把上面的参数组合起来就行
代码语言:javascript复制stress -c 4 -m 2 -d 1
这个时候你再看stress进程
代码语言:javascript复制ps -elf |grep stress |grep -v grep
你会发现工作进程一共有7个,也就是说每个进程只负责一项测试。
设置超时时间
通过 -t TIMEOUT
可以让stress只运行一段时间后自动退出。这一般在写脚本的时候会用到。
比如我想要运行上面的测试,但是10秒后自动退出,那么
代码语言:javascript复制stress -c 4 -m 2 -d 1 -t 10s
代码语言:javascript复制stress: info: [19302] dispatching hogs: 4 cpu, 0 io, 2 vm, 1 hdd
stress: info: [19302] successful run completed in 11s
参考:http://blog.lujun9972.win/blog/2018/05/06/使用stress进行压力测试/
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/207469.html原文链接:https://javaforall.cn