View Single Post
  #1 (permalink)  
Old May 22nd, 2006, 19:53
chrisplough's Avatar
chrisplough chrisplough is offline
Site Moderator
 
Join Date: Jun 2006
Location: West Chester, PA
Posts: 849
Blog Entries: 7
Thanks: 53
Thanked 205 Times in 124 Posts
Groans: 0
Groaned at 0 Times in 0 Posts
Rep Power: 10
chrisplough has a spectacular aura aboutchrisplough has a spectacular aura aboutchrisplough has a spectacular aura about
Send a message via AIM to chrisplough
Optimizing GC3 v5.0 Performance - Part 1

During the GC3 v5.0 release, there was strong continued development - for additional features, as well as performance optimization. As a result, multiple installers were released between GA (General Availability - the initial release) and now. The downside to this tactic is that some of the early GC3 v5.0 installations are not optimized for the best performance.

In this post, I'll cover how to update your GC3 v5.0 on Linux installation for improved performance and scalability.

IMPORTANT NOTE: The use-cases of GC3 are so widely varied that no one configuration will work for all GC3 instances. It is crucial that you make any applicable changes only to your test/pre-production environments and only promote them to production after they have proven beneficial and stable in your environment. Also, ALWAYS MAKE A BACKUP prior to making any configuration changes or applying any patches. Trust me

First, check the version of JRockit (the Java JVM used on Linux) that you have installed with GC3 using the following commands:

Code:
cd <gc3_install_dir>/jdk/bin/
./java -version
It should spit out a line containing either "1.4.2_04" or "1.4.2_05". "1.4.2_05" is a newer version of JRockit that introduced several performance and, more importantly, stability fixes. If it says "1.4.2_05", then you're installation used one of the later installers an you may already be optimized - you can reference the steps below to to verify your configuration. If it says "1.4.2_04", then you'll need to contact Oracle support and ask for the patch for the 1.4.2_05 JDK on Linux. This is distributed in quick-patch form, so installation is dead easy.

Once you have the patch, copy it to /tmp, shutdown GC3 and then do the following. I've used the name gc3v50-jdk1.4.2_05-linux.zip for the quickpatch name - this should be correct unless Oracle has recently changed it. Note: You'll need to run the following steps on all of you web and app servers to ensure that they are all running the same JDK version.

Code:
cd <gc3_home_dir>
mv jdk jdk.old     #Make a backup of the existing JDK directory
cd /tmp
unzip gc3v50-jdk1.4.2_05-linux.zip
cd gc3v50-jdk1.4.2_05-linux/
cp -r * <gc3_home_dir>     #This will copy the patch into your GC3 directory
cd <gc3_home_dir>/jdk/bin/
./java -version     #Ensure the version says "1.4.2_05" - if so, it is installed correctly.
Once that is complete, startup GC3 and run through your normal screens, just to ensure that it works. I wouldn't expect any problems here, though it is always good to test - just in case. Once you're done, we can how update the configuration files to better optimize the Java processes.

On your GC3 Web server(s), edit the <gc3_home_dir>/tomcat/bin/tomcat.conf file and find the following line:
Code:
wrapper.java.additional.3=-Xmx1025m   #Your memory value may differ from this one, the -Xmx is the important part.
Then add the following lines after it:
Code:
wrapper.java.additional.4=-Xgcprio:throughput
wrapper.java.additional.5=-Xverbose:memory
If you see either of the following lines, you can remove them:
Code:
wrapper.java.additional.4=-Xgcpolicy:optavgpause
wrapper.java.additional.4=-Xgcpolicy:parallel
Note: the lines in this section must run in numerical order (i.e. wrapper.java.additional.1=..., wrapper.java.additional.2=..., etc) - so you'll have to renumber the remaining lines in the section after inserting these two.

On your GC3 App server(s), edit the <gc3_home_dir>/weblogic/config/gc3domain/weblogic.conf file and find the following line:
Code:
wrapper.java.additional.3=-Xmx1025m   #Your memory value may differ from this one, the -Xmx is the important part.
Then add the following lines after it:
Code:
wrapper.java.additional.4=-Xgcprio:throughput
wrapper.java.additional.5=-Xverbose:memory
If you see either of the following lines, you can remove them:
Code:
wrapper.java.additional.4=-Xgcpolicy:optavgpause
wrapper.java.additional.4=-Xgcpolicy:parallel
Note: the lines in this section must run in numerical order (i.e. wrapper.java.additional.1=..., wrapper.java.additional.2=..., etc) - so you'll have to renumber the remaining lines in the section after inserting these two.

Another crucial aspect of performance is the amount of memory to allocate to the JVM. This is a fairly involved topic, so I'll write more about it later. One quick note, though - one of the reasons that JRockit is so fast is that it uses a lot of memory outside of the allocated heap size for optimization. As such, if you allocate a 1.5GB heap for JRockit, it can use as much as 2.5GB of memory. Keep this in mind when setting your initial memory sizes.

In fact, many of these same pricipals and configurations apply to GC3 v4.5 on Linux. If you're interested, let me know and i'll post instructions on how to make the same changes to GC3 v4.5.

In later parts of this series, I'll cover additional topics on optimizing your GC3 instance's performance - including JVM memory allocation, operating system tuning, GC3 thread tuning, etc. Stay tuned!
__________________
Chris Plough
MavenWire

www.MavenWire.com
Reply With Quote