运行多个32位JVM是否有限制?

时间:2013-05-22 09:06:25

标签: jvm out-of-memory 32-bit

我正在使用64G ram的远程服务器,我正在使用一个使用32位JVM的平台,而我要做的就是创建多个JVM(大约500个)。发生的事情是,在创建190左右后,我从java中获得OOM错误,该错误表示无法创建新的本机线程。每个JVM占用大约20M的RAM,因此20 * 190大约为4G。 那么所有JVM使用的内存是否有限制? BTW我在Linux中的进程限制大约是10000,而/ proc / sys / kernel / pid_max中的限制是65000,而且我也没有得到其他进程的资源缺乏。另一点,改变堆大小也无济于事。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您的问题与堆大小无关。它与您能够创建的线程数有关。

运行JVM时,您创建了许多线程(并且处于活动状态)。我可以算至少25个。例如,有Timer任务的线程,编译器线程,Finalizer线程,当然还有GC线程。

除了SerialGC之外,每个垃圾收集器都会创建一些与您拥有的核心数成比例的线程,因此它会对每个JVM的线程数产生巨大影响。

有些事要做:

  • 提高流程限额
  • 设置最大线程数(-XX:ConcGCThreads=N-XX:ParallelGCThreads=N
  • 执行一些线程转储以检查JVM中的线程数并为您的平台推导出正确的数字

更多JVM选项:http://jvm-options.tech.xebia.fr/

希望有所帮助!