[jboss-dev] Further profling: Where should I focus?

John Bailey jbailey at redhat.com
Tue Jan 5 15:05:34 EST 2010


I have been running the tests through JProfiler.  Not sure if I just have not optimized the profilers settings, but I am getting numbers all over the board, and some are well over double the time of a JUnit execution.  The non-profiler time to run the test seems to be <300ms.

With the profiler enable, I can see ~30% of the total time is in the VFS.mountZip call.  With >10% of the total test time taken up by the 5,085 calls to org.jboss.vfs.util.PathTokenizer.getTokens.  

The org.jboss.classloading.plugins.vfs.PackageVisitor.determineAllPackages call is taking ~35% of the total test time to run.  With ~14% of the total test time in VirutalFile.isDirectory. 

Maybe there is room for more caching of this isDirectory like calls.  There may be a problem with caching the info as the actual file system can change for a given VirutalFile, and the cached information is not guaranteed to remain accurate.  

John


On Jan 5, 2010, at 1:42 PM, Bill Burke wrote:

> 
> 
> David M. Lloyd wrote:
>> On 01/05/2010 12:27 PM, Bill Burke wrote:
>>> 
>>> David M. Lloyd wrote:
>>>> Anyway this has all been covered, benchmarked, and fixed by VFS3.
>>>> 
>>> Well....not really.
>>> 
>>> 446ms now for the PackageTest.
>>> 
>>> 65% is still VFS initialization.
>> Using VFS3?  If so, can you post details?
> 
> Gonna help John Bailey get up to running JProfiler.  That cool?
> 
> Preliminary, it looks like a lot of things aren't getting cached (isDirectory, lastModified, isFile, children, etc..).  This results in a lot of hash lookups.  Looks like they aren't getting cached because of mounting?? Not sure.
> 
> But, I found a problem with my initialization code (see below).  It was trying to mount children.  I commented out that part and it ran in 251ms.  40% in VFS init if profile CPU time, 60% in actual time. Sometimes jprofiler is weird.
> 
> 
> 
>   public List<Closeable> recursiveMount(VirtualFile file) throws IOException
>   {
>      ArrayList<Closeable> mounts = new ArrayList<Closeable>();
> 
>      if (!file.isDirectory() && file.getName().matches("^.*\\.([EeWwJj][Aa][Rr]|[Zz][Ii][Pp])$"))
>         mounts.add(VFS.mountZip(file, file, provider));
> 
>      /****** Doubled speedup when this was commented out!!!!!!!!!!!!
>      if (file.isDirectory())
>         for (VirtualFile child : file.getChildren())
>            mounts.addAll(recursiveMount(child));
>            */
> 
> 
>      return mounts;
>   }
> 
>   private TempFileProvider provider;
> 
>   protected void setUp() throws Exception
>   {
>      super.setUp();
> 
>      provider = TempFileProvider.create("test", new ScheduledThreadPoolExecutor(2));
>   }
> 
>   protected void tearDown() throws Exception
>   {
>      provider.close();
>   }
> 
> 
> 
> 
> 
> 
> Bill
> 
> -- 
> Bill Burke
> JBoss, a division of Red Hat
> http://bill.burkecentral.com

--
  John Bailey
  JBoss by Red Hat
--








More information about the jboss-development mailing list