Come get 500K richieste al secondo sul mio webserver?

Recentemente mi sono regalato un nuovo server dedicato e sto cercando di sfruttare al massimo le performance, per divertimento e apprendimento.

Sto cercando di get le più alte richieste possibili per secondo che questo server può gestire e mirare a 500K richieste / sec come menzionato qui – http://lowlatencyweb.wordpress.com/2012/03/20/500000-requestssec-modern-http-servers -sono-veloce /

Dettagli del server

Intel® Xeon® E3-1270 4 cores (8 HT) x 3,4 GHz

RAM 24 GB DDR3 ECC

Spazio su disco rigido 2.000 GB (2 x 2.000 SATA) RAID Software RAID 1

Lan 100mbps

OS Centos 6.3 64 bit

nginx

Sono in grado di raggiungere solo 35K richieste / sec per un file txt statico. Sto eseguendo il benchmark sulla stessa macchina. Sono consapevole dei limiti della networking NIC e della sovraccarico di networking

ab -n100000 -c200 http://localhost/test.txt 

Aggiornamento – 165K richieste / sec

Ho provato un altro strumento di benchmarking chiamato wrk e mi ha dato 165K richieste / sec. Così freddo!

Aggiorna 2 – 250K richieste / sec

nginx.conf

 ####################################################################### # # This is the main Nginx configuration file. # # More information about the configuration options is available on # * the English wiki - http://wiki.nginx.org/Main # * the Russian documentation - http://sysoev.ru/nginx/ # ####################################################################### #---------------------------------------------------------------------- # Main Module - directives that cover basic functionality # # http://wiki.nginx.org/NginxHttpMainModule # #---------------------------------------------------------------------- user nginx; worker_processes 8; worker_rlimit_nofile 262144; error_log /var/log/nginx/error.log; #error_log /var/log/nginx/error.log notice; #error_log /var/log/nginx/error.log info; pid /var/run/nginx.pid; #---------------------------------------------------------------------- # Events Module # # http://wiki.nginx.org/NginxHttpEventsModule # #---------------------------------------------------------------------- events { worker_connections 16384; multi_accept on; use epoll; } #---------------------------------------------------------------------- # HTTP Core Module # # http://wiki.nginx.org/NginxHttpCoreModule # #---------------------------------------------------------------------- http { include /etc/nginx/mime.types; index index.php index.html index.htm; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; server_tokens off; client_max_body_size 24m; client_body_buffer_size 128k; #keepalive_timeout 0; keepalive_timeout 65; open_file_cache max=1000; open_file_cache_min_uses 10; open_file_cache_errors on; gzip on; gzip_static on; gzip_comp_level 3; gzip_disable "MSIE [1-6]\."; gzip_http_version 1.1; gzip_vary on; gzip_proxied any; gzip_types text/plain text/css text/xml text/javascript text/x-component text/cache-manifest application/json application/javascript application/x-javascript application/xml application/rss+xml application/xml+rss application/xhtml+xml application/atom+xml application/wlwmanifest+xml application/x-font-ttf image/svg+xml image/x-icon font/opentype app/vnd.ms-fontobject; gzip_min_length 1000; fastcgi_cache_path /tmp levels=1:2 keys_zone=NAME:10m inactive=5m; fastcgi_cache_key "$scheme$request_method$host$request_uri"; server { listen 80; server_name _; root /var/www/html; #charset koi8-r; #access_log logs/host.access.log main; location / { try_files $uri $uri/ /index.php?$args; } error_page 404 /404.html; location = /404.html { root /var/www/error; } # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/www/error; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; # checks to see if the visitor is logged in, a commenter, # or some other user who should bypass cache set $nocache ""; if ($http_cookie ~ (comment_author_.*|wordpress_logged_in.*|wp-postpass_.*)) { set $nocache "Y"; } # bypass cache if logged in. # Be sure that this is above all other fastcgi_cache directives fastcgi_no_cache $nocache; fastcgi_cache_bypass $nocache; fastcgi_cache NAME; fastcgi_cache_valid 200 302 10m; fastcgi_cache_valid 301 1h; fastcgi_cache_valid any 1m; fastcgi_cache_min_uses 10; fastcgi_cache_use_stale error timeout invalid_header http_500; fastcgi_buffers 256 16k; } location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } # Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac). location ~ /\. { deny all; access_log off; log_not_found off; } # Deny access to any files with a .php extension in the uploads directory location ~* ^/wp-content/uploads/.*.php$ { deny all; access_log off; log_not_found off; } location ~* \.(jpg|jpeg|gif|png|flv|mp3|mpg|mpeg|js|css|ico)$ { expires max; log_not_found off; } } } 

  • Windows / IIS Hosting :: Quanto è troppo?
  • Hosting di un server per siti web, ftp e random a casa?
  • server Web statico: 32 o 64 bit?
  • Come devo minimizzare l'impatto del traffico web 404?
  • Miglior pratica o generalmente il modo migliore per impostare server web hosting, autorizzazioni, ecc
  • Come impostare lo sviluppo, lo staging, la produzione e gli ambienti QA
  • È sicuro utilizzare HTTP / HTTPS su porte 8080/8443
  • Modellazione di infrastrutture utilizzando macchine virtuali - un approccio vitale?
  • 4 Solutions collect form web for “Come get 500K richieste al secondo sul mio webserver?”

    Innanzitutto, si dovrebbe scrivere un nuovo strumento di benchmarking. Stai effettivamente nginx analisi non nginx .

    Arpit, se si immagina che la risposta più probabile del web più probabile, anche se è un file di text statico è un pacchetto Ethernet (~ 1.500 byte), allora 500.000 di essi funziona a circa 750.000.000 byte oa circa 7,5 gigabit. Quindi, a less che il tuo server non abbia facilmente scaricato NIC da 10Gb (e non lo fa, quello che hai è cento volte più lento) e hai installato i driver e il kernel per permetterti di quasi completamente inondare uno di questi collegamenti, le latenze dei bilanciatori di carico, i firewall, i router e le connessioni successive a quella velocità, allora non sarai mai in grado di colpire tale tipo di prestazione – anche con una singola risposta a pacchetti, che è improbabile. Così, in ultima analisi, 35k suona non lontano dal tuo limite.

    Identifichiamo il collo di bottiglia. Dato che sei sulla stessa macchina, possiamo supporre che sia un'attività CPU o disco. Per il solo file di text, non dovrebbe essere attività disco, ma a 35k connessioni, è ansible generare anche 35MB di logging each secondo.

    Gli esempi che stai mostrando non eseguono la logging di accesso, solo gli errori. Il tuo config, però, ha molto più in corso, la logging in particolare:

     log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; 

    Inizia con la distriggerszione di tale logging e quindi capisci where stai appeso al successivo. Inoltre, considerare che l'esecuzione del client test sulla stessa macchina può avere un impatto notevole sul demone del server. L'ipertestamento può anche trasformare ou per essere nocivo a volte, quindi esplorare se funziona meglio per il tuo carico quando acceso o spento.

    se siete appena dopo i numbers [per esempio non esiste un vero caso di utilizzo dietro questo test] – fai ab utilizzare la funzionalità mantenuta viva di http – eseguire il numero di richieste su una connessione TCP già aperta.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.