- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在与一个开发在 1GB Linux 目标系统上运行的 Java GUI 应用程序的团队合作。
我们的 java 进程使用的内存会无限增长,直到 Linux 最终杀死 java 进程。
我们的堆内存是健康且稳定的。 (我们已经广泛地分析了我们的堆)我们还使用 MemoryMXBean 来监视应用程序的非堆内存使用情况,因为我们认为问题可能出在那儿。但是,我们看到的是报告的堆大小 + 报告的非堆大小保持稳定。
下面是一个示例,说明在我们的目标系统上运行应用程序时,具有 1GB RAM(MemoryMXBean 报告的堆和非堆,使用 Linux 的 top 命令(驻留内存)监控的 Java 进程使用的总内存)上的数字可能看起来如何:
启动时:
1 天后:
2 天后:
上面的数字只是我们系统性能的“更清晰”的表示,但它们相当准确且接近现实。如您所见,趋势很明显。在运行应用程序几周后,Linux 系统开始出现由于系统内存不足而出现的问题。事情开始放缓。几个小时后,Java 进程被杀死。
经过几个月的分析并试图弄明白这一点,我们仍然不知所措。我觉得很难找到有关此问题的信息,因为大多数讨论最终都解释了堆或其他非堆内存池。 (如元空间等)
我的问题如下:
如果分解一下,java进程使用的内存包括什么? (除了堆和非堆内存池)
还有哪些潜在的内存泄漏源? ( native 代码?JVM 开销?)一般来说,哪些是最有可能的罪魁祸首?
如何监控/配置此内存?堆外的所有东西 + 非堆目前对我们来说都是一个黑盒子。
任何帮助将不胜感激。
最佳答案
我会尝试部分回答你的问题。
在这种情况下,我试图坚持的基本策略是监控每个可用内存池、打开的文件、套接字、缓冲池、线程数等的最大/使用/峰值。您可能会错过套接字连接/打开的文件/线程的泄漏。
在您的情况下,您似乎确实遇到了 native 内存泄漏问题,这非常令人讨厌且难以找到。
您可以尝试分析内存。看看GC
根并找出哪些是JNI
全局引用。它可以帮助您找出哪些类可能没有被收集。例如,这是一个 common problem在 awt
这可能需要明确的组件处置。
检查JVM内部内存使用情况(不属于堆/堆外内存) -XX:NativeMemoryTracking
非常方便。它允许您跟踪线程堆栈大小、gc/编译器开销等等。最棒的是,您可以在任何时间点创建基线,然后跟踪自创建基线以来的内存差异
# jcmd <pid> VM.native_memory baseline
# jcmd <pid> VM.native_memory summary.diff scale=MB
Total: reserved=664624KB -20610KB, committed=254344KB -20610KB
...
您也可以使用JMX
com.sun.management:type=DiagnosticCommand/vmNativeMemory
生成此报告的命令。
而且...您可以更深入地检查 pmap -x <pid>
和/或 procfs
内容。
关于Java 进程的内存无限增长,但 MemoryMXBean 报告稳定堆和非堆大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39117716/
如果输入稳定,我想触发 AJAX 请求(以便不在每个新字符后发送请求)。我尝试了以下方法: $('#input').keyup(function(){ // Get the value when
我读到,我们可以插入以将选择排序更改为稳定排序,而不是交换。我在网上得到了以下相同的实现。 void selection ( int a[], int n ) { while ( --n >
我正在尝试创建一个非常节省空间的不寻常的关联数组实现,我需要一个满足以下所有条件的排序算法: 稳定(不改变具有等键的元素的相对顺序。) 就地或几乎就地(O(log n) 堆栈很好,但没有 O(n) 空
我有一个节点的无线网状网络,每个节点都能够向其邻居报告其“距离”,以(简化的)信号强度来衡量。节点在地理上位于 3d 空间中,但由于 radio 干扰,节点之间的距离不需要在三角(三角?)上一致。即,
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在实现一个玩具调度程序,它读取进程规范(例如到达时间、总运行时间)的输入文件,然后根据随机 io/cpu 突发调度进程。 文件格式 Arrival time, total CPU time, CP
我正在使用 JRedis 的同步实现,但我打算切换到异步方式与 Redis 服务器通信。 但在此之前我想问一下社区 JRedisFuture 是否实现了 alphazero 的 jredis对于生产使
我们正在为我们的公司构建一个RESTful API,它将提供XML,JSON和可能的其他内容类型。 我的团队正在寻找一个框架(按优先顺序排列): 有据可查 理想的情况下,它具有出色的教程以及繁荣的社区
我的网站希望用户上传他们的照片...但我该如何保护我们的服务器免受伤害?只允许 JPG 应该可以避免病毒问题,但如果有人选择 10Gb 文件怎么办 - 这会减慢整个网站的速度吗? 我们使用的是经典 A
关闭。这个问题需要更多 focused .它目前不接受答案。 想改进这个问题?更新问题,使其仅关注一个问题 editing this post . 8 个月前关闭。 Improve this ques
据我所知,paintEvent() 是在 QApplication 对象的“主循环”中执行的,并且可以为其内部系统任务花费时间,从而延迟执行排队槽或其他事件。 但是,如果我需要播放非常流畅的动画并且我
我想对随机排序的 ActiveRecord 模型列表(来自 MySQL 数据库的行)进行分页。 但是,这种随机化需要在每个 session 的基础上持续存在,以便访问该网站的其他人也会收到一个随机的、
在 Flutter Web 稳定后,我尝试按照文档中给出的说明将我的 Flutter Mobile 应用程序转换为 Flutter Web。一切都很好,但这里的问题是 Web 上的文本不可选择!我刚刚
我正在尝试制作一个包含 Nginx stable 最新使用 vts 模块编译的 dockerfile .... 我遇到了一个大问题,当我放入将下载的 docker 文件时我找不到一些汽车链接安装最新的
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我正在使用以下命令将 Airflow 部署到 Kubernetes 中:https://github.com/helm/charts/tree/master/stable/airflow 我正在尝
我已经安装了本地测试elasticsearch和logstash,它们似乎看不到本地es-知道在集群/ ns中如何看到es吗? helm repo add elastic https://helm.e
我最近加入了一家公司,担任发布工程师,在这里,大量的开发团队以各种语言开发了众多服务,应用程序和Web应用程序,它们之间具有各种相互依赖性。 我正在尝试找到一种简化并最好自动发布的方法。当前,发布团队
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我想知道一种在 Windows 上使用简单批处理和 ffmpeg 稳定 goPro 视频的简单方法。 最佳答案 1) 在您的计算机上安装 ffmpeg:按照 steps 安装 2) 在您要处理的视频旁
我是一名优秀的程序员,十分优秀!