Copy link to clipboard
Copied
We are running CF10 on 64-bit Windows 2008 R2 (VMware) with IIS 7.5 and 8Gb of RAM. A pretty typical setup I would say. I am running a medium sized site and several smaller sites and an intranet, nothing too crazy. I have been doing some research this morning to make sure our setup is optimized, and I have a few questions.
JVM heap is set to 2048 (min) and 4096 (max) with MaxPermSize=356m.
Full JVM argument list looks like this if it matters:
-server -XX:MaxPermSize=356m -XX:+UseParallelGC -Xbatch -Dcoldfusion.home={application.home} -Dcoldfusion.rootDir={application.home} -Dcoldfusion.libPath={application.home}/lib -Dorg.apache.coyote.USE_CUSTOM_STATUS_MSG_IN_HEADER=true -Dcoldfusion.jsafe.defaultalgo=FIPS186Random
I have read in multiple places that the min/max heap size should be EQUAL, and I have read that I should define a "PermSize" in addition to the "MaxPermSize".
Can anyone confirm what is the best average ratio to use for all these settings given the system specs I provided?
Also, it is normal to see garage collection taking place every 2-3 minutes? When I look at the memory graph via Server Monitor it is full of up/down spikes even though it is only using about 600-800Mb of the 2-4Gb RAM I've assigned it. Is that normal?
We are not experiencing any regular problems but I want to make sure our system is optimzed just in case we have spikes in traffic or run our own internal processes that can be quite heavy sometimes. Ocassionaly we do slow down when being scanned by our internal security systems. Watching the healthcare.gov debacle unfold makes me want to make sure everything is perfect in my little world at least.
Finally, I have another question out there I hope someone can help with that has to do with an improperly functioning Server Monitor:
http://forums.adobe.com/message/5797874
Thanks in advance.
Copy link to clipboard
Copied
Hi, I can shed some light on some of your questions.
1) "I have read that max/min heap size should be EQUAL"
If you set your min heap size smaller than the max then it grows dynamically as needed, this growth at runtime can add some minor overhead while it is growing, which is why people recommend they are set equal. When they are set equal the heap doesn't have to worry about its size it just stays one size and allocates all the RAM upfront it will use in its lifetime.
2) "I have read that I should define a PermSize and MaxPermSize"
The perm size controls the permanent generation, this is where the jvm stores meta data about java classes, so once all your CFM templates have executed all possible logic branches at least once you would not expect the perm size to change after that (unless you are generating cfm files dynamically). Generally the perm size does not make any performance difference, but you can run out of perm gen space if you set it too low, then you will get exceptions thrown. Just run your server for a few days and then check the size and make sure it is high enough, it shouldn't grow much higher than the value you see after your apps have run for a while (ofcourse if you are adding lots of new cfm/cfc files it will increase). I have some more info about that here: http://www.petefreitag.com/item/821.cfm
Copy link to clipboard
Copied
Thanks, Pete. Below is a screen shot showing your code results at the bottom, with cfdump output above it from another old script I found. This is on our live, production machine, which has been up for weeks with pretty much everything "loaded" that I can think of. Is there anything here that jumps out at you, given the other settings I specified in the original post?
Edit: I see now that the original CFDUMP script I was using contains the same info as yours.
Copy link to clipboard
Copied
Not to be missed in Java discussion is the possible impacts on performance on CF when full garbage collections are performed. A Java full garbage collection is a stop all process for the duration.
You have configured the Java with UseParallelGC which can be suitable in some usage or load tho impacts on performance in other situations.
To know how well the Java and garbage collection is working you would want to perform some logging or monitoring. Given you become aware of how that is working you can change settings then log again to know change was beneficial or not.
Logging can be performed via creating a Java log file and reading that or passing it thru a tool eg gcviewer to get a summary and graphical output.
Monitoring can be performed via adding JMX arguments to Java and using JDK tools like jconsole, jvisualvm or the new Java 7 mission control.
In CF10 how well the tomcat connector is working can also realise performance gains.
I did a couple of talks on Java matters and tomcat usage. Reply to thread if any of that interests you, then I will respond with a link to those.
HTH, Carl.
Copy link to clipboard
Copied
Thanks for all the replies. Between this forum and the ColdFusion Facebook Group I have decided to make the min/max heap the same size, and about 1/2 that of the total available RAM on my system. I did not make any changes to my permsizes. I will continue to monitor, and research. I am also going to try some load testing/benchmarking for the first time to see what my limits really are. Thanks again. I will report back if I find anything interesting or relevant to this thread.