Je suis en train de construire une Javadoc pour un module avec 2.509 classes. Cela prend actuellement 7 minutes, soit 6 fichiers par seconde.
J'ai essayé
mvn -T 1C install
Cependant javadoc
n'utilise qu'une seule unité centrale. Existe-t-il un moyen d'en utiliser davantage et/ou de l'accélérer ?
J'utilise Mise à jour Oracle JDK 8 112 . Ma machine de développement a 16 cœurs et 128 Go de mémoire.
En lançant l'enregistreur de vol, je constate qu'il n'y a qu'un seul fil. main
Pour les personnes intéressées, j'ai utilisé les options suivantes :
<plugin>
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<additionalJOptions>
<additionalJOption>-J-XX:+UnlockCommercialFeatures</additionalJOption>
<additionalJOption>-J-XX:+FlightRecorder</additionalJOption>
<additionalJOption>-J-XX:StartFlightRecording=name=test,filename=/tmp/myrecording-50.jfr,dumponexit=true</additionalJOption>
<additionalJOption>-J-XX:FlightRecorderOptions=loglevel=debug</additionalJOption>
</additionalJOptions>
</configuration>
</plugin>
REMARQUE : une solution de contournement consiste à faire :
-Dmaven.javadoc.skip=true
0 votes
Profil du processus javadoc. Je suppose que c'est probablement lié aux entrées-sorties. Vous pourriez donc charger la source sur un ramdisk ou un ssd.
0 votes
@ElliottFrisch Une bonne idée, le disque est occupé à 3%, mais le CPU est presque exactement à 100% (un seul cpu). Je peux le profiler avec Flight Recorder cependant, je mettrai à jour.
0 votes
L'unité centrale peut être en attente d'IO et à 100%.
0 votes
Sur cette machine
3.7% us, 0.2 sy, 0.0 ni, 96.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st.
0 votes
Peut-être que doxygen est multithread et compatible avec la syntaxe javadoc ?
0 votes
Quel est le jdk utilisé ? Avez-vous mesuré le temps d'exécution de javadoc directement ?
0 votes
@pvg J'utilise OracleJDK 8 update 112. Je lance la javadoc à partir de maven mais je ne m'attends pas à ce que ce soit plus rapide sans elle. J'ai ajouté une capture d'écran du rapport de l'enregistreur de vol.
0 votes
Pouvez-vous obtenir l'invocation javadoc réelle ? Je viens de l'essayer sur les classes 2k dans le fichier
java
paquet. J'ai mis 35 secondes, il y a donc quelque chose qui cloche dans vos temps.2 votes
L'Oracle
javac
n'est pas multithread, mais le compilateur Eclipse l'est. Le compilateur Eclipse peut-il peut-être aussi générer de la javadoc ?0 votes
Fait
mvn -T 16 install
se comportent-ils différemment ?0 votes
@ElliottFrisch a essayé et la différence était d'une seconde (peut-être une variation aléatoire).
1 votes
Je pense que le
-T
contrôle le démarrage de mavenjavac
les processus du compilateur,javadoc
est un outil autonome. Il y a très peu de options documenté, par exemple-verbose
vous indiquera le temps passé sur chaque fichier.4 votes
Il se peut que vous déclenchiez un bogue JavaDoc. La plupart du temps est passé dans HashMap.put() et ClassMember.isEqual(), ce qui pourrait indiquer un mauvais algorithme de code de hachage qui conduit à un trop grand nombre de conflits.
1 votes
Ce n'est pas nécessairement lié, mais vous invoquez
javadoc
à traversmvn
Il peut donc être utile d'accélérer maven, c'est-à-dire..,export MAVEN_OPTS="-client -XX:+TieredCompilation -XX:TieredStopAtLevel=1 -Xverify:none"
(cf. ce blog ). Je n'ai pas beaucoup d'espoir à ce sujet, mais qui sait ?0 votes
Quelle version de maven utilisez-vous ? Avez-vous défini des MAVEN_OPTS ? Quelle version de maven-javadoc-plugin utilisez-vous ?
0 votes
@pringi Je n'ai pas défini d'OPTS, le processus est en cours depuis longtemps (minutes), je ne suis donc pas sûr que cela puisse aider. J'utilise la version 2.10.3 du plugin.
0 votes
Maven fonctionne en java, donc si vous définissez MAVEN_OPTS, cela aidera la JVM (ex : -Xms256m -Xmx512m). Quelle est la version de Maven que vous utilisez ?
1 votes
Voir ce lien si cela peut vous aider : issues.apache.org/jira/browse/LUCENE-5282
1 votes
Il est intéressant de savoir si l'on peut supposer que l'on invoque la méthode
mvn javadoc:javadoc
?0 votes
@Eugene correct.
1 votes
@PeterLawrey c'est très intéressant, j'ai essayé de lancer cette commande pour les sources de
JMH
- 3618 des classes, soit environ 12 secondes. Je fais tourner3.0.1
du plugin.0 votes
@Eugene Je vais essayer de mettre à jour le plugin. Je pense que le problème vient du nombre de relations entre les classes.
0 votes
@PeterLawrey pour mémoire, j'ai également essayé environ 5 autres projets que j'ai de
openjdk
et nos 10 internes - quelques modules, tous bien au-dessus de 2k classes... c'est très probablement les données elles-mêmes dans votre projet qui déclenchent un chemin bizarre. veuillez poster les résultats une fois que vous l'aurez fait.0 votes
@PeterLawrey est-il possible de générer des javadocs individuellement pour chaque sous-module/sous-package et d'assembler ensuite ces parties ?