Hi all, first time poster here.  I'm working on a CLI project called
CommandBox ( https://www.ortussolutions.com/products/commandbox ) which is
based on a JSR-223 implementation of the JVM language Lucee Server (
http://lucee.org/ ).  Lucee uses Apache Felix internally when it starts up
and on my Windows machines I'm seeing a significant slowdown in startup
time due to accessing my Windows network adapter in order to read the Mac
address as part of SecureRandom which is used to generate a UUID for each
Felix instance.

By significant slowdown, I'm talking about 1.5 seconds, which may go
unnoticed in a server startup, but is a week in CLI-startup years. :)  Java
libs that want to access my network adapter's Mac address are a common
nemesis of my startup times, mostly due to Windows sucking from what I can
tell.

This line here is where things start to go south:
https://github.com/apache/felix/blob/trunk/framework/src/main/java/org/apache/felix/framework/Felix.java#L675

And the stack traces usually look similar to this right here:

java.lang.Thread.State: RUNNABLE
  at java.net.NetworkInterface.getMacAddr0(Native Method)
  at java.net.NetworkInterface.getHardwareAddress(NetworkInterface.java:460)
  at 
sun.security.provider.SeedGenerator.addNetworkAdapterInfo(SeedGenerator.java:238)
  at sun.security.provider.SeedGenerator.access$000(SeedGenerator.java:80)
  at sun.security.provider.SeedGenerator$1.run(SeedGenerator.java:183)
  at sun.security.provider.SeedGenerator$1.run(SeedGenerator.java:168)
  at java.security.AccessController.doPrivileged(Native Method)
  at 
sun.security.provider.SeedGenerator.getSystemEntropy(SeedGenerator.java:168)
  at 
sun.security.provider.SecureRandom$SeederHolder.<clinit>(SecureRandom.java:201)
  at sun.security.provider.SecureRandom.engineNextBytes(SecureRandom.java:221)
  - locked <0x00000007415f5f40> (a sun.security.provider.SecureRandom)
  at java.security.SecureRandom.nextBytes(SecureRandom.java:468)
  at org.apache.felix.framework.util.Util.randomUUID(Util.java:795)
  at org.apache.felix.framework.Felix.init(Felix.java:675)
  at org.apache.felix.framework.Felix.init(Felix.java:626)
  at org.apache.felix.framework.Felix.start(Felix.java:964)
  ... unrelated bootstrapping code...

Based on the comments and a quick review of the code, I'm guessing the
generation of a UUID of some sort is unavoidable.  What are the
chances of switching to some other, much faster library for UUID
generation that doesn't need to drop down the rabbit hole of asking my
Windows networking stack for a Mac address?  This will make a huge
difference in my CLI startup times for sure.

Perhaps a library like this could be used:

https://github.com/jchambers/fast-uuid

Thanks!

~Brad

*Developer Advocate*
*Ortus Solutions, Corp *

E-mail: b...@coldbox.org
ColdBox Platform: http://www.coldbox.org
Blog: http://www.codersrevolution.com

Reply via email to