java - OutOfMemoryError even though enough free memory -


i getting java.lang.outofmemoryerror errors, when still have enough free ram. memory dumps took between 200mb , 1gb, while server has 24gb of ram. set -xmx12288m -xms12288m.

also, when try log in server, get

-bash: fork: retry: resource temporarily unavailable -bash: fork: retry: resource temporarily unavailable -bash: fork: retry: resource temporarily unavailable -bash: fork: retry: resource temporarily unavailable -bash: fork: resource temporarily unavailable 

i narrowed down code snippet below:

import org.snmp4j.snmp; import org.snmp4j.transport.defaultudptransportmapping;      long n = 0;     while (true) {         defaultudptransportmapping transport = null;         try {             transport = new defaultudptransportmapping();             transport.listen();         } catch (ioexception e) {             // todo auto-generated catch block             e.printstacktrace(); //      } {             // (*) forgot //          transport.close();  // (*) forgot         }          n++;         double freememmb = runtime.getruntime().freememory() / 1024 / 1024;         system.out.println("created " + n                 + " defaultudptransportmappings. free mem (mb): "                 + freememmb);     } 

output (on developer machine, mvn exec:java):

created 2026 defaultudptransportmappings. free mem (mb): 299.0 created 2027 defaultudptransportmappings. free mem (mb): 299.0 [warning]  java.lang.reflect.invocationtargetexception     @ sun.reflect.nativemethodaccessorimpl.invoke0(native method)     @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:57)     @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43)     @ java.lang.reflect.method.invoke(method.java:606)     @ org.codehaus.mojo.exec.execjavamojo$1.run(execjavamojo.java:293)     @ java.lang.thread.run(thread.java:745) caused by: java.lang.outofmemoryerror: unable create new native thread     @ java.lang.thread.start0(native method)     @ java.lang.thread.start(thread.java:714)     @ org.snmp4j.util.defaultthreadfactory$workerthread.run(defaultthreadfactory.java:91)     @ org.snmp4j.transport.defaultudptransportmapping.listen(defaultudptransportmapping.java:168)     @ app.main(app.java:19)     ... 6 more 

i found errors because don't close defaultudptransportmapping. enabling finally { ... } block solves problem. i'm wondering limits (if not amount of free memory) reached. ulimits on server are:

core file size          (blocks, -c) 0 data seg size           (kbytes, -d) unlimited scheduling priority             (-e) 0 file size               (blocks, -f) unlimited pending signals                 (-i) 191968 max locked memory       (kbytes, -l) 64 max memory size         (kbytes, -m) unlimited open files                      (-n) 1024 pipe size            (512 bytes, -p) 8 posix message queues     (bytes, -q) 819200 real-time priority              (-r) 0 stack size              (kbytes, -s) 10240 cpu time               (seconds, -t) unlimited max user processes              (-u) 1024 virtual memory          (kbytes, -v) unlimited file locks                      (-x) unlimited 

on developer mac:

-t: cpu time (seconds)              unlimited -f: file size (blocks)              unlimited -d: data seg size (kbytes)          unlimited -s: stack size (kbytes)             8192 -c: core file size (blocks)         0 -v: address space (kbytes)          unlimited -l: locked-in-memory size (kbytes)  unlimited -u: processes                       709 -n: file descriptors                2560 

which limit did reach?

the java.lang.outofmemoryerror: unable create new native thread confusing message, since has not running out of heap memory. therefore heap size settings (xmx , xms) have no influence on case. exception thrown when new operating process cannot not created application, either because maximum number of processess/open file handles reached or there no memory left on system create new thread.

regarding ulimit settings, can either number of file descriptors, stack size or number of processes. stack size per thread number, number of threads times stack size amount of used memory.

usually, case, getting exception means application not closing threads , keeps hold of system processes. why closing trasnport fixed issue you.


Comments

Popular posts from this blog

java - Oracle EBS .ClassNotFoundException: oracle.apps.fnd.formsClient.FormsLauncher.class ERROR -

c# - how to use buttonedit in devexpress gridcontrol -

nvd3.js - angularjs-nvd3-directives setting color in legend as well as in chart elements -