我在Java中遇到JVM无法分配内存的问题
OpenJDK 64位服务器VM警告:info:OS::Commit_Memory(0x0000000734880000,880279552,0)失败;error=“无法分配内存”(errno=12)
内存不足,Java运行时环境无法继续。本机内存分配(mmap)无法映射880279552字节以提交保留内存。包含更多信息的错误报告文件保存为:/home/ec2-user/tools/apache/apache-tomcat-9.0.6/bin/hs_err_pid23366.log java.lang.NullPointerException
这是我的记忆统计数据
MemTotal: 8166744 kB
MemFree: 3788780 kB
MemAvailable: 3861816 kB
Buffers: 0 kB
Cached: 286536 kB
SwapCached: 0 kB
Active: 4030520 kB
Inactive: 182596 kB
Active(anon): 3926808 kB
Inactive(anon): 24892 kB
Active(file): 103712 kB
Inactive(file): 157704 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 192 kB
Writeback: 0 kB
AnonPages: 3926652 kB
Mapped: 72652 kB
Shmem: 25120 kB
Slab: 100300 kB
SReclaimable: 60032 kB
SUnreclaim: 40268 kB
KernelStack: 5616 kB
PageTables: 21632 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 4083372 kB
Committed_AS: 5723980 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 0 kB
VmallocChunk: 0 kB
AnonHugePages: 0 kB
ShmemHugePages: 0 kB
ShmemPmdMapped: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 286720 kB
DirectMap2M: 8101888 kB
这看起来像是一个重复的JVM堆内存不足的问题。最接近这个问题的是this thread
然而,不同的是,在链接线程中,用户的可用空间更少,而JVM试图分配更高的内存(打开和关闭情况)。
export CATALINA_HOME="/home/ec2-user/tools/apache/apache-tomcat-9.0.6/"
export JAVA_OPTS="-Xms2048m -Xmx4096m -DJDBC_CONNECTION_STRING=jdbc:mysql://localhost:3306/databasename?autoReconnect=true -DJDBC_DATABASER=dbname-DJDBC_USER=username-DJDBC_PASSWORD=password-DAPPLICATION_PRO$
export JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201.b09-0.amzn2.x86_64"
PID PPID CMD %MEM %CPU
4890 1 /usr/lib/jvm/java-1.8.0-ope 38.1 1.0
23204 1 /usr/sbin/mysqld --daemoniz 7.1 0.9
26056 3484 node /home/ec2-user/tools/j 1.3 111
3548 3484 node /home/ec2-user/tools/j 1.1 0.3
3484 1 PM2 v3.5.0: God Daemon (/ro 0.7 0.6
26067 26056 /root/.nvm/versions/node/v1 0.3 7.5
26074 26067 /root/.nvm/versions/node/v1 0.3 7.5
3610 3548 /root/.nvm/versions/node/v1 0.3 0.0
3624 3610 /root/.nvm/versions/node/v1 0.3 0.0
@vlumi等人试图把我引向“没有直接内存可用”的正确方向。尽管如此,我还开始遇到“堆内存不足”“内存不足”的其他问题。
问题是:在tomcat服务器上重新部署WAR之后,现有的线程没有被杀死,它们的引用仍然存在,因此GC无法清理它。最初的metaspace(早期称为PermGen)有80MB,随着应用程序的启动,这个数字增加到了125。一旦重新部署,intead返回到80MB,VisualVM探查器上的metaspace显示为170MB,在下一次重新部署中显示为210。这清楚地表明,在再进行十几次重新部署(这是一个测试服务器)之后,JVM将耗尽用于分配的RAM空间,并抛出堆内存。
为了解决这个问题,我们在Jenkins作业中添加了一个tomcat7:shutdown(或通过shell脚本重新启动)。停止和启动tomcat可以像以前一样默认返回元aspaces。其他一些人试图杀死jawa进程,以便杀死所有线程。
对此有什么建议吗?
我一直在使用G1垃圾收集器经历Java VM崩溃。我们得到使用以下签名生成的hs_err_pid.log文件:
问题内容: 我刚从python移植了我的应用程序,所以Go有点新。看来我遇到了记忆问题。 它在ubuntu机器上运行。通过主管。 编辑: 设置解决问题 问题答案: 对于遇到此问题的其他人,这是golang问题中的相关近期问题 对于所有受影响的人,在Linux上得到适当修复之前的临时替代方法可以是以下之一: 启用无条件过量使用: 能够无条件过载:添加交换到你的主机,用它几乎永远不会被使用,但在计算参
问题内容: 我有一个Python脚本,它每60秒执行一次,作为后台进程运行。其中一部分是对subprocess.Popen的调用,以获取ps的输出。 运行几天后,该呼叫出现以下错误: 但是,服务器上free的输出为: 我到处寻找问题,发现这篇文章说: 解决方案是向服务器添加更多交换空间。当内核分叉启动建模器或发现过程时,它首先确保在交换存储中有足够的空间来存储新过程(如果需要)。 我注意到上面的免
我正在AWS(Ubunut)EC2实例上运行一个脚本。它是一款网页刮板,使用Selenium/ChromeDriver和无头chrome来刮一些网页。我以前运行这个脚本没有任何问题,但是今天我遇到了一个错误。下面是脚本: 当我从ubuntu运行这个脚本时,我得到这个错误: 我确认我正在运行相同版本的ChromeDriver/Chromium浏览器:
我的问题是,谁分配和管理这些内存段?操作系统不知道java程序正在运行,并认为它是JVM的一部分,作为计算机上的常规程序运行,JIT编译、java堆栈的使用,这些操作需要运行时内存分配,我不明白的是JVM如何将其内存划分为这些内存段。这肯定不是由操作系统来完成的,这些内存段(例如java堆栈)必须是连续的才能工作,所以如果JVM程序只是使用malloc命令来接收堆内存的最大大小并将这些内存划分为多
我有一个非常消耗内存的程序,想使用-Xmx2048m为java jvm分配更多的最大内存。但在启动时,我得到一个“无法为对象堆保留足够的空间”错误。 当尝试多个值并发现我的最大值是时,它就开始了。但我喜欢分配2GB。在使用-Xmx1560m启动java进程后,我有6GB的物理内存,Taskmanager显示3400MB可用。 有人知道我为什么不能分配2GB吗?
内存不足,Java运行时环境无法继续。 本机内存分配(mmap)无法映射1366294528字节以提交保留内存。包含更多信息的错误报告文件保存为://hs_err_pid5.log