- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在高负载多线程Java项目中遇到OOM异常问题。
我很感激你能给我任何帮助。
德莱尔斯:
项目是建立在Java+Mysql作为存储。
没有证据表明在应用程序崩溃时会使用额外的RAM(任何监控工具都不会跳转)
CPU和I/O也可以。
Jstack工具未找到任何线程死锁。
Mysql中没有慢速或错误日志。
在hs_err中,您可以看到thread_blocked状态,但我没有找到任何原因。
Java运行参数、系统限制、可用内存,如下所示。
以下是hs_err_filepart中的错误(完整文件attached):
内存不足,Java运行时环境无法继续。
本机内存分配(mmap)无法映射1633681408字节以提交保留内存。
可能的原因:
系统的物理RAM或交换空间不足
在32位模式下,已达到进程大小限制
可能的解决方案:
减少系统内存负载
增加物理内存或交换空间
检查交换备份存储是否已满
在64位操作系统上使用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虚拟机:Java HotSpot(TM)64位服务器虚拟机(25.92-b14混合模式linux-amd64压缩oops)
无法写入核心转储。已禁用核心转储。要启用核心转储,请在再次启动Java之前尝试“ulimit-c unlimited”
---------------今天---------------
当前线程(0x00007f27883c5800):VMThread[堆栈:0x00007f27147c8000,0x00007f27148c9000][id=12005]
堆栈:[0x00007f27147c8000,0x00007f27148c9000],sp=0x00007f27148c7160,可用空间=1020k
本机帧:(J=编译的Java代码,J=解释的,Vv=虚拟机代码,C=本机代码)
V[libjvm.so+0xabd65a]VMError::report_and_die()+0x2ba
V[libjvm.so+0x4fb4db]报告内存不足(char const*,int,unsigned long,VMErrorType,char const*)+0x8b
V[libjvm.so+0x91d713]os::Linux::commit_memory_impl(char*,unsigned long,bool)+0x103
V[libjvm.so+0x91dc69]os::pd_commit_内存(char*,unsigned long,unsigned long,bool)+0x29
V[libjvm.so+0x917f6a]os::提交内存(char*,unsigned long,unsigned long,bool)+0x2a
V[libjvm.so+0x98c343]PSVirtualSpace::expand_by(unsigned long)+0x53
V[libjvm.so+0x98d748]PSYoungGen::调整生成大小(无符号长,无符号长)+0xf8
V[libjvm.so+0x98c8a2]PSYoungGen::resize(无符号长,无符号长)+0x22
V[libjvm.so+0x989b7b]PSScavenge::invoke_no_policy()+0xf3b
V[libjvm.so+0x98a301]PSScavenge::invoke()+0x41
V[libjvm.so+0x941410]并行清除heap::分配内存失败(无符号长)+0x70
V[libjvm.so+0xabf077]虚拟机并行失败分配::doit()+0x97
V[libjvm.so+0xac6aa5]虚拟机操作::evaluate()+0x55
V[libjvm.so+0xac4e7a]VMThread::evaluate_操作(VM_操作*)+0xba
V[libjvm.so+0xac51fe]VMThread::loop()+0x1ce
V[libjvm.so+0xac5670]VMThread::run()+0x70
V[libjvm.so+0x91fad8]java启动(线程*)+0x108
VM_操作(0x00007f22963f34e0):并行gcfailedallocation,模式:safepoint,由线程0x00007f25e8105000请求
---------------P R O C E S公司---------------
Java线程:(=>当前线程)
0x00007f25a8052800 JavaThread“pool-27-thread-32”[_thread_blocked,id=26278,stack(0x00007f2147523000,0x00007f214762400)]
0x00007f24dc07f000 JavaThread“pool-33-thread-55”[线程被阻塞,id=26277,堆栈(0x00007f214762400,0x00007f2147725000)]
0x00007f25bc06b800 JavaThread“pool-28-thread-48”[线程被阻塞,id=26272,堆栈(0x00007f2147725000,0x00007f214782600)]
0x00007f256806000 JavaThread“pool-24-thread-39”[_thread_blocked,id=26267,stack(0x00007f2147826000,0x00007f2147927000)]
0x00007f25bc06a000 JavaThread“pool-28-thread-47”[线程被阻塞,id=26262,堆栈(0x00007f2147927000,0x00007f2147a28000)]
jvm_args:-Xmx16G-XX:ReservedCodeCacheSize=256M-XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath=/opt/DDT/CPA-XX:-omitstacktraceinfasttrow
内存:
自由-m
缓存的可用共享缓冲区总数
内存:64298 37022 27275 5 593 9466
-/+缓冲区/缓存:269623736
交换:15847 957 14889
系统限制:
乌利米特-a
核心文件大小(块,-c)0
数据段大小(kbytes,-d)不受限制
调度优先级(-e)0
文件大小(块,-f)不受限制
挂起信号(-i)256455
最大锁定内存(KB,-l)64
最大内存大小(kbytes,-m)不受限制
打开文件(-n)64000
管道大小(512字节,-p)8
POSIX消息队列(字节,-q)819200
实时优先级(-r)0
堆栈大小(kbytes,-s)8192
cpu时间(秒,-t)无限制
最大用户进程(-u)256455
虚拟内存(KB,-v)不受限制
文件锁定(-x)不受限制
最佳答案
我认为64位虚拟机和压缩OOPS可能会面临以下问题:
https://bugs.openjdk.java.net/browse/JDK-8187709
https://blogs.oracle.com/poonam/running-on-a-64bit-platform-and-still-running-out-of-memory
关于java - 高负载项目中的Java OOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48457796/
在 Web 应用程序架构设计期间,我必须从概念上计算我的服务器之一可以服务多少个当前客户端。然后我可以预算它。 那么,有什么公式可以遵循吗?或者,你如何计算这个?或者,通常,一个 httpd/tomc
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找书籍、工具、软件库、教程或其他场外资源的问题对于 Stack Overflow 来说是
我正在使用 Angular 5,我正在尝试在加载 div 的背景图像时获取加载图标。 如果它是一个普通的 img,我对此没有问题,但如果我尝试将它作为背景,它就不起作用。 这里是一些示例代码 app.
我们怎么知道我们的程序在 CPU 上有多少负载? 我尝试使用 htop 找到它。但是 htop 不会给 cpu 负载。它实际上给出了我程序的 cpu 利用率(使用 pid)。 我正在使用 C 编程,L
我们发现从Spark 1.3到当前的Spark 2.0.1以来,从Oracle数据库使用Spark的API加载数据一直很慢。典型的代码在Java中是这样的: Map options =
我有时会收到 mnesia overloaded主要使用时的错误消息 async_dirty查询和 ram_copies表。所以为了了解发生了什么,我想获得更多关于 mnesia 状态的信息,例如每秒
对于通常使用很少 CPU 的程序来说,内核 CPU 非常高。 Linux 机器在状态之间交替。大多数时候,程序使用低 CPU 正常执行。在 CPU“激增”期间,程序使用 100% 可用 CPU 使用高
我正在使用 Raspberry Pi 2 来路由 wifi-eth 连接。因此,从 eth 方面来看,我有一台可以使用 Pi wifi 连接到互联网的计算机。在 Raspberry 上我启动 htop
基本上我有一个网页,其中有一个 iframe 可以从不同的域加载另一个网页。它移动得很慢,我想证明整个页面很慢只是因为 iframe 内的页面。 有什么方法可以测量总页面负载以及总页面负载中有多少%来
我们有一个基于 Spring 的应用程序,它充当使用其他 Rest API 的编排层。我只想测试这个组件的性能,而不测试正在使用的下游 api。 我正在寻找有关如何完成此操作的任何架构建议? 当前的方
我正在学习 hibernate 。为了进行测试,我使用无效 key 调用了 session.load 。当我在调试器(JB Idea)中跨过该行后,没有任何反应 - 我预计会得到 ObjectNotF
我正在开发一个小型的待办事项 PHP 应用程序。我正在使用 jQuery 构建 HTML。其中一个是一个按钮,用于启动一个模式,允许用户编辑该项目。我很好奇加载数据时更好的方法是什么: 1) 在初始加
我尝试在 twitch 播放器中使用 angular 作为覆盖标记。 我将 ng-repear 与(键,值)结合使用。 //player is here 设置是一个全局对象。但是当我尝试加载页面
我即将了解 C 语言中的特定进程如何在特定时间范围内加载 CPU。该进程可能会在运行时切换处理器核心,因此我也需要处理这个问题。 CPU为ARM处理器。 我研究了从标准顶部获取负载的不同方法,perf
这个问题在这里已经有了答案: XMLHttpRequest Origin null is not allowed Access-Control-Allow-Origin for file:/// t
您好,我正在用 Java 开发负载平衡算法。在我的系统中将有一个主节点和 n 个从节点。主节点将接收查询分发给它的从节点。但是在将查询分发到其从节点之一之前,我想测量从节点中的当前负载,以检查特定从节
我正在渲染由大约 50 万个三角形组成的相当重的对象。我使用 opengl 显示列表,在渲染方法中只调用 glCallList。我认为一旦图形基元被编译成显示列表,cpu 的工作就完成了,它只是告诉
我正在尝试加密 Sipdroid,为此我必须在 RTP 数据包获得编码的音频负载后对其进行加密。我在 RTP 数据包类中使用这个函数: public byte[] getPayload() {
我正在尝试解析以下 JSON 负载: { "results":[ [ 298.648132, 280.68692, 356.54
在动画期间 cpu 负载非常高(高达 75%) 是否有优化代码以降低 CPU 负载的方法? 我的代码: ImageView myImageView = (ImageView)findViewById(
我是一名优秀的程序员,十分优秀!