Java: Unable to create new native thread

One possibility is that you have reached your user limit for the number of open files.

I believe that every Process/Thread consumes one or more file descriptors.

For example, when this occurs for your user then “no” shell command will work, since shell commands fork off a process to execute (you see errors like “-bash: fork: retry: Resource temporarily unavailable”)

I hit this issue and found that only the current user was unable to spawn procs… other users were uneffected.

To resolve, up your ulimit -n (max files open) setting… details follow.

You can see your user limits with the command:

ulimit -a

Up your max file limit with the following:

ulimit -n 65536 

Here is what I have right now:

$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 256797
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 75000
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) 100000
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

To see all the explicit limits for your system:

cat /etc/security/limits.conf

Please note: I’m using Oracle Linux 6.3 – results may differ slightly between distros.

Leave a Comment