参考文章:https://blog.csdn.net/robertsong2004/article/details/36879233
当前工作中遇到了一个问题:测试同事反馈进入某个服务的交互界面很慢,这个情况偶尔会出现。
我猜测可能是服务器的负载较高导致的,但是由于测试反馈的不及时,出现这个现象时我没能看到机器的负载情况,所以目前也只是猜测这个原因而已,具体的我需要尝试复现一下,即提高机器的负载,然后再打开该服务的交互界面看会不会出现慢的情况,看在机器负载高的情况下这种慢的现象是不是必现的。
可以使用如下脚本来提高服务器的cpu使用率,提高机器负载:
编写一个脚本testLoad.sh:
vim testLoad.sh
#!/bin/bash
cpus=`cat /proc/cpuinfo | grep processor | wc -l`
for i in seq 1 $cpus
do
dd if=/dev/zero of=/dev/null &
done
脚本解析:
1、cat /proc/cpuinfo | grep proccessor | wc -l命令的作用是统计逻辑cpu的个数,然后根据逻辑cpu的个数创建相应个数的dd进程。
2、seq 1 $cpus的作用是生成从1到$cpus的连续正整数,然后通过for循环创建dd进程。
3、dd if=/dev/zero of=/dev/null &,dd命令的作用是拷贝一个文件,输入来源(if)是/dev/zero,它是一个符号设备,能持续生成字符0;
输出去向(of)是/dev/null;
&表示创建后台进程。
如果测试结束后,想把这些后台进程停掉,该怎么整,总不能让他们一直在那耗着干占着资源,最low的做法是:
ps -ef | grep dd,获取到所有的dd进程的pid,然后kill pid,一个个手动杀掉进程,但是这个很麻烦,稍微有点嫌麻烦的人都不想这样做;
另一个方法是:
如果这些dd进程的pid是连续的,那么可以获取第一个dd进程的pid和最后一个dd进程的pid,通过for循环来kill掉它们,如下:
for((i=startId;i<=endId;i++))
do
kill $i;
done
但是如果pid不连续,那就不能这样做了。
还有其他更好的更快捷的方法吗?当然有,直接使用pkill -9 dd就可以将它们一次性kill掉。
网友评论