升级CentOS6.6后Java新建线程抛出O…

来源:互联网 发布:钓鱼气压表软件下载 编辑:程序博客网 时间:2024/05/19 08:42
    原来Java服务运行在CentOS5.4上正常,最近部署到CentOS6.6服务器上。结果运行一段时间后,程序在执行新建线程操作的时候抛出异常:“java.lang.OutOfMemoryError:unable to create new nativethread”。这种情况一般是因为JVM内存不足,通过调整JVM内存参数就能搞定。但是我们的Java服务已经分配了很大的内存,当前实际使用并不多,用jstat查看各区情况也都是很空闲的。所以基本可以排除这个可能。
    我怀疑这是因为操作系统的限制导致的,通过对比/proc/进程ID/limits文件看出了一些线索:
升级CentOS6.6后Java新建线程抛出OutOfMemoryError异常的排查和解决

    对比发现maxprocesses这个数值相比CentOS5.4机器上的数值要明显的小。但是很奇怪的是,通过ulimit -Su 516035的方式进行设置没有效果。搜索来搜索去,最后搜索到这篇 《Modify 'Soft Limit' of'Maxprocesses'》 。原来是CentOS6上对进程有额外的限制配置文件。
    [root@~]# cat/etc/security/limits.d/90-nproc.conf 
# Default limit for number of user's processes toprevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.
*         soft   nproc    1024
root      soft    nproc    unlimited
    可以看到如果程序以root用户执行,则nproc的软限制是unlimited,其他用户则是1024。由于此设置不符合我们需要,我们将第一排的数值改掉即可。我也是改为“       soft   nproc    unlimited",这样就相当于没有软限制,只根据硬限制进行约束。
    


0 0