在ec2机器上的java.lang.OutOfMemoryError

我有一个大的实例,将产生多达800个线程的Java应用程序。 我可以以“root”用户身份运行应用程序,但不能像我创build的另一个用户那样运行应用程序。 我得到致命的。

java.lang.OutOfMemoryError: unable to create new native thread at java.lang.Thread.start0(Native Method) at java.lang.Thread.start(Thread.java:657) at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:943) at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1325) 

恶梦。 我试图增加已经在limits.conf中的堆栈大小无济于事。 请帮我一下 根和其他用户在这里有什么不同?

出于某种原因,设置最大进程数似乎解决了这个问题,尽pipe我确定只有一个进程运行了很multithreading。 发布我的最终configuration。

 $ ulimit -u 81920 $ 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) 59377 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 100000 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) unlimited cpu time (seconds, -t) unlimited max user processes (-u) 81920 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited