【运维杂谈】如何用shell随机生成10000000条Nginx访问记录?

本篇文章给大家介绍如何用shell编程随机生成一千万条Nginx访问记录,首先我们要明确Nginx记录的格式,其次是明确我们需要随机的内容,随机公网IP,随机时间,随机请求,随机访问路径,随机状态码,随机客户端UA信息,其他的像长短链接和响应头的长度固定即可。

123.112.17.24 - - [28/May/2022:17:53:26 +0800] "GET /linux86.html HTTP/1.1" 404 555 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36" "-"

明确之后,我们开始上手写脚本,思路就是用数组和随机数去做随机,最后循环,循环尽量就使用一个,使用越多效率越低。

[root@ELK103 ~]# cat 10000000.sh 
#!/bin/bash

sj_jilu(){

mounth=`shuf -e Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec -n1`
method=(GET POST PUT DELETE)
path=(/ /koten.html /zhibo.html /youxi.html /linux.html)
status=(200 301 302 403 404)
UA=(
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36"
"Mozilla/5.0 (iPad; CPU OS 13_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/87.0.4280.77 Mobile/15E148 Safari/604.1"
"Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1"
"Mozilla/5.0 (Linux; Android 8.0.0; SM-G955U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Mobile Safari/537.36"
)


jilu="$((RANDOM % 161 + 11)).$((RANDOM % 256)).$((RANDOM % 256)).$((RANDOM % 256)) - - [$((RANDOM % 31))/$mounth/$((RANDOM % 16 + 2008)):`printf "%02d\n" $((RANDOM % 24))`:`printf "%02d\n" $((RANDOM % 60))`:`printf "%02d\n" $((RANDOM % 60))` +0800] \"${method[$((RANDOM % 4))]} ${path[$((RANDOM % 5))]} HTTP/1.1\" ${status[$((RANDOM % 5))]} 555 \"-\" \"${UA[$((RANDOM % 4))]}\" \"-\""

	echo $jilu >> all.txt 

}

while true
do
	{
	sj_jilu
	} &
done

写好脚本后,运行脚本并隐藏到后台,多个线程一起跑

[root@ELK103 ~]# sh 10000000.sh &
[1] 2115
[root@ELK103 ~]# sh 10000000.sh &
[2] 4466
[root@ELK103 ~]# sh 10000000.sh &
[3] 5910
[root@ELK103 ~]# sh 10000000.sh &
[4] 7846
[root@ELK103 ~]# sh 10000000.sh &
[5] 9745
[root@ELK103 ~]# sh 10000000.sh &
[6] 11362
[root@ELK103 ~]# sh 10000000.sh &
[7] 14795
[root@ELK103 ~]# sh 10000000.sh &
[8] 52562
[root@ELK103 ~]# sh 10000000.sh &
[9] 54225
[root@ELK103 ~]# sh 10000000.sh &
[10] 55749
[root@ELK103 ~]# sh 10000000.sh &
[11] 57328
[root@ELK103 ~]# sh 10000000.sh &
[12] 59206
[root@ELK103 ~]# sh 10000000.sh &
[13] 60703
[root@ELK103 ~]# sh 10000000.sh &
[14] 62550
[root@ELK103 ~]# sh 10000000.sh &
[15] 64438

发现内存占用,Mem占用没多少,但是Swap占用很多,我们可以修改下Swappiness
Swappiness为30(100%-30%=70%)表示物理内存使用到70%的时候使用swap空间,我们将该数值调小些

临时修改Swappiness

[root@ELK103 ~]# sysctl vm.swappiness=9
vm.swappiness = 9
[root@ELK103 ~]# cat /proc/sys/vm/swappiness 
9

永久修改Swappiness

[root@ELK103 ~]# egrep -v "^#|^$" /etc/sysctl.conf
vm.swappiness=10
[root@ELK103 ~]# sysctl -p
vm.swappiness = 10

修改后就跑着就行,shell编程由于自身局限速度不会太快,一千万条数据大概2G,电脑配置好的话十几分钟,不好的俩小时,如果你有优化的办法,期待你的分享!


我是koten,10年运维经验,持续分析运维干货,感谢大家的阅读和关注!

猜你喜欢

转载自blog.csdn.net/qq_37510195/article/details/130918987
今日推荐