<div style="line-height:1.7;color:#000000;font-size:14px;font-family:arial">Hi, all,<div><br></div><div>I use limit_req module to limit QPS to my upstream, conf like this:</div><div>http {</div><div><span class="Apple-tab-span" style="white-space:pre">  </span>limit_req_zone $request_uri zone=req_one:10m rate=10000r/s;</div><div><span class="Apple-tab-span" style="white-space:pre">  </span>server {</div><div><span class="Apple-tab-span" style="white-space:pre">             </span>...</div><div><span class="Apple-tab-span" style="line-height: 1.7; white-space: pre;">              </span><span style="line-height: 1.7;">location / {</span></div><div><span style="line-height: 1.7;"><span class="Apple-tab-span" style="white-space:pre">                    </span>limit_req zone=req_one;</span></div><div>       <span class="Apple-tab-span" style="white-space:pre">              </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>}</div><div>}</div><div><br></div><div>I use benchmarking tool to stress on one url, but only about 1000 request. </div><div><br></div><div>I checked source code, found that:</div><div><div>            ms = (ngx_msec_int_t) (now - lr->last);</div><div><br></div><div>            excess = lr->excess - ctx->rate * ngx_abs(ms) / 1000 + 1000;</div><div><br></div><div>            if (excess < 0) {</div><div>                excess = 0;</div><div>            }</div><div><br></div><div>            *ep = excess;</div><div><br></div><div>            if ((ngx_uint_t) excess > limit->burst) {</div><div>                return NGX_BUSY;</div><div>            }</div></div><div><br></div><div>At here, ms can be '0', so in a millisecond, only the first request can pass the checking. After I set burst value to (rate / 1000) in configuration file, the QPS result is expected.</div><div><br></div><div>I'm not sure whether this is a bug or It's my fault in configuration.</div><div><br></div><div>Thanks.</div><div><br></div><div><br></div><div><br></div><div><br></div></div>