Tuesday, April 26, 2011

Performance optimizing Eclipse Helios 3.6.1 with M2Eclipse plugin

On a recently closed customer project we faced poor performance in an Eclipse Helios 3.6.1 setup with Maven 2 integration. Here is described what we did to solve our problems. Hope some one can use it as inspiration.
Besides other plugins we used M2Eclipse for integration between Eclipse and Maven.

Before diving into the solution I must admit that performance problems could have been solved by removing PointSec (harddisk encryption), McAffe Virus Scan and buying SSD harddisks, but because of corporate standards and politics we never managed to carry out any of these.

The Eclipse Tuning was performed in the eclipse.ini file and the Eclipse workspace setup. First the workspace setup:

Maven configuration 
  • Navigate Window -> Preferences -> Maven
  • Remove checkmark for Offline
  • Remove checkmark for Debug Output
  • Remove checkmark for Download repository index updates at startup
  • Add checkmark in Hide folders or physically nested modules (experimental)

Performance related settings

A huge project like websystemet results in really bad response times in Eclipse, if default workspace settings are used. The following changes to the workspace settings increase the Eclipse performance and responsiveness.
  • Remove automatic build
    • Navigate: Windows -> Preferences -> General -> Workspace
    • Remove checkmark in Build automatically
  • Limit local file history
    • Navigate: Windows -> Preferences -> General -> Workspace -> Local History
    • Set Maximum Entries per file to 20
  • Disable Usage Data Collector
    • Navigate: Windows -> Preferences -> Usage Data Collector
    • Remove checkmark in Enable capture
  • Disable Validations
    • Navigate: Windows -> Preferences -> Validation
    • Remove checkmark Allow projects to override these preference settings
    • Add checkmark Suspend all validators
  • Disable automatic Task synchronization
    • Navigate: Windows -> Preferences -> Tasks
    • Remove checkmark Synchronize with repository every …
  • Remove plugins from Startup and Shutdown processes
    • Navigate: Windows -> Preferences -> General -> Startup and Shutdown
    • Uncheck Usage Data Gathering Plugin
    • Uncheck Usage Data Recording Plugin
    • Uncheck JBoss Tools Usage Reporting Plugin


eclipse.ini


Replace: 
-Dosgi.requiredJavaVersion=1.5
-Xms40m
-Xmx512m
-XX:MaxGCPauseMillis=10 


With: 

-Dosgi.requiredJavaVersion=1.6
-Declipse.p2.unsignedPolicy=allow
-Xms256m
-Xmx384m
-XX:PermSize=128m
-XX:MaxPermSize=384m
-XX:CompileThreshold=5
-XX:MaxGCPauseMillis=10
-XX:MaxHeapFreeRatio=70
-XX:+UnlockExperimentalVMOptions
-XX:+UseG1GC
-XX:+UseFastAccessorMethods




Some of the places I've found inspiration: