From customer reports, the answer depends on the number of processors on the machine.
It appears that IIS 6 will limit the amount of RAM for each application pool (IIS 6 or higher only) to 256 MB per CPU.
This can be tested at SE ISAPI startup time, by setting the Min Heap (not the Max Heap)
to various values and seeing how high you can go before IIS will no longer startup fresh. Setting the Min. heap allows you see the effect
right away (at JVM startup time) since the JVM will try to grab all that memory right then.
This can be better than using Max heap only and then having to wait for the heap to grow large enough to show you the effect. Note that with IIS 6, you can't simply cycle IIS, you must then send a request to IIS so that IIS will then crank up SE ISAPI (which will then crank up the JVM which will then try to grab RAM for it's min. heap).
One customer did this (set the Min heap to various values) and reported the following:
We use Win 2003 (IIS 6) and JVM 1.4.2_08 on all the machines.
The highest value for Min Heap that we have been able to set on the 2 CPU macines is 512MB.
We tried 768MB but that failed (IIS won't startup and we get "Service Unavailable" in the browser).
We tried to increase the memory on a 4 CPU machine to 1.5GB, but found that 1GB was the highest we could go there.
So... 512MB on a 2 cpu box, and 1GB on a 4 cpu box... yes we agree, this appears to be an IIS limitation that's related to the number of cpu's.
Here is ONE way to set the Min (and Max) heap size for SE ISAPI (using 1GB ==> 1000M as an EXAMPLE):
- Go to the VM Options admin page and enter -Xms1000M in the text area beneath the one that contains -Xmixed
(that is for MIN heap)
- Submit that and then verify that the admin page now shows the additional entry you just put there.
(maybe even go view vmoptions.properties to verify that the -Xms1000M was written there.
- now repeat it for -Xmx1000M (if you want to also set Max heap... probably uneccessary)
- Now cycle the service named "IIS Admin Service"
- Now try to request something from IIS (using your browser) does it get served? Or do you get "Service Unavailable" ?
NOTE: If you configure your MinHeap to a value that IIS cannot allocate, then you'll likely receive "Service Unavailable" responses when trying to access the SE Admin UI pages (or any servlet or JSP). If this happens to you then please read SE FAQ #367
It is our belief that if a person were to set their Max heap too high for the given number of CPU's,
it would be like a time bomb... as soon as the heap tried to grow beyond the IIS 6 limitation it would be prevented
from doing so. At that point, the JVM would effectively be OutOfMemory. The result then would be INDETERMINATE.
That means that the JVM might be able to recover, might be able to report OutOfMemoryError, or might not be able to do either.
Such an error is considered to be very nasty, and could result in the JVM crashing hard with no errors.
When the JVM is running inside the IIS process (as is the case with SE ISAPI) then such a crash could potentially
cause IIS itself to crash, giving ugly Dr. Watson errors, or Windows Events.
You could check ServletExecNative.log and/or ServletExec.log for clues in such a case. But those files may or may not contain clues.
SE FAQ #5 is an example of a similar case.
Similar in the sense that it's an IIS (not just IIS 6) limitation that is effected by the number of CPUs on the machine.
For that case, there is actually a Windows registry entry that can be used to configure IIS differently, to get past that
particular limitation. We don't know if there is a similar fix for the 256MB per CPU limitation of IIS 6 app pools (maybe the app pool can be configured differently). If you need to know, you might consider asking microsoft about it. Or you might consider using SE AS instead of SE ISAPI to sidestep the entire issue.
And here is yet another example (not CPU related) of how IIS sometimes needs a registry entry value in order
to behave as one might prefer.
Please see SE FAQ #318 and/or SE FAQ #320 for more information.