Thanks Juan and Scott for the thoughtful replies - I appreciate it!
For the moment we are moving forward with using only a single App Pool for
each web server. While this does not offer the isolation of using a
dedicated App Pool for each customer, it saves at least 26 MB of RAM for
each installation of our product. I arrived at the 26 MB savings from doing
a simple test where I created a new virtual directory and App Pool and then
placed only the simplest .aspx file in it (just a Response.Write("hello"))
and then you can see that pointing a browser at it eats up 26 MB
immediately. Interestingly, if you only place static HTML files in that
directory, it only eats up 6 MB. So 6 MB is for the App Pool itself, and 20
MB is for an instance of ASP.NET it would seem.
Anyway, this is doing much better because we are able to host 20 to 25
customers in this configuration and use about 1.3 GB of RAM on each web
server in the web farm. So my next thought was that we could increase the
RAM in the web servers from 2 GB to 4 GB and perhaps get this solution up to
60 or 70 customers. But alas, we are using Windows Server 2003 Web Edition
which has a limit of 2 GB. I had never realized this limitation before. I
think it is quite lame that the web edition cannot really scale out due to
the fact that ASP.NET requires so much RAM. Think about it - if ASP.NET
requires up to or more than 2 GB of RAM on a web server in order to host a
lot of traffic on a given application such as ours, this means that using a
web farm strategy and scaling out is not really possible with Web Edition.
You have to be able to scale up a bit more than 2 GB in order to scale out
effectively. In speaking with the ASP.NET support worker at Microsoft, I
asked him to pass along my suggestion that the Web Edition be renamed to the
"Personal Web Edition" because it is really quite a toy if it can't make use
of more than 2 GB of RAM, particularly when you consider the fact that the
Microsoft web development technology of choice (ASP.NET) is RAM hungry.
I still don't have an answer to question number 1 that I asked originally.
This becomes even more important now that we are facing this dreaded 2 GB
limit on memory. I think we will probably reformat these web servers and
use Standard Edition so that we can increase them to 4 GB of RAM each, which
is fairly inexpensive. It would be less expensive if we hadn't purchased
that stupid Web Edition first, however... So now, is there anyone out there
that can answer the question? If we continue to install more and more
instances of our application and the RAM usage goes up to and over the 2 GB
mark, will the CLR release some memory that it does not really need? If so,
will that mean tremendous performance hits? I realize that noone can answer
this question scientifically without knowing about our application, but any
general insights or experience is certainly welcome.
FYI, I have not gotten any response from the microsoft.public.inetserver.iis
newsgroup.
Thanks in advance!
> Hey AN:
>
[quoted text clipped - 57 lines]
>>
>>Thanks in advance, AN
Scott Allen - 21 Jul 2005 20:40 GMT
Hi AN:
>But alas, we are using Windows Server 2003 Web Edition
>which has a limit of 2 GB. I had never realized this limitation before. I
>think it is quite lame that the web edition cannot really scale out due to
>the fact that ASP.NET requires so much RAM.
Win2003 WE was never intended for heavy duty hosting like yours, thus
the low pricing and RAM limitation. Still, I can appreciate your
frustration.
>I still don't have an answer to question number 1 that I asked originally.
>This becomes even more important now that we are facing this dreaded 2 GB
[quoted text clipped - 8 lines]
>this question scientifically without knowing about our application, but any
>general insights or experience is certainly welcome.
I'd use CLRProfiler again and drill into the GEN 2 area of the heap.
These are objects that, for one reason or another, are surviving
garbage collections and sticking around a long time. Perhaps they
don't need to.
In general both the CLR and OS will reclaim memory unused memory, but
also (speaking generally), server applications are reluctant to give
up 'unused space' because it is likely they will need the space in the
future.
--
Scott
http://www.OdeToCode.com/blogs/scott/