跳转到内容
彼岸论坛
欢迎抵达彼岸 彼岸花开 此处谁在 -彼岸论坛

[程序员] limit_req_zone 的使用疑问


小天管理

已推荐帖子

今天在使用 NGINX 的 limit_req_zone 时,发现统计出来的数据和过滤结果不一致的问题,情况如下:


一、过滤:

nginx 配置文件添加:

limit_req_zone $binary_remote_addr zone=mylimit:100m rate=2000r/s;

location / {} 中添加:

limit_req zone=mylimit  burst=1000;

重启 nginx 后,在 error.log 的日志中,发现了大量的这样的日志:

2024/07/08 10:13:47 [error] 30#30: *75739 limiting requests, excess: 1.000 by zone "mylimit", client: x.x.x.x, server: xxx-zj.cn, request: "POST /rela/getid HTTP/1.1", host: "xxx-zj.cn",

那么问题就来了,公司的访问量绝对不会高到 2000R/S ,更别说单个 IP 了。因此采用了两种方法统计了一下请求量


二、统计:

1.通过 grep 日志文件中的每一秒,wc -l 汇总数量:

cat access.log |grep "\[08/Jul/2024:10:13:47" | wc -l 

结果是 178 ,在统计几个,也都是 200+ 300+的数量,绝对不超过 1000


2.通过 nginx_status 判断

写一个脚本,统计 10s 内的 http://127.0.0.1/nginx_status ,并相减,求每秒的 requests

for i in {1..10}
do
    # 获取当前的请求数
    status=$(curl -s http://127.0.0.1/nginx_status)
    current_requests=$(echo "$status" | grep 'server accepts handled requests' -A 1 | tail -n 1 | awk '{print $3}')
    
    # 将当前请求数存储到数组中
    requests+=($current_requests)
    
    # 等待 1 秒
    sleep 1
done

#### 计算每秒请求数的差值
echo "Requests difference per second:"
for (( i=1; i<${#requests[@]}; i++ ))
do
    diff=$((requests[i] - requests[i-1]))
    echo "Second $i: $diff requests"
done

运行脚本后,输出:
Requests difference per second:
Second 1: 258 requests
Second 2: 325 requests
Second 3: 334 requests
Second 4: 300 requests

...省略

结果也都是只有几百,远远没有到达 2000 的过滤阈值,请问大佬么,这是为什么?

意见的链接
分享到其他网站

加入讨论

您现在可以发表并稍后注册. 如果您是会员,请现在登录来参与讨论.

游客
回复主题...

×   粘贴为富文本.   粘贴为纯文本来代替

  只允许使用75个表情符号.

×   您的链接已自动嵌入.   显示为链接来代替

×   您之前的内容已恢复.   清除编辑器

×   您无法直接粘贴图片.要从网址上传或插入图片.

  • 游客注册

    游客注册

  • 会员

    没有会员可显示

  • 最新的状态更新

    没有最新的状态更新
  • 最近查看

    • 没有会员查看此页面.
×
×
  • 创建新的...