背景
经常遇到一些关于 linux 服务器相关的报错,也挺有意思,记录之
there is insufficient memory for the java runtime
问题发生:这是怎样发生的呢,在一个服务器上,把一个服务停掉了(服务本来是用 root 起的)。停掉后,因为不想用root做这样的操作,于是切换到了普通用户,再去起这个服务。
就报了这个错,乍一看,应该是内存不够,但看了一下物理内存,是妥妥的足够的,这就奇怪了。怎么回事呢?知识盲区。
然后网上查了一下,其实是查到了结果的。此暂时不说。
先说解决方案,
因为刚才服务还在运行中,所以,这个服务肯定是没问题的,资源也肯定是可以的,所以问题出现在哪里呢? 做了什么操作?——切换了一个账号!
是的,就是因为切换了一个账号,服务才起不来的,换回 root, 服务果然就能够起来了。所以,两个账号之前,什么区别?
再看回,那个报错,其实它有说到一个点:
报错文件内容:
查看代码
# There is insufficient memory for the Java Runtime Environment to continue.
# Cannot create GC thread. Out of system resources.
# Possible reasons:
# The system is out of physical RAM or swap space
# In 32 bit mode, the process size limit was hit
# Possible solutions:
# Reduce memory load on the system
# Increase physical memory or swap space
# Check if swap backing store is full
# Use 64 bit Java on a 64 bit OS
# Decrease Java heap size (-Xmx/-Xms)
# Decrease number of Java threads
# Decrease Java thread stack sizes (-Xss)
# Set larger code cache with -XX:ReservedCodeCacheSize=
# This output file may be truncated or incomplete.
#
# Out of Memory Error (gcTaskThread.cpp:46), pid=17285, tid=47629249568816
#
# JRE version: 6.0_43-b01
# Java VM: Java HotSpot(TM) 64-Bit Server VM (20.14-b01 mixed mode linux-amd64 compressed oops)
问题分析:
可能1:
物理资源不够(不是)
可能2:
系统进程数到达了上限,然后通过指令 ulimit -a 对比 普通用户 与 root 用户间的区别,果然发现了不同
普通用户的 ulimit -a 结果有一个值
max user processes 为 1024
但 root 用户的这个值是 127252 原因就在这里!
找到原因,就好解决了。但线上服务器,不敢轻易修改,就暂且用 root 起一下吧。害。
来源:https://www.cnblogs.com/aaacarrot/p/15956774.html
本站部分图文来源于网络,如有侵权请联系删除。