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

操作系统何时分配jvm堆

巴博耘
2023-03-14

我们的一个sap系统(PI ABAP JAVA stack)出现了性能问题。为机器配置的整个64GB都被占用了(还有8个内核)。每个人都在怀疑java部分,但我认为不同。

重启内存不足错误的java服务器节点。查看hprof文件,我发现当为服务器节点配置3GB(-Xms和Xmx)堆时,它们的大小只有1.2G(3个服务器节点的平均大小)。这一观察导致以下疑问。

我读到过,当Xms和Xmx设置为相同的值时,jvm在启动时分配了整个堆。如果是这种情况,服务器节点从一开始就有3GB的堆。如果是这样,为什么它没有反映在hprof文件中,或者如果hprof只包含在运行时分配给对象的内存,大小清楚地表明堆内存是空闲的(超过50%),那么OOM错误是如何发生的...!...??

我还知道linux做了一种叫做内存覆盖提交(memory over commit)的事情。ie内存不是在请求时实际提供的,而是在实际使用时提供的。这是否导致内存不足异常。就像当JVM启动时,操作系统告诉它已经分配了3GB的内存,但实际上会推迟到实际需要时。当jvm实际尝试将内存分配给对象时,其他一些应用程序可能已经耗尽了内存。这是否可能。。。??

即使java节点有内存泄漏问题,它也不会被限制在3GB的堆中。它怎么能占用整个64G的物理内存。。。。???

我观察到的另一件事是交换空间仅使用了50%。

这上面的任何光...!

共有1个答案

濮阳驰
2023-03-14

hprof不显示实际的堆大小,它的大小取决于许多事情,例如启用/禁用压缩引用、字段布局(对象大小不仅仅是其字段大小的总和,还有标题和字段之间的一些间隙)等等。

关于内存保留。JVM确实为堆保留了内存,但OS在需要时才分配内存。

我建议您使用内存分析器(我强烈推荐YourKit分析器)连接到正在运行的虚拟机,然后分析内存使用情况。

 类似资料:
  • 操作系统提供的服务 操作系统的五大功能,分别为:作业管理、文件管理、存储管理、输入输出设备管理、进程及处理机管理 中断 所谓的中断就是在计算机执行程序的过程中,由于出现了某些特殊事情,使得CPU暂停对程序的执行,转而去执行处理这一事件的程序。等这些特殊事情处理完之后再回去执行之前的程序。中断一般分为三类: 内部异常中断:由计算机硬件异常或故障引起的中断; 软中断:由程序中执行了引起中断的指令而造成

  • sed sed是非交互式的编辑器。它不会修改文件,除非使用shell重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。sed编辑器逐行处理文件(或输入),并将结果发送到屏幕。 sed命令行格式为: sed [-nefri] ‘command’ 输入文本 常用选项: -n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的

  • 问题内容: 我对JVM内存管理(至少对于SUN的内存管理)有疑问。 我想知道如何控制JVM将未使用的内存发送回OS(以我的情况为Windows)的事实。 我编写了一个简单的Java程序来说明我的期望。使用- Dcom.sun.management.jmxremote选项运行它,以便例如也可以使用jconsole监视堆。 使用以下程序: 一旦第一个GC完成(预期),内部堆就释放了,但是内存仅从第三个

  • 进程与线程 对于有线程系统: 进程是资源分配的独立单位 线程是资源调度的独立单位 对于无线程系统: 进程是资源调度、分配的独立单位 进程之间的通信方式以及优缺点 管道(PIPE) 有名管道:一种半双工的通信方式,它允许无亲缘关系进程间的通信 优点:可以实现任意关系的进程间的通信 缺点: 长期存于系统中,使用不当容易出错 缓冲区有限 无名管道:一种半双工的通信方式,只能在具有亲缘关系的进程间使用(父

  • 1 select,poll和epoll 其实所有的I/O都是轮询的方法,只不过实现的层面不同罢了. 这个问题可能有点深入了,但相信能回答出这个问题是对I/O多路复用有很好的了解了.其中tornado使用的就是epoll的. selec,poll和epoll区别总结 基本上select有3个缺点: 连接数受限 查找配对速度慢 数据由内核拷贝到用户态 poll改善了第一个缺点 epoll改了三个缺点.

  • 你可以在任何主流操作系统下去做开发工作,Windows,macOS,Linux 都可以。如果选择 Windows ,版本最好选择 Windows 10 专业版。用 macOS 的用户不用太担心系统问题,可以无痛并免费升级,现在你应该用的是 Sierra 这个版本的 macOS 。Linux 也可以,比如 Ubuntu 的桌面版。 如果你能满足下面三个条件的其中一个,这个任务就算完成了: Windo