当前位置: 首页 > 知识库问答 >
问题:

高负载项目中的Java OOM

丌官高远
2023-03-14

以下是hs_err_filepart中的错误(已附加完整文件):

内存不足,Java运行时环境无法继续。本机内存分配(mmap)无法映射1633681408字节以提交保留内存。
可能的原因:
系统在32位模式下没有物理RAM或交换空间,进程大小限制已达到
可能的解决方案:
减少系统上的内存负载
增加物理内存或交换空间
检查交换后备存储区是否已满
在64位OS上使用64位Java
减少Java堆大小(-xmx/-xms)
减少Java线程数
减少Java线程堆栈大小(-xss)
使用-xx设置更大的代码缓存:ReservedCodeCacheSize=此输出文件可能被截断或不完整。

内存不足错误(os_linux.cpp:2627),PID=11980,TID=0x00007F27148C8700

JRE版本:Java(TM)SE运行时环境(8.0_92-B14)(构建1.8.0_92-B14)
Java VM:Java HotSpot(TM)64位服务器VM(25.92-B14混合模式linux-amd64压缩oops)
无法写入核心转储。核心转储已被禁用。要启用核心转储,请在再次启动Java之前尝试“ulimit-c unlimited”

----------T H R E A--------------------------------------------------------

当前线程(0x00007F27883C5800):VMThread[堆栈:0x00007F27147C8000,0x00007F27148C9000][ID=12005]

堆栈:[0x00007F27147C8000,0x00007F27148C9000],SP=0x00007F27148C7160,可用空间=1020K
本机帧:(J=编译的Java代码,J=解释的,VV=VM代码,C=本机代码)
V[libjvm.so+0xABD65A]Vmerror::report_and_die()+0x2ba
V[libjvm.so+0x4fb4db]report_vm_out_of_memory(char const*,int,无符号long,VMErrorType,char M.SO+0x91D713]OS::Linux::commit_memory_impl(char*,无符号长,bool)+0x103
V[libjvm.so+0x91DC69]OS::PD_commit_memory(char*,无符号长,无符号长,bool)+0x29
V[libjvm.so+0x917F6A]OS::commit_memory(char*,无符号长,无符号长,bool)+0x2A
V[libjvm.so 98D748]psyounggen::resize_generation(无符号长,无符号长)+0xF8
V[libjvm.so+0x98C8A2]psyounggen::resize(无符号长,无符号长)+0x22
V[libjvm.so+0x989b7b]psscavenge::invoke()+0xF3b
V[libjvm.so+0x98a301]psscavenge::invoke()+0x41
V[libjVM.SO+0x941410]ParallelScavengeHeap::failed_mem_allocate(无符号长)+0x70
V[libjvm.so+0xabf077]VM_parallelgcfailedAllocation::doit()+0x97
V[libjvm.so+0xac6aa5]VM_operation::evaluate()+0x55
V[libjvm.so+0xac4e7a]VMTHread::evahtml" target="_blank">html" target="_blank">luate()+0xba
V[libjvm.so R>V[libjvm.so+0xAC5670]VMTHread::run()+0x70
V[libjvm.so+0x91fad8]java_start(thread*)+0x108

VM_Operation(0x00007F22963F34E0):ParallelGCFailedAllocation,模式:safepoint,由线程0x00007F25E8105000请求

----------P R O C E S S-----------------

Java线程:(=>当前线程)
0x00007F25A8052800 JavaThread“pool-27-thread-32”[_thread_blocked,ID=26278,stack(0x00007F2147523000,0x00007F2147624000)]
0x00007F24DC07F000 JavaThread“pool-33-thread-55”[_thread_blocked,ID=26277,stack(0x00007F2147624000,0x00007F2147725000)]
0x00007F25BC06B800 JavaThread已阻止,ID=26272,堆栈(0x00007F2147725000,0x00007F2147826000)]
0x00007F2568060000 JavaThread“pool-24-thread-39”[_thread_blocked,ID=26267,堆栈(0x00007F2147826000,0x00007F2147927000)]
0x00007F25147927000)]
0x00007F25147927000

jvm_args:-xmx16g-xx:reservedcodeCachesize=256m-xx:+heapdumponoutofmemoryerror-xx:heapdumppath=/opt/ddt/cpa-xx:-omitstacktraceinfastthrow

内存:
空闲-m
缓存的已使用空闲共享缓冲区总数
MEM:64298 37022 27275 593 946 6
-/+缓冲区/缓存:26962 37336
交换:15847 957 148 89

系统限制:

ulimit-a
核心文件大小(块,-c)0
数据seg大小(k字节,-d)无限
调度优先级(-e)0
文件大小(块,-f)无限
挂起信号(-i)256455
最大锁定内存大小(k字节,-l)64
最大内存大小(k字节,-m)无限
打开文件(-n)64000
管道大小(512字节,-p)8
POSIX消息队列(字节,-q)819200
实时优先级(-r)0
堆栈大小(k字节,-s)8192
cpu时间(秒),-t)无限
最大用户进程数(-u)256455
虚拟内存(kbytes,-v)无限
文件锁(-x)无限

共有1个答案

姚洲
2023-03-14

我认为您可能会面临以下64位虚拟机和压缩OOP的问题:

https://bugs.openjdk.java.net/browse/jdk-8187709

https://blogs.oracle.com/poonam/running-on-a-64bit-platform-and-still-rung-out-memory

 类似资料:
  • 问题内容: 我一直在使用一种提供下载服务的方法,但是由于它不安全,所以我决定对此进行更改。(该方法是到存储中原始文件的链接,但是风险是每个知道链接的人都可以下载该文件!)因此,我现在通过我的视图提供文件,这样,只有拥有权限的用户才能下载文件,但是我注意到服务器上的负载很高,同时有许多文件同时下载请求。这是我为用户处理下载的代码的一部分(考虑文件是图像) 在保持安全性并降低服务器端负载的情况下,有没

  • 问题内容: 在回答这个问题之前,我还没有开发出足以达到高服务器负载的流行方法。将我当作(叹息)刚刚降落在地球上的外星人,尽管它知道PHP和一些优化技术。 我正在用 PHP 开发一个工具,如果可以的话,它可以吸引很多用户。但是,尽管我完全有能力开发该程序,但在编写可以处理大量流量的东西时却一无所知。因此,这里有一些问题(也可以将这个问题转换为资源线程)。 资料库 目前,我计划在PHP5中使用MySQ

  • 我目前正在将我的应用程序从WAS 8迁移到WAS Liberty,我遇到了以下问题。在我的一个模块网页中。xml文件中,servlet启动时的加载值为-1。在Liberty中运行时,不会调用特定的servlet。有人能帮我吗?请从我的web.xml<code>中找到以下代码片段

  • 在GCP上,我需要使用2个GCP项目;一个用于web应用程序,另一个用于存储web应用程序的机密(其结构来自google的存储库) 如自述文件中所述,我将使用GCP Secret Manager存储机密 该项目分配给GCP Secret Manager,用于组织共享的机密。 prj机密:在机密管理器中创建机密 在prj应用程序中,我想使用工作负载标识,因为我不想使用serviceFactkey d

  • 负载的实现方式有很多种,Uragano采用客户端集成负载,目前支持负载算法有轮询、加权轮询、随机、加权随机、Hash一致性。在未指定负载算法的情况下,Uragano默认采用轮询。 service.AddUragano(context.Configuration, builder => { builder.Add

  • 嗨,由于我不知道负载测试,我在学习时有疑问。希望如果它是一个无效的也请让我帮助。 在jmeter中,我们可以简单地记录并正确地进行负载测试。如果是这样的话,如果我从我的客户端加载一些未知的应用程序,可能会导致服务器崩溃。然后,如果未知人员负载测试的服务器崩溃,他们该怎么办。 有没有什么具体的事情要做负载测试,或者只是我们可以在任何网站上做负载测试。请让我知道这件事,即使我的查询也不是有效的……提前