2010-07-17

Load testing WCF services with Apache Bench

Fredrik Lindström

Apache Bench is a load testing tool that ships with Apache HTTP Server but it can also be run against WCF services with basicHttp or wsHttp bindings. The tool itself consists of one EXE file which makes deploying it to multiple client machines a trivial affair.

Notes

  • We used Apache Bench against BizTalk WCF (wsHttp, two-way) receive locations to identify bottlenecks throughout our entire solution
  • Security was disabled on the WCF service that Apache Bench was hitting
  • There is no ramp-up. Apache Bench will hit your service with full force right from the start.
  • Use PerfMon to see how your service and back-end systems are doing
  • Apache bench is very light weight on the client, hardly CPU utilization at all

Apache Bench command – 200 requests with 50 concurrent calls

ab -T “application/soap+xml; charset=UTF-8″ -p data.xml -n 200 -c 50 http://biztalk/OrderService.svc

data.xml

This file contains the message that Apache Bench will send to the service. Use Fiddler to see and copy what is going over the wire when a normal WCF client is sending messages to your service

Apache Bench output

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 biztalk (be patient)
Completed 100 requests
Completed 200 requests
Finished 200 requests

Server Software: Microsoft-IIS/7.5
Server Hostname: biztalk
Server Port: 80

Document Path: /OrderService.svc
Document Length: 1766 bytes

Concurrency Level: 50
Time taken for tests: 3.767 seconds
Complete requests: 200
Failed requests: 0
Write errors: 0
Total transferred: 416000 bytes
Total POSTed: 188200
HTML transferred: 353200 bytes
Requests per second: 53.09 [#/sec] (mean)
Time per request: 941.844 [ms] (mean)
Time per request: 18.837 [ms] (mean, across all concurrent requests)
Transfer rate: 107.83 [Kbytes/sec] received
48.78 kb/s sent
156.62 kb/s total

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 0.6 1 5
Processing: 217 851 312.2 795 1937
Waiting: 216 850 312.2 791 1937
Total: 218 852 312.3 795 1938

Percentage of the requests served within a certain time (ms)
50% 795
66% 922
75% 1026
80% 1079
90% 1255
95% 1551
98% 1781
99% 1879
100% 1938 (longest request)

Share

2010-04-06

Qbranch Syd söker utvecklare

Per Önnemyr | QbranchSyd, rekrytering


Vi på Qbranch Syd söker en systemutvecklare med fokus på integration till Malmö. Är du sugen eller känner någon som är så gå in på vår sida Qbranch.se och läs mer under Karriär.

 

 

Hoppas vi ses!
 

 

+ Comments (3) Share

2010-03-09

Recap from GTUG Sthlm 4/3: Groovy, MIDI and some Closure...

Leonard Axelsson | appengine, gaelyk, groovy, presentation

Did a presentation about Groovy on Google's App Engine at GTUG Stockholm last thursday. Had a great evening as expected.

Johan Burell (@Burre83) demoed his api and client implementation of a MIDI api for the android. The live "DJ on the Android" demo was cool even though it was impossible to actually see what he did as he used his own phone instead of the emulator during the demo. 

Mikael Kindborg (@divineprog) presented on Google Closure, a new library for JS development which comes with what seems to be a really effective JavaScript Optimizer. There was even some more Android to be had when he demoed his JS Android Client that receives JavaScript over a socket and runs it on the device. Was kinda cool when a guy on the first row held up the Mikaels Android and we could se how the ui on the phone changed as Mikael recoded it live on his computer. I have a hard time seeing the practical applications for this but it's a cool demo non the less.

I focused on how to leverage Groovy on App Engine using Gaelyk as Grails IMHO isn't really worth the effort right now (on GAE). The environment I used was SpringSource Tool Suite (Groovy support) and the Google App Engine Plugin for Eclipse.

Presentation and examples: on Github as well as on GTUG Stockholm:s page

 

+ Comments (0) Share

2010-02-15

DSCT 2.0 Beta 3

Fredrik Lindström

I’ve been meaning to get a final 2.0 version out the door for quite some time but work has taken up most of my free time and will continue to do so for a while longer. I hope you find this new version useful but please keep in mind that it is a beta version.

Special Thanks to Daniel Brad for some real world testing.

Download

  • DSCT 2.0 Beta 3 x64
  • DSCT 2.0 Beta 3 x86
  • Scalability

  • DSCT now supports ADs containing a large amount of objects (several 100k)
  • Performance

  • Big speed increase when restoring groups with many members (10k and up)
  • Big speed increase when comparing AD:s containing an extreme amount of objects to snapshots
  • Snapshot state is now saved to disk (1kb file containing a DirSync cookie) when DSCT connects to a snapshot for the first time. Subsequent connections to the same snapshot utilize the saved cookie. Big performance gain.
  • New features

  • View who was added/removed from a specific group since the snapshot was taken. Selectively undo/restore changes to the membership
  • Tree view
  • Misc

  • Support for running DSCT 2.0 on Windows XP has been dropped
  • Known Issues

  • Full membership restore of very large groups (20k+) fails on a DC running Windows Server 2008. I have not been able to reproduce this error on Windows Server 2008 R2. Needs some more investigation
  • Let me know
    Feel free to leave a comment if you run into any issues

    Share

    2010-02-06

    Sharepoint 2010, ADFS 2.0 and Roles

    Fredrik Lindström

    I’ve been tinkering quite a bit with Sharepoint 2010 and ADFS 2.0 lately and figured that this was worth sharing.

    I followed the steps outlined in Travis Nielsen’s blog post to configure a federated identity provider in Sharepoint 2010 and configured ADFS 2.0 in my own way since our setup involves quite a few partner organizations. One thing that is not mentioned in the step by step guide is how to configure Sharepoint to accept role claims and assign access rights based on those claims.

    The following Powershell snippet will do the trick

    $issuer = Get-SPTrustedIdentityTokenIssuer
    $issuer.ClaimTypes.Add(”http://schemas.microsoft.com/ws/2008/06/identity/claims/role“)
    $map = New-SPClaimTypeMapping “http://schemas.microsoft.com/ws/2008/06/identity/claims/role” -IncomingClaimTypeDisplayName “Role” -SameAsIncoming
    $issuer.AddClaimTypeInformation($map)
    $issuer.Update()

    After this the “Role” entry will show up in the people picker and you will be able to assign role claims to Sharepoint groups.

    Share

    Subscribe to RSS Feed
    Home
    About
    Work at QBRANCH
    Mac Rumors
    Qi4j
    Kim Cameron's Identity Weblog
    The Java Posse
    Grails
    DSCT
    Qanban
    .net ASP.NET CMS ESI Escenic FAST QbranchSyd Sharepoint TIOBE VCL ad adfs agent amazon amazonwebservices announcement api appengine applicationmanagment appservers aspx authentication aws blog c# cache cassatt challenge chrome cloud cloudcomputing cmis code conference convert csv ddd denmark dependecyinjection designpatterns development dsl ec2 eclipse ecm eucalyptus example export fix gaelyk google gps gr8conf grails griffon groovy ilm interview inthecode invitation iphone java javascript jazz jfokus jmx kanban licensing linux load times mac mailinglist maps maven meeting microsoft midp mvp opensource optimization outsourcing plugins postback presentation privatecloud project qanban qbranch rekrytering rest rmi robot s3 saml scala schedule scripting scriptoftheweek selenium snowleopard soa soap sourcing springsource spy sql sso sweden swegug terracotta test text tomcat trace twitter update url usergroup varnish visualstudio webbrowser webkit webservice windowsserver wired wpf