meatspace memory OOME using Nashorn and Callable
Riccardo Maggi
maggi at venere.com
Tue Jan 26 10:58:22 UTC 2016
Hi,
We are testing Nashorn usage and we have a big issue on metaspace usage. We can’t figure out why metaspace show a sawtooth that correspond to a grow and a consequent GC when its limit is reached, suggesting a class loader leak is somewhere. The metaspace patter was 1:1 with number of classes like many compilation were needed.
The problem seems to be around a loop where we add callable tasks to a thread pool to be executed and how to pass parameters to the js function that represent the task logic.
We found a solution for the high number of compiled classes using a code like:
var tasks = arrayForTask.map(function(dataForTask, i) {
return new Callable({
call: function () {
print("task A " + i);
}
});
});
So now classes do now grow as before but the metaspace always grows…
I can’t find any source that clearly explain where the compiled js functions are stored (lambda form) into memory, I can understand that compilation is needed when nashorn think the js function body changed, like for references to different globals and so on.
So in the end should I always expect a metaspace grow controlled by the GC?? even if the code has no leak? that seems to be kind of reasonable cause the JIT compilation is needed for a dynamic language that has no defined “class” structure but I can’t understand if GC should be the only limit to my OOME or if a leak is somewhere…
Thanks,
Riccardo.
--
Riccardo Maggi
Manager, Software Development
Hotels.com – An Expedia Inc. Company
Venere Net S.r.l. con socio unico Via della Camilluccia 693, Roma, Italia Soggetta a direzione e coordinamento di Hotels.com LP Capitale 1.120.600 (i. v.) Sociale Codice Fiscale e P.IVA 05649781001 REA di Roma 910870
More information about the nashorn-dev
mailing list