I am on Windows 10 Home PC (SSD) and I remembered that 2 years ago project build time was around 30 sec with --parallel
.
I noticed that today everything-update build takes 3.5 min (without --parallel
)!
Development cycle edit-build-test becomes cumbersome.
I dig into issues and most helpful was Temporary folder (/tmp) filled up with gradle_uploadXXXSHA1 files
So I disabled 8.3 file name support (elevated shell required, search for “cmd” in Start menu and hit Ctrl+Shift+Enter to get one):
fsutil.exe behavior query disable8dot3
fsutil.exe behavior set disable8dot3 1
This improved build time by 7%. I already had disable access time on NTFS:
fsutil.exe behavior query disable8dot3
you can disable via one of:
fsutil.exe behavior set disableLastAccess 1
fsutil.exe behavior set disableLastAccess 3
Next BIG thing is Windows Defender. Old tips to use procmon with MsMpEng.exe
process name shown nothing. But MsMpEng.exe
constantly takes 5-7% CPU and 300-500 KB/s IO during build.
The most important thing to consider is how Antivirus works. It injected itself into process address space and listen to OS events and inject itself into driver filters. So antivirus is invisible from Procmon!!
I collected paths that contains gradle
from procmon and added base directories as exclude directories:
c:/home/devel (my project base dir)
c:/home/.gradle (my GRADLE_HOME)
https://support.microsoft.com/en-us/help/4028485/windows-10-add-an-exclusion-to-windows-security
One note. Gradle intensively uses TMP
directory. I don’t want to exclude this directory from protection. So I added:
GRADLE_OPTS="$GRADLE_OPTS -Djava.io.tmpdir=c:/tmp"
This dropped build time 6 times (from more than 3 min to 30 sec).
I still saw 150KB/s IO. Remember that Antivirus injects itself into process! In my case it is java.exe
which is also added for exclusion to Defender. This gives 0.1-0.2% CPU load and zero IO in Defender process!!!
Final result:
gradle --stop
gradle testCompile # cold start
BUILD SUCCESSFUL in 1m 58s
gradle testCompile # hot start, everything is UPDATED (before investigation was 3m 47s)
BUILD SUCCESSFUL in 28s
Next thing is to fight lots of deferred dependency resolutions that block actual fast re-compilation and resource processing.