标签: apachebench

支持apachebench的多部分POST?

我想使用apachebench(ab)来测试文件上传性能.我已阅读手册,无法找到实现目标的方法.

我的目标是尝试使用POST方法和multipart/form-data格式通过HTTP请求上传文件.

ab支持"-p POST-FILE",但我只能找到格式key = value&key2 = value2

我要发送的帖子数据是什么

内容类型:multipart/form-data; 边界= ---- WebKitFormBoundaryuUlX4554LPBjInc5

------ WebKitFormBoundaryuUlX4554LPBjInc5 Content-Disposition:form-data; NAME = "文件"; filename ="411c40d9.jpg"内容类型:image/jpeg

XXXXXXXXXXXXXXX(图像数据)YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY

我google了一段时间,找不到任何相关的文章或方法来实现这一点.我使用cURL,它工作正常,但我想做压力测试.所以我需要用ab来实现这个目标.

有什么建议?

performance multipart apachebench

7
推荐指数
1
解决办法
4906
查看次数

Node.js在很多并发连接上苦苦挣扎

我正在开发一个有点不同寻常的应用程序,其中10k客户正好计时,每隔3分钟左右一次尝试提交数据.这个'ab'命令相当准确地模拟了现实世界中的一个弹幕:

ab -c 10000 -n 10000 -r "http://example.com/submit?data=foo"
Run Code Online (Sandbox Code Playgroud)

我在Rackspacecloud VPS实例上使用Ubuntu 12.4上的Node.js来收集这些提交,但是,我看到Node的一些非常奇怪的行为,即使我删除了所有的业务逻辑并将http请求变为no-运.

当测试完成大约90%时,它会挂起很长一段时间.奇怪的是,这种情况一直发生在90% - 对于c = n = 10k,在9000; 对于c = n = 5k,在4500; 对于c = n = 2k,在1800.测试实际上最终完成,通常没有错误.但ab和节点日志都显示连续处理直到测试运行的大约80-90%,然后在完成之前长时间停顿.

当节点正常处理请求时,CPU使用率通常约为50-70%.在挂起期间,CPU上升到100%.有时它会保持在0附近.在不稳定的CPU响应和它看起来与实际连接数无关(只有%完成)的事实之间,我不怀疑垃圾收集器.

我试过在localhost和远程服务器上运行'ab' - 效果相同.

我怀疑与TCP堆栈有关的东西,可能涉及关闭连接,但我的配置更改都没有帮助.我的变化:

  • ulimit -n 999999
  • 当我listen()时,我将积压设置为10000

Sysctl的变化是:

net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_max_orphans = 20000
net.ipv4.tcp_max_syn_backlog = 10000
net.core.somaxconn = 10000
net.core.netdev_max_backlog = 10000
Run Code Online (Sandbox Code Playgroud)

我也注意到我倾向于在内核日志中获得这个消息:

TCP: Possible SYN flooding on port 80. Sending cookies.  Check SNMP counters.
Run Code Online (Sandbox Code Playgroud)

我很困惑这个消息,因为TCP积压队列应该足够深,永远不会溢出.如果我禁用syn …

ubuntu tcp apachebench sysctl node.js

7
推荐指数
1
解决办法
7013
查看次数

Apache Bench:SSL握手失败与并发级别直接相关

我在ab上运行了一些测试,当我使用超过155的并发级别时,我得到以下内容:

SSL handshake failed (5).
SSL handshake failed (5).
SSL handshake failed (5).
SSL handshake failed (5).
SSL handshake failed (5).
SSL handshake failed (5).
SSL handshake failed (5).
SSL handshake failed (5).
SSL handshake failed (5).
Completed 100 requests
Completed 200 requests
Finished 200 requests
Run Code Online (Sandbox Code Playgroud)

请求仍然成功:

Concurrency Level:      200
Time taken for tests:   14.481 seconds  
Complete requests:      200
Failed requests:        0
Run Code Online (Sandbox Code Playgroud)

我已经多次测试过,只有当并发度超过155时,SSL握手才会失败.有人可以向我解释它们是如何直接相关的吗?

ssl apachebench sslhandshakeexception

7
推荐指数
1
解决办法
1万
查看次数

如何强制Apache Bench使用/ etc/hosts中指定的IP地址?

我正在使用ApacheBench进行一些负载测试.我希望ab使用Mac上/ etc/hosts中指定的IP地址来解析主机名.我怎么强迫呢?curl有一个--resolve选项来完成这个,就像这里指定的那样.我正在为ab寻找类似的东西.

hosts hosts-file apachebench

7
推荐指数
1
解决办法
5901
查看次数

Akka配置异常:无法加载指定的记录器

我正在尝试使用apache bench工具基于actor模型加载测试我的喷雾http客户端.表现不是很好.更重要的是,当我将并发级别增加到200-300左右时,我看到了几个与记录器相关的错误.

代码片段

   val result = for {
      response <- GlobalObject.io.ask(HttpRequest(GET,URL)).mapTo[spray.http.HttpResponse]
    } yield response
   result Oncomplete{
    case Success(response) => doSomething
   }
Run Code Online (Sandbox Code Playgroud)

完整堆栈跟踪:

[info] [WARN] [03/31/2015 14:31:52.580] [squbs-akka.actor.default-dispatcher-26] [EventStream(akka://hcp-client)] Logger log1-Logging$DefaultLogger did not respond within Timeout(5000 milliseconds) to InitializeLogger(bus)
[error] error while starting up loggers
[error] akka.ConfigurationException: Logger specified in config can't be loaded [akka.event.Logging$DefaultLogger] due to [akka.event.Logging$LoggerInitializationException: Logger log1-Logging$DefaultLogger did not respond with LoggerInitialized, sent instead [TIMEOUT]]
[error]         at akka.event.LoggingBus$$anonfun$4$$anonfun$apply$1.applyOrElse(Logging.scala:116)
[error]         at akka.event.LoggingBus$$anonfun$4$$anonfun$apply$1.applyOrElse(Logging.scala:115)
[error]         at scala.runtime.AbstractPartialFunction.apply(AbstractPartialFunction.scala:36)
[error]         at scala.util.Failure$$anonfun$recover$1.apply(Try.scala:215)
[error] …
Run Code Online (Sandbox Code Playgroud)

scala apachebench actor akka spray

7
推荐指数
1
解决办法
5288
查看次数

为什么简单的瘦服务器在基准测试时停止响应16500个请求?

可能重复:
'ab'程序在很多请求后冻结,为什么?

这是一个简单的测试服务器:

require 'rubygems'
require 'rack'
require 'thin'

class HelloWorld

  def call(env)
    [200, {"Content-Type" => "text/plain"}, "OK"]
  end
end

Rack::Handler::Thin.run HelloWorld.new, :Port => 9294 
#I've tried with these added too, 'rack.multithread' => true, 'rack.multiprocess' => true
Run Code Online (Sandbox Code Playgroud)

这是一个测试运行:

$ ab -n 20000 http://0.0.0.0:9294/sdf
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 0.0.0.0 (be patient)
Completed 2000 requests
Completed 4000 requests
Completed 6000 requests
Completed …
Run Code Online (Sandbox Code Playgroud)

ruby thin apachebench

6
推荐指数
1
解决办法
1921
查看次数

Node.js在Windows上表现不佳,当然它不能比基本I/O的apache慢

问题:结果是我合理吗?是否有任何可能对减少每秒请求数量产生影响的事情?

编辑:我的一个朋友刚刚在Linux上对相同的应用程序进行了基准测试,平均r/s约为7000.

编辑#2:我已经检查了Node.exe的CPU使用率,它只使用了5-6%的cpu.当一个四核机器上的这个数字应该是12%,如果在真正负载的情况下在单个线程上运行时,8个线程CPU应该是这个数字?

我编写了一个Node.js应用程序(运行Node v0.6.10)并使用apachebench对其进行基准测试:ab -c 256 -n 50000 http://localhost:3000/.我每秒钟收到大约650个请求的请求.这里有太多代码,但这是基本结构:

应用程序设置:

/**
 * Module dependencies.
 */
var util = require('util'),                                   //Useful for inspecting JSON objects
    express = require('express'),                             //Express framework, similar to sinatra for ruby
    connect = require('connect'),                             //An integral part of the express framework
    app = module.exports = express.createServer(),            //Create the server
    io = require('socket.io').listen(app),                    //Make Socket.io listen on the server
    parseCookie = require('connect').utils.parseCookie,       //Parse cookies to retrieve session id
    MemoryStore = require('connect').session.MemoryStore, …
Run Code Online (Sandbox Code Playgroud)

apache apachebench node.js

6
推荐指数
2
解决办法
8977
查看次数

使用ab进行Nginx + uWSGI + Flask app性能测试

在尝试对我的烧瓶应用程序进行基准测试时,我遇到了一些与Nginx + uWSGI +烧瓶有关的问题.我的测试显示,这种组合很慢.我在具有4个内核和4 GB RAM的Ubuntu 12.04 VM上全新安装了Nginx 1.1.19和uWSGI 2.0.(下面是Nginx和uWSGI配置)

我做了一个Nginx的基准测试,它自己提供一个静态的20字节文件,并且我能够获得高达80k req/sec.然后我做了Nginx + uWSGI的基准测试+一个非常基本的烧瓶应用程序(烧瓶现场的Hello world示例),我只能获得最大8k req/sec(减少10倍)

我打开登录Nginx和uWSGI(加上stats套接字)并格式化日志以打印两者的请求处理时间,这是我能够收集的内容:

uWSGI平均 请求时间= 0ms
Nginx平均值.REQ时间= 125ms的(Nginx的日志时间包括在uWSGI花费的时间)

我用烧瓶应用程序进行了相同的测试,结果遵循相同的模式

uWSGI平均 req time = 4ms
Nginx avg.请求时间= 815ms

问题:看来Nginx和uWSGI之间的沟通花费了大量时间.有谁见过这个问题之前??? 我已经尝试过Nginx和uWSGI的所有配置都具有相同的结果.

请注意,我使用apachebench(ab)进行了测试,这些测试都是在本地VM上和具有相同结果的远程计算机上进行的.

Nginx conf

user www-data;
worker_processes 4;
worker_rlimit_nofile 200000;
pid /var/run/nginx.pid;

events {
        worker_connections  10240;
        #multi_accept on;
        #use epoll;
}

http {
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 10;
        types_hash_max_size 2048;
        client_body_timeout 10;
        send_timeout 2;
        gzip on;
        gzip_disable "msie6";
        keepalive_disable "msie6";

        include       /etc/nginx/mime.types;
        default_type …
Run Code Online (Sandbox Code Playgroud)

performance nginx apachebench flask uwsgi

6
推荐指数
1
解决办法
3849
查看次数

使用ab对简单的Rust HTTP服务器进行基准测试时,"通过对等方重置连接"

我正在尝试在Rust中编写一个非常简单的并发服务器来使用该语言的并发原语及其线程模型.这是我的代码:

use std::io::prelude::*;
use std::io::Result;
use std::net::{TcpListener, TcpStream, Shutdown};
use std::sync::{Arc, Mutex};
use std::thread;

fn handle_client(mut stream: TcpStream) -> Result<()> {
    try!(stream.write(b"HTTP/1.0 200 OK\r\nContent-Type: text/plain\r\nContent-Length: 5\r\n\r\nPong!\r\n"));
    // try!(stream.shutdown(Shutdown::Both));

    Ok(())
}

fn main() {
    let listener = TcpListener::bind("127.0.0.1:1337").unwrap();
    // let count = Arc::new(Mutex::new(0));

    for stream in listener.incoming() {
        match stream {
            Ok(stream) => {
                // let count = count.clone();
                thread::spawn(move || {
                    let _ = handle_client(stream);

                    // let mut count = count.lock().unwrap();
                    // *count += 1;
                    // println!("{:?}", *count);
                });
            } …
Run Code Online (Sandbox Code Playgroud)

multithreading http apachebench rust server

6
推荐指数
1
解决办法
1185
查看次数

apt-get install apache2-utils尝试安装不存在的包

当试图安装ab(apache benchmark)时,像这样:

sudo apt-get install apache2-utils
Run Code Online (Sandbox Code Playgroud)

在我的Mint 16/Ubuntu 13系统上,我收到以下消息:

sudo apt-get install apache2-utils
[sudo] password for <user>: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  libjs-cropper libjs-prototype libjs-scriptaculous libphp-phpmailer libphp-snoopy tinymce
Use 'apt-get autoremove' to remove them.
The following NEW packages will be installed:
  apache2-utils
0 upgraded, 1 newly installed, 0 to remove and 15 not upgraded.
Need to get 82,4 kB of archives.
After this …
Run Code Online (Sandbox Code Playgroud)

ubuntu install apt-get apachebench apache-utils

6
推荐指数
0
解决办法
2231
查看次数