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