Problème Java heap space

Bonjour, j'essaie de faire tourner SnpEff, mais j'obtiens cette erreur

module load snpeff

sbatch -J Annot_BG -o logs/Anno_BG.out -e logs/Annot_BG.err --mem=8G \
--wrap="snpEff eff -c snpeff.config -dataDir . FelCatus -s snpeff_res.html \
intersect/BoGoss.vcf > intersect/BoGoss.annot.vcf"

J'obtiens cette erreur

Error: Error while processing VCF entry (line 8423559) :
	E2	571240	.	G	A	1095.64	PASS	AC=1;AF=0.5;AN=2;BaseQRankSum=-0.784;DP=46;ExcessHet=3.0103;FS=1.292;MLEAC=1;MLEAF=0.5;MQ=60;MQRankSum=0;QD=24.35;ReadPosRankSum=-0.113;SOR=0.863	GT:AD:DP:GQ:PL	0/1:13,32:45:99:1103,0,395
java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError: Java heap space
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

Merci

Bonjour Chloé,

C'est une erreur assez courante avec Java.
Il faut augmenter les valeurs par défaut le mémoire utilisé par la machine virtuelle Java (JVM).
Plus d'info ici par exemple: java - What are the -Xms and -Xmx parameters when starting JVM? - Stack Overflow

Par défaut, la "JVM" pour snpEff est lancé avec les options -Xms512m et -Xmx1g

Je vous propose d'essayer à nouveau avec l'option -Xmx8g.
Ce qui donnerait:

module load snpeff

sbatch -J Annot_BG -o logs/Anno_BG.out -e logs/Annot_BG.err --mem=8G \
--wrap="snpEff -Xmx8g eff -c snpeff.config -dataDir . FelCatus \
-s snpeff_res.html intersect/BoGoss.vcf > intersect/BoGoss.annot.vcf"

Pour info, snpEff est lancé habituellement via java -jar snpEff.jar.
Pour modifier le paramètre mémoire de java, on lancerait alors java -Xmx8g -jar snpEff.jar.
Un wrapper existe sur le cluster (installé par conda) permettant d'utilsier la commande snpEff directement.
Ce wrapper convertit alors la commande snpEff en java -jar snpEff.jar.
La commande permmet aussi d'ajouter les options de mémoire java. Il suffit alors de spécifier snpEff -Xmx8g.

1 « J'aime »

Merci, ça fonctionne !

J'ai une nouvelle erreur Java pour une autre commande

module load snpsift/4.3.1t

sbatch -J sift2_BoGoss -o logs/sift2_BoGoss.out -e logs/sift2_BoGoss.err --mem=8G --wrap=" \
cat intersect/BoGoss.annot.coding.nosyn.vcf | SnpSift filter -Xmx8G \
\"ANN[*].EFFECT = 'missense_variant' & isHet( GEN[2] ) & isVariant( GEN[2] ) \
& isRef( GEN[0] ) & isRef( GEN[1] ) \" \
> variants_interet/BoGoss.annot.coding.nosyn.filtered.vcf"

Qui me donne

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 2 out of bounds for length 1
	at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
	at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
	at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248)
	at java.base/java.util.Objects.checkIndex(Objects.java:372)
	at java.base/java.util.ArrayList.get(ArrayList.java:459)
	at org.snpeff.vcf.VcfEntry.getVcfGenotype(VcfEntry.java:768)
	at org.snpsift.lang.function.FunctionBoolGenotype.evalGenotype(FunctionBoolGenotype.java:30)
	at org.snpsift.lang.function.IsHet.eval(IsHet.java:21)
	at org.snpsift.lang.expression.And.eval(And.java:26)
	at org.snpsift.lang.expression.And.eval(And.java:19)
	at org.snpsift.lang.expression.And.eval(And.java:19)
	at org.snpsift.lang.expression.And.eval(And.java:19)
	at org.snpsift.SnpSiftCmdFilter.evaluate(SnpSiftCmdFilter.java:142)
	at org.snpsift.SnpSiftCmdFilter.annotate(SnpSiftCmdFilter.java:91)
	at org.snpsift.SnpSiftCmdFilter.run(SnpSiftCmdFilter.java:355)
	at org.snpsift.SnpSiftCmdFilter.run(SnpSiftCmdFilter.java:331)
	at org.snpsift.SnpSift.run(SnpSift.java:588)
	at org.snpsift.SnpSift.main(SnpSift.java:76)

L'erreur Index 2 out of bounds for length 1 semble pointer une erreur dans le tableau, l'index "2" n'existant pas (par exemple dans GEN[2]) ?