nginx的qps计算脚本

qps计算脚本

包括计算全天pv、qps
给定时间段内pv、qps
峰值时间qps
一般时间qps

#!/bin/bash
  
#********************************************************************
# File Name: ngx_qps.sh
# Version: V1.0
# Author: dahuangji
# Email: 
# Created Time : 2022-02-13 09:07:41
# Description:
#********************************************************************

RED='\E[31;2m'
GREEN='\E[32;1m'
END='\E[0m'
days_pv=`wc -l /opt/nginx/logs/access.log|cut -d ' ' -f1`

ngx_qps() {
	TIME=$1
	if [[ "$TIME" = "" ]];then
		echo -e "$RED 必须给定统计pv的时间 $END"
		return 1
	fi
	old_request=$(curl -u hj:123456 http://2.2.2.12:81/ngx_status 2>/dev/null\
		|awk 'NR==3 {print}'\
		|awk '{print $3}')
	sleep $TIME
	new_request=$(curl -u hj:123456 http://2.2.2.12:81/ngx_status 2>/dev/null\
		|awk 'NR==3 {print}'\
		|awk '{print $3}')
	requests=$((new_request-old_request))
	qps=$(echo "scale=2;$requests/$TIME"|bc)
	echo -e "$GREEN $TIME秒的请求数(pv): $requests $END"
	echo -e "$GREEN $TIME秒的qps为:$qps $END"

	workers=`awk -F' +|;' '/processes/{print $2}' /opt/nginx/conf/nginx.conf`
	if [ $workers == "auto" ] ;then
		workers=`awk '/cores/{print $4}' /proc/cpuinfo`
		worker_qps=$(echo "scale=2; $qps/$workers"|bc)
		echo -e "$GREEN $TIME秒单个worker进程的qps为:$worker_qps $END"
	else 
		worker_qps=$(echo "scale=2; $qps/$workers"|bc)
		echo -e "$GREEN $TIME秒单个worker进程的qps为:$worker_qps $END"
	fi
}

ngx_qps_day() {
	qps=`echo "scale=2; $days_pv/86400"|bc`
	echo -e "$GREEN 一天的pv是: $days_pv $END"
	echo -e "$GREEN 一天的qps是: $qps $END"
}
	
ngx_qps_crest() {
	qps_dub=`echo $days_pv|awk '{printf("%.2f\n", ($1*0.8)/(86400*0.2))}'`
	echo -e "$GREEN 一天的pv是: $days_pv $END"
	echo -e "$GREEN 一天中峰值qps是:$qps_dub $END"
}
ngx_qps_usually() {
	qps_dub=`echo $days_pv|awk '{printf("%.2f\n", ($1*0.2)/(86400*0.8))}'`
	echo -e "$GREEN 一天的pv是: $days_pv $END"
	echo -e "$GREEN 一天中闲余qps是:$qps_dub $END"
}

调用脚本:

. ngx_qps.sh
ngx_qps 30	#计算30秒内的qps及每个worker进程的qps
ngx_qps_day	#计算每天的qps
posted @ 2022-02-14 11:10  suyanhj  阅读(370)  评论(0)    收藏  举报