Linux / JVM – OutOfMemoryError:无法创建新的本机线程
作者:互联网
我的Linux服务器(CentOS)存在内存问题.它是一个VM.以下是上下文.
它有70Gb的RAM.有2个tomcat在上面运行.
给一个tomcat一堆13Gb,另一个给一堆20Gb.
具有20Gb的那个具有JVM选项-Xss160k设置(试图解决我的问题).
这2个tomcat可以使用高达48Gb的RAM(virt.)
Linux将使用70Gb,并且将有大约35Gb的缓存内存.交换是1Gb,它几乎不使用它(8Mb).
现在的问题是我每隔一段时间就从tomcat中得到以下错误:
OutOfMemoryError: unable to create new native thread
如果我没有弄错的话,如果操作系统本身内存不足而无法创建新线程,就会发生这种情况.
现在的问题是:当它有35Gb的缓存内存时,这怎么可能?它不应该重新分配它并根据需要使用它.
是否可以设置一些内核选项来避免这种情况?例如,它可以使用高达65Gb,缓存30Gb并保持5Gb空闲.
解决方法:
这可能是使用ulimit设置限制的问题.作为运行tomcat的用户,做
ulimit -a
在输出中,查找最大用户进程行.
max user processes (-u) 1024
尝试提高该值,例如ulimit -u 4096,在启动tomcat之前.
标签:java,linux,memory,virtual-machine,virtual-memory 来源: https://codeday.me/bug/20190813/1646447.html