Tag: heap memory

Java虚拟机堆大小格式作为内存百分比

我在我的应用程序服务器上安装了一个IDBS Spreadsheet服务器,发现它有一个我不熟悉的JVM堆大小的格式。 该文档提到xmx或最大堆大小设置为系统内存的75%。 ini文件中的格式是这样的 -Xms50:1024:1536P -Xmx75:1536P 我在搜索文档时从未见过这种格式。 我可以猜测75表示75%,也许P表示百分比而不是通常的G表示千兆字节而M表示兆字节,但我不确定1536的含义或如何读取xms 3数值。

执行GC后,为什么分配的永久代的大小会增加?

以下是我从jvisualvm 执行GC后拍摄的快照。 和 第一张图片是Heap stats,第二张图片是perm gen stats。 我无法理解我何时使用 GC 使用堆大小减少(如预期的那样)但是永久代的分配大小增加(尽管使用的permgen大小保持不变)。 What could be the possible explanation of such behavior? 使用JVM参数 -Xbootclasspath/p:../xyz.jar -Xbootclasspath/a:../abc.jar -Djava.endorsed.dirs=../resolver -Djava.library.path=../framework -Djavax.management.builder.initial=JBeanServerBuilder -Djavax.net.ssl.trustStore=../certs -Dorg.mortbay.log.class=JettyLogger -Xms128m -Xmx256m -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=2000 注意:出于正当原因,我更改了名称(ex xyz.jar)。 JVm信息: JVM: Java HotSpot(TM) 64-Bit Server VM (23.6-b04, mixed mode) Java: version 1.7.0_11, vendor Oracle Corporation Java Home: /home/aniket/jdk1.7.0_11/jre JVM Flags:

Tomcat 6堆大小 – 这是正确的吗?

我在Red Hat盒子上运行多个tomcats,我想为每个tomcats配置单独的堆大小(某些实例使用更多内存)。 我可以将输入以下内容的堆大小min / max bt设置到catalina.sh文件中: CATALINA_OPTS =“ – Xms64m -Xmx256m” 我需要添加’导出’吗? 即导出CATALINA_OPTS =“ – Xms64m -Xmx256m”

为什么PermGen的默认大小如此之小?

限制Java JVM上Permgen空间大小的目的是什么? 为什么不总是将它设置为最大堆大小? 为什么Java默认这么少的64MB? 他们是否试图强迫人们通过这样做来注意代码中的permgen问题? 如果我的应用程序使用85MB的permgen,那么将它设置为96MB可能是安全的,但为什么如果它只是主堆的真正部分呢? 允许JVM在堆允许的情况下使用尽可能多的PermGen会不会有效?

为什么我的Java堆转储大小比使用的内存小得多?

问题 我们试图在我们的Web应用程序中找到大内存泄漏的罪魁祸首。 我们在查找内存泄漏方面经验非常有限,但我们发现了如何使用jmap创建Java堆转储并在Eclipse MAT中对其进行分析。 但是,在我们的应用程序使用56 / 60GB内存时,堆转储的大小只有16GB,在Eclipse MAT中甚至更少。 上下文 我们的服务器在Ubuntu 14.04上使用Wildfly 8.2.0作为我们的Java应用程序,其进程使用95%的可用内存。 进行转储时,我们的缓冲区/缓存已用空间为56GB。 我们使用以下命令创建转储: sudo -u {application user} jmap -dump:file=/mnt/heapdump/dump_prd.bin {pid} 堆转储文件大小为16,4GB,当使用Eclipse MAT进行分析时,它表示有大约1GB的活动对象和大约14,8GB的无法访问/浅堆。 编辑:这里有一些关于我们看到的问题的更多信息。 我们监视我们的内存使用情况,我们看到它的增长和增长,直到剩下约300mb的可用内存。 然后它保持在那个内存量附近,直到进程崩溃,遗憾的是应用程序日志中没有错误。 这使我们假设它是一个硬OOM错误,因为这只发生在内存接近耗尽时。 我们为JVM使用-Xms25000m -Xmx40000m设置。 题 基本上,我们想知道为什么我们的大部分内存都没有在这个转储中被捕获。 顶部保留的大小类看起来并不太可疑,所以我们想知道是否存在与堆转储有关的问题我们做错了什么。

存储在JVM中的Object的实例变量在哪里?

Java中的对象的实例变量是存储在JVM的堆栈或方法区域中的吗? 另外,我们为多个线程设置了不同的实例变量吗? 如果它存储在方法区域中,实例变量与静态变量存储的不同之处是什么?

Tomcat:调整内存比例

我有一个运行在Windows 2008 Server上的Tomcat实例,内存为4GB。 服务器专用于这一个应用程序,所以我非常希望能够将大部分RAM专用于Tomcat。 我的Tomcat设置目前有以下java选项: -Xms256m -Xmx1600m 我想增加RAM的数量,最好是大约3GB(显然我知道怎么做,只需增加-Xmx值)。 但是,如果我将最大堆空间增加到1600MB以上,Tomcat就会拒绝启动。 我读过的几个网站都说Tomcat不能使用超过40%的可用RAM,这看起来与我所看到的一致。 有没有办法增加Tomcat可以使用的内存比例 ,这样我可以增加Tomcat可以使用的内存量 ? 谢谢,Rik

使用jmap命令的Java堆转储错误:过早的EOF

我在执行下面的命令时遇到了以下exception jmap -dump:format=b,file=heap_dump.bin 输出: Dumping heap to Exception in thread “main” java.io.IOException: Premature EOF at sun.tools.attach.HotSpotVirtualMachine.readInt(HotSpotVirtualMachine.java:248) at sun.tools.attach.LinuxVirtualMachine.execute(LinuxVirtualMachine.java:199) at sun.tools.attach.HotSpotVirtualMachine.executeCommand(HotSpotVirtualMachine.java:217) at sun.tools.attach.HotSpotVirtualMachine.dumpHeap(HotSpotVirtualMachine.java:180) at sun.tools.jmap.JMap.dump(JMap.java:242) at sun.tools.jmap.JMap.main(JMap.java:140) JDK版本: 1.7.0_45 VM_OPT: -Xms2g -Xmx4g -XX:+UseG1GC -XX:MaxGCPauseMillis=1500 -XX:G1HeapRegionSize=2 -XX:+PrintFlagsFinal -XX:ParallelGCThreads=4 -XX:ConcGCThreads=2 硬件:RHEL 5.x,4核CPU Linux机器6 GB RAM 根据oracle bug报告数据库( http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6882554 ),这个问题已经修复但我仍然得到jdk 1.7版本,内置版本号:45 除了升级到Jdk 1.8之外,您能否提出任何解决方案,由于其他依赖性,这在我的情况下是不可能的? 编辑: 我已尝试使用以下命令,此命令也不起作用( 生成部分转储文件 )并显示相同的早期EOF。 jmap -J-d64 […]

PySpark:java.lang.OutofMemoryError:Java堆空间

我最近在我的服务器上使用PySpark与Ipython一起使用24个CPU和32GB RAM。 它只能在一台机器上运行。 在我的过程中,我想收集大量数据,如下面的代码所示: train_dataRDD = (train.map(lambda x:getTagsAndText(x)) .filter(lambda x:x[-1]!=[]) .flatMap(lambda (x,text,tags): [(tag,(x,text)) for tag in tags]) .groupByKey() .mapValues(list)) 当我做 training_data = train_dataRDD.collectAsMap() 它给了我outOfMemory错误。 Java heap Space 。 此外,我在此错误后无法对Spark执行任何操作,因为它失去了与Java的连接。 它给出了Py4JNetworkError: Cannot connect to the java server 。 看起来堆空间很小。 如何将其设置为更大的限制? 编辑 : 我在运行之前尝试过的事情: sc._conf.set(‘spark.executor.memory’,’32g’).set(‘spark.driver.memory’,’32g’).set(‘spark.driver.maxResultsSize’,’0′) 我按照此处的文档更改了spark选项(如果你执行ctrl-f并搜索spark.executor.extraJavaOptions): http ://spark.apache.org/docs/1.2.1/configuration.html 它说我可以通过设置spark.executor.memory选项来避免OOM。 我做了同样的事情,但似乎没有工作。

Java在序列化期间没有堆空间

以下代码导致OutOfMemmoryError:大约300万行的堆空间。 分配给JVM的内存为4 GB,使用64位安装。 while (rs.next()) { ArrayList arrayList = new ArrayList(); for (int i = 1; i <= columnCount; i++) { arrayList.add(rs.getString(i)); } objOS.writeObject(arrayList); } ArrayList引用的内存在while循环的每次迭代中都有资格进行垃圾收集,而内部JVM在抛出OutOfMemory错误之前会调用垃圾收集( System.gc() ),因为堆空间。 那么为什么会发生exception呢?