Tag Archive: IIS

Couple days ago, I had to setup a machine for a customer of ours who will host a web site for some Microsoft conference in Croatia. Since, this is the biggest IT conference in Croatia, I really tried to take everything to the next level and tweak the hell out of that machine :)

For stress testing, I used Siege with  url.txt file where I saved about 20 links from the web site I was testing, in order to emulate the real world scenario as much as possible.

So, for starters, lets throw out some numbers, to see how the machines copes when the IIS install is out of the box :


The test has been run with 150 concurrent users.
Lifting the server siege...      done.                                         Transactions:                    5215 hits
Availability:                 100.00 %
Elapsed time:                  59.83 secs
Data transferred:             472.64 MB
Response time:                  1.69 secs
Transaction rate:              87.16 trans/sec
Throughput:                     7.90 MB/sec
Concurrency:                  147.32
Successful transactions:        5215
Failed transactions:               0
Longest transaction:            5.99
Shortest transaction:           0.25

So, lets take look on the Longest and Shortest transaction value – pretty jumpy, right?

It took the machine to serve the page, in a range of 0.25 to almost 6 seconds? SLOW!

STOP!  Tweaking time :)

One note – do not run 32 bit apps in 64 application pool – waste of resources!

Since this is a website which has around 120 requests to the IIS server for loading one page  I have TURNED OFF the compression!

Why? Simple tradeoff, more bandwidht for less CPU usage. With compression turned on, site had around 1.2 MB ( a lot, I know ), but with compression turned off, site loading time went down for almost 50%, and the site size went for for only 100 KB :)   -  a good trade off in my opinion!

Next -  lets cache this sucker out, I turned on caching for both dynamic and static content, pretty simple setting for a huge improvement!

Now, lets dive into some more complex tweaking -  .Net and registry tweak.

Does the “word”  MaxConcurrentThreadsPerCPU sound familiar?

Basically, with standard out-of-the-box setting, number of requests per CPU is limited to 12.

By default, this entry doesnt exist in the registry, so we need to add it.

MaxConcurrentRequestsPerCPU within HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\2.0.50727.0 determines the number of concurrent requests per CPU.

Since that value in .NET 4 is already set to 5000, there’s no need to change that is you run a .NET 4 application, but in my case, I had applications with .NET 2, .NET 3.5 and .NET 4 running on the machine, so I have set the value  MaxConcurrentRequestsPerCPU to 0 – which means unlimited.

Lets do some load stress with the new IIS and .NET setting. Again, we will run Siege with 150 concurrent users.
Lifting the server siege...      done.                                         Transactions:                    8171 hits
Availability:                 100.00 %
Elapsed time:                  59.58 secs
Data transferred:             643,80 MB
Response time:                  0.96 secs
Transaction rate:             137.14 trans/sec
Throughput:                     10.73 MB/sec
Concurrency:                  131.67
Successful transactions:        8171
Failed transactions:               0
Longest transaction:            1.99
Shortest transaction:           0.15

So, as we can see, we had almost 3000 more transactions, better transaction rate and load time improved over 3 times ( 0.15 to 1.99 sec ).

But wait, there’s more, in the next post, we will do some network level tweaking, and see if we can get even more juice from the machine.

 

NOTE:  Since I didnt write the applications  and didnt have access to them to review them, I had to optimize the server as much as possible.

Fact number one: If you have a streaming server, you must install this extension!

Great, now that we’ve got this fact covered, we can move on.

IIS site says:

Bit Rate Throttling, an IIS Media Services extension, saves money on network costs by metering the download speed of media and data files. For media, Bit Rate Throttling accomplishes this by automatically detecting the encoded bit rates of 11 common media formats, such as Windows Media Video (WMV), Flash Video (FLV), and MPEG 4 (MP4), and then throttling the response to the client. For any other file or MIME type, Bit Rate Throttling allows administrators to configure custom throttling rules.

Now, lets explain the same thing in a bit simpler way.

If you have a server which streams any kind of media files, Im sure you have noticed extremely high bandwidht usage on that machine. In my experience, over 40% of the bandwidth is wasted! WAIT! WHY, HOW?

Read More »

In the beginning, some c/p from IIS site:

IIS Application Warm-Up for IIS 7.5 enables IT Professionals to improve the responsiveness of their Web sites by loading the Web applications before the first request arrives. By proactively loading and initializing all the dependencies such as database connections, compilation of ASP.NET code, and loading of modules, IT Professionals can ensure their Web sites are responsive at all times even if their Web sites use a custom request pipeline or if the Application Pool is recycled.

Now, ME!

At first glimse you can say : “WOW” this extension rocks!!! I dont have to wait for my application to compile! My site will load much much faster!

And, imagine, you would be completely RIGHT! This is a great extension, but ( yeah, there’s a but ), I would NEVER install this extension on a shared hosting server! Why you ask?

Biggest reason is the WASTE of resources!

By preloading some site that has 5-10 unique visitors/day ( yes there are sites like that ), you are efectively wasting resources on the server. Imagine what would happen if you had around 500-600 applications on the server, all preloaded? How much RAM would the machine need to have to keep all those applications preloaded? I guess the answer is : A LOT!

So, conclusion, when to use IIS Application Warm-Up?

Use it on your own machine! When you have a dedicated machine just for 1-2 websites.  You, and your users will benefit from preloaded applications. Everything will open more faster!

If you have a shared hosting machine, MY reccomendation is to NOT use the IIS Application Warm-Up extension!

Well…in the very beginning, my answer is pretty much simple : yes AND no!  Why you ask?  Just keep reading…

Compression, regardless if its the compression of static or dynamic content is using CPU – that is a fact we can all agree upon.

Lets say compression is a tradeoff – CPU for bandwidth..use more cpu to “burn” less bandwidth.

The big question here is how to decide if you will benefit from turning on compression or not.

Most of us have “multi-purpose” servers which run various roles at the same time ( database server ( MYSQL , MSSQL, etc…) , mail server, web server, etc.. and all of those services are spending a certain amount of CPU time.

By turning on the compression, you will automatically “lose” some CPU time which could have been used for faster execution of some database queries i.e… Read More »

Since cloud hosting has become very popular today :) I have decided to try creating windows cluster for plain old hosting service. Since we are already using WebSitePanel as our main control panel for windows server, the goal is to leave everything running the way it is now, but with the possiblity to add new servers to the server pool without affecting current customers and “fooling” WebSitePanel that it thinks its running on a single machine, so that it isnt aware of the cluster at all.

How did it all start?

Well, to be honest, I was very interested to migrate all of our customers from WebSitePanel to Enkompass when I saw that they are offering cluster based hosting. By going a bit deeper into the scheme of their solution I saw that its basically very simple;  ARR and a big hog of a storage server which even doesnt have to run on windows!!!

Ofcourse, I would LOVE to try Windows Storage Server and give Microsoft money for it, but…since I’m not an OEM manufacturer, I can only dream about it :(

Since I work at a hosting company which offers linux and windows hosting, we got to an idea to serve all clients from a cluster of storage servers, rather than having 2 separate clusters of storage servers, one for each hosting type ( Windows and Linux ) .

I have the entire thing “visualized” in my head…and some paper, so  I’m hoping that in month-two I will have a WORKING solution of my idea :)

Im already seeing some blade servers :) hihihihi…