[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