Hello all, I'm attempting to test/tune a mongrel cluster according to the tuning instructions on the mongrel site (using httperf). Anecdotally, the site itself 'feels' snappy, but testing it with httperf reveals what appears to be terrible throughput. I'm kind of at a loss to describe the results, and was hoping someone could verify that I'm testing incorrectly (enormously likely), or truly have a problem that needs to be ferreted out. When testing a page that is served solely by apache, I get about 3000 req/s, while pages served by mongrel are getting around 1.6 req/s! Let me add that I am doing this test from a different machine, however, I am not able to actually remove network latency as a confounding factor (as per the tuning notes). If that renders this entire test moot, please let me know.
The virtual hosts section of my apache config is included at the end of this post. The httperf command: httperf --server xx.xxx.xx.xx --port 80 --uri /something/like/this/page --num-conns 20 --hog -v httperf results: httperf --verbose --hog --client=0/1 --server=xx.xxx.xx.xx --port=80 --uri=/something/like/this/page --send-buffer=4096 --recv-buffer=16384 --num-conns=20 --num-calls=1 httperf: maximum number of open descriptors = 1024 reply-rate = 1.4 reply-rate = 1.6 Maximum connect burst length: 1 Total: connections 20 requests 20 replies 20 test-duration 13.002 s Connection rate: 1.5 conn/s (650.1 ms/conn, <=1 concurrent connections) Connection time [ms]: min 592.5 avg 650.1 max 714.0 median 659.5 stddev 39.7 Connection time [ms]: connect 1.9 Connection length [replies/conn]: 1.000 Request rate: 1.5 req/s (650.1 ms/req) Request size [B]: 96.0 Reply rate [replies/s]: min 1.4 avg 1.5 max 1.6 stddev 0.1 (2 samples) Reply time [ms]: response 565.8 transfer 82.4 Reply size [B]: header 291.0 content 96746.0 footer 0.0 (total 97037.0) Reply status: 1xx=0 2xx=20 3xx=0 4xx=0 5xx=0 CPU time [s]: user 3.44 system 9.43 (user 26.5% system 72.5% total 99.0%) Net I/O: 145.9 KB/s (1.2*10^6 bps) Errors: total 0 client-timo 0 socket-timo 0 connrefused 0 connreset 0 Errors: fd-unavail 0 addrunavail 0 ftab-full 0 other 0 Apache Config, Virtual Hosts section: NameVirtualHost *:80 # Configure mongrel_cluster <Proxy balancer://the-cluster> BalancerMember http://127.0.0.1:8000 BalancerMember http://127.0.0.1:8001 BalancerMember http://127.0.0.1:8002 BalancerMember http://127.0.0.1:8003 BalancerMember http://127.0.0.1:8004 BalancerMember http://127.0.0.1:8005 BalancerMember http://127.0.0.1:8006 BalancerMember http://127.0.0.1:8007 #[srb] Uncomment when reverse proxying across other machines #BalancerMember http://xx.xxx.xx.xx loadfactor=2 </Proxy> #[srb] This configuration pulled from here # http://www.rss-spider.com/article.php?WID=305127 # and here: # http://www.howtoforge.com/load_balancing_apache_mod_proxy_balancer # and here: # http://reductivelabs.com/trac/puppet/wiki/UsingMongrel # <VirtualHost *:80> #[srb] next line added ServerAdmin [EMAIL PROTECTED] ServerName blah.com DocumentRoot /var/www/apps/blah/public #[srb] Turn off ProxyRequests if using ProxyPassReverse # http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypass ProxyRequests Off <Directory "/var/www/apps/blah/public"> Options FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> RewriteEngine On #[srb] TODO this next line was mentioned as a way to propogate # an identifier to stickily preserve login information. At this # time it seems unnecessary #RewriteRule .* - [CO=BALANCEID:balancer.http1:.blah.com] # Uncomment for rewrite debugging RewriteLog logs/the_cluster_rewrite_log RewriteLogLevel 9 # Check for maintenance file and redirect all requests RewriteCond %{DOCUMENT_ROOT}/system/maintenance.html -f RewriteCond %{SCRIPT_FILENAME} !maintenance.html RewriteRule ^.*$ /system/maintenance.html [L] # Rewrite index to check for static RewriteRule ^/$ /index.html [QSA] # Rewrite to check for Rails cached page RewriteRule ^([^.]+)$ $1.html [QSA] # Redirect all non-static requests to cluster RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f RewriteRule ^/(.*)$ balancer://the-cluster%{REQUEST_URI} [P,QSA,L] # Configure reverse (must match the BalancerMember values) #[srb] Note: these next lines appear to be redundant with the # rewrite rules above #ProxyPass / balancer://the-cluster #ProxyPassReverse / balancer://the-cluster ProxyPreserveHost on # Deflate # http://rubyforge.org/pipermail/mongrel-users/2006-May/000247.html AddOutputFilterByType DEFLATE text/html text/plain text/xml BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html # this not only blocks access to .svn directories, but makes it appear # as though they aren't even there, not just that they are forbidden <DirectoryMatch "^/.*/\.svn/"> ErrorDocument 403 /404.html Order allow,deny Deny from all Satisfy All </DirectoryMatch> ErrorLog logs/the-cluster-error_log CustomLog logs/the_cluster_access_log combined </VirtualHost>
_______________________________________________ Mongrel-users mailing list Mongrel-users@rubyforge.org http://rubyforge.org/mailman/listinfo/mongrel-users