![ab(Apache Benchmark)“失败”中的“接收”和“异常”是什么意思?](https://linux22.com/image/593405/ab%EF%BC%88Apache%20Benchmark%EF%BC%89%E2%80%9C%E5%A4%B1%E8%B4%A5%E2%80%9D%E4%B8%AD%E7%9A%84%E2%80%9C%E6%8E%A5%E6%94%B6%E2%80%9D%E5%92%8C%E2%80%9C%E5%BC%82%E5%B8%B8%E2%80%9D%E6%98%AF%E4%BB%80%E4%B9%88%E6%84%8F%E6%80%9D%EF%BC%9F.png)
从 ab 获得此结果:
并发级别:10000
测试时间:69.153 秒
已完成请求:30000
失败请求:10379
(连接:0,接收:3424,长度:3531,例外:3424)
写入错误:0
总共传输:48414203 字节
HTML 传输:41042477 字节
每秒请求数:433.82
[#/秒](平均)
接收和异常到底是什么意思。谢谢。
答案1
从http://httpd.apache.org/docs/2.2/programs/ab.html,
Failed requests
The number of requests that were considered a failure. If the number is greater
than zero,another line will be printed showing the numer of requests that
failed due to connecting, reading, incorrect content length, or exceptions.
如果您测试的是“动态”页面,则内容长度会发生变化,可能会导致失败。例如,广告、图片或页面上的不同结果。
我猜测,异常只是页面上的应用程序抛出的异常。
您的失败率可能很高,因为您的后端应用程序可能无法承受负载或连接。
更新:从 ab 源代码来看,接收(err_recv 计数)意味着
/* catch legitimate fatal apr_socket_recv errors */ else if (status != APR_SUCCESS) { err_recv++; if (recverrok) { bad++; close_connection(c); if (verbosity >= 1) { char buf[120]; fprintf(stderr,"%s: %s (%d)\n", "apr_socket_recv", apr_strerror(status, buf, sizeof buf), status); } return;
这基本上意味着,您的 apache/webserver 在处理 ab 发送的数据包时遇到了问题。这可能是由很多原因造成的——网络、apache 太忙……当您运行测试时,您是否在 apache/webserver 日志中看到任何错误?具体来说,是连接重置还是超时?