我正在使用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,而且我也没有得到其他进程的资源缺乏。另一点,改变堆大小也无济于事。有什么想法吗?
答案 0 :(得分:1)
您的问题与堆大小无关。它与您能够创建的线程数有关。
运行JVM时,您创建了许多线程(并且处于活动状态)。我可以算至少25个。例如,有Timer任务的线程,编译器线程,Finalizer线程,当然还有GC线程。
除了SerialGC之外,每个垃圾收集器都会创建一些与您拥有的核心数成比例的线程,因此它会对每个JVM的线程数产生巨大影响。
有些事要做:
-XX:ConcGCThreads=N
,-XX:ParallelGCThreads=N
)更多JVM选项:http://jvm-options.tech.xebia.fr/
希望有所帮助!