Tag: 堆内存

java.lang.OutOfMemoryError:为Chunk :: new请求了1958536个字节。 超出交换空间

我们在生产环境中以不可预测的方式面临以下问题,有时服务器在一天或有时在一周内停机,下面是确切的错误转储,下面是服务器的设置。 JDK:jdk1.6.0_21 服务器:Tomcat 7.0.2 操作系统:Red Hat Enterprise Linux Server 5.5版 在catalina.sh中,已完成以下设置: JAVA_OPTS=”-Xms1024M -Xmx1536M -XX:+HeapDumpOnOutOfMemoryError -XX:+AggressiveOpts -XX:-DisableExplicitGC -XX:AdaptiveSizeThroughPutPolicy=0 -XX:+UsePSAdaptiveSurvivorSizePolicy -XX:+UseAdaptiveGenerationSizePolicyAtMinorCollection -XX:+UseAdaptiveGenerationSizePolicyAtMajorCollection -XX:PermSize=768M -XX:MaxPermSize=768M -XX:+PrintGCDetails -Xloggc:/tmp/gcLogs.txt” export CATALINA_OPTS=”-Dcom.sun.management.jmxremote.port=22222 -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.password.file=/jakarta-tomcat7/apache-tomcat-7.0.2/conf /jmxremote.password -Dcom.sun.management.jmxremote.access.file=/jakarta-tomcat7/apache- tomcat-7.0.2/conf/jmxremote.access” 错误追踪: – # #Java Runtime Environment检测到致命错误: # #java.lang.OutOfMemoryError:为Chunk :: new请求了1958536个字节。 交换空间? # #Internal Error(allocation.cpp:215),pid = 18658,tid = 589781904 #Error:Chunk :: new # #JRE版本:6.0_21-b06 […]

打开太多数字时如何避免MATLAB崩溃?

有时我会启动一个MATLAB脚本并意识到太晚了,它会输出太多数字。 最终我得到了一个 线程“AWT-EventQueue-0”中的exceptionjava.lang.OutOfMemoryError:Java堆空间 这可以很容易地在我的机器上使用 for i=1:inf figure; end 在使用128 MB Java堆的标准设置( 首选项/ Java堆内存 )崩溃之前,我得到大约90个数字,而将堆加倍到256 MB则给出了大约200个数字。 您是否看到了避免 Java错误消息的方法? 如果没有足够的内存供另一个人使用,我希望我的脚本能够被告知而不是崩溃。 也许我可以有一个figure包装器(不知何故?)检查有多少Java堆可用,如果没有足够的空间,哪些拒绝打开一个新数字? 更新 使用下面的答案,我得到了一个很好的图表,说明了有多少可用的内存Java: 这是使用 for i=1:inf java.lang.Runtime.getRuntime.gc fprintf(‘%3.0f: %1.0f Byte free\n’,i,java.lang.Runtime.getRuntime.freeMemory); figure; end 我假设开头的增加意味着垃圾收集每次调用它时只会做一些努力吗? 更新2 – 我的解决方案 使用我在这里获得的帮助,我实现了以下解决方案作为figure.m ,它重载并调用内置figure命令: function varargout=figure(varargin) memcutoff = 10E6; % keep at least this amount of bytes free memkeyboard= 3E6; % if […]

如何在没有垃圾收集的情况下在Java 5上进行堆转储?

我们有一个运行Java 5的长期运行的服务器应用程序,并对其进行分析,我们可以看到老一代随着时间的推移缓慢增长。 它在完整的GC上正确释放,但我希望能够使用堆转储查看Eclipse MAT中无法访问的对象。 我已成功使用+ XX:HeapDumpOnCtrlBreak获取堆转储,但JVM在转储堆之前总是执行GC。 显然这不会发生在Java 6上,但我们暂时停留在5。 有什么办法可以防止这种情况吗?

如何为tomcat应用程序增加Java堆空间

有很多问题要问这个或类似的问题。 它们都给出了必须执行的命令,我不明白的是我在哪里写这个命令。 我想永久增加我的tomcat应用程序的堆空间。 我读了这页http://javahowto.blogspot.com/2006/06/6-common-errors-in-setting-java-heap.html ,它在Tomcat部分下面说 停止Tomcat服务器,设置环境变量CATALINA_OPTS,然后重新启动Tomcat。 查看文件tomcat-install / bin / catalina.sh或catalina.bat以了解如何使用此变量。 例如, 设置CATALINA_OPTS = -Xms512m -Xmx512m(Windows,没有“”围绕值) export CATALINA_OPTS =“ – Xms512m -Xmx512m”(ksh / bash,“”围绕值) setenv CATALINA_OPTS“-Xms512m -Xmx512m”(tcsh / csh,“”围绕值) 所以我换了这条线 设置CATALINA_OPTS = 同 设置CATALINA_OPTS = -Xms512m -Xmx512m 但我仍然得到错误。 javax.servlet.ServletException:Servlet执行引发exception 根本原因 java.lang.OutOfMemoryError:Java堆空间java.lang.reflect.Array.multiNewArray(本机方法)java.lang.reflect.Array.newInstance(Array.java:90)nom.tam.util.ArrayFuncs.newInstance(ArrayFuncs。 java:1028)nom.tam.fits.ImageData.read(ImageData.java:259)nom.tam.fits.Fits.readHDU(Fits.java:573)controller.UploadServlet.retreiveFITSFileFields(UploadServlet.java:206)controller。 ScanServerFiles.doPost(ScanServerFiles.java:39)javax.servlet.http.HttpServlet.service(HttpServlet.java:637)javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

以编程方式设置max java堆大小

有没有办法以编程方式设置max java堆大小而不是vm参数? 就像是: System.getProperties().put(“”, “1000m”);

如何在Java中修复“请求的数组大小超过VM限制”错误?

是否有一个日志选项可以让tomcat记录错误的查询而不是抛出这个? SEVERE:java.lang.OutOfMemoryError:请求的数组大小超过VM限制 (尝试将日志级别设置为FULL,但仅捕获上述内容) 这还不足以进一步调试 或者,如果可以通过调整以下内容来分配更多内存来修复此问题? -Xms1024M -Xmx4096M -XX:MaxPermSize = 256M 更新 -Xms6G -Xmx6G -XX:MaxPermSize = 1G -XX:PermSize = 512M (以上看起来效果更好,继续监控)

java.exe进程使用更多内存并且不释放它

我有一个java应用程序,在任何复杂执行之前处于空闲状态时,在Heap中使用23 MB并且TaskManager中的java.exe进程大小约为194 MB。 经过一些复杂的操作后,java.exe的大小增长到大约500MB,堆大小也随之增长。 通过调用System.gc()方法,在几个完整的GC之后,堆大小减少到23MB。 但java.exe的大小从大约600MB减少到大约237MB,其中仍然有大约43 MB的数据。 有没有办法减少这个? 或者是由于某些行为?

为什么是锯齿形图?

当我使用NetBeans运行下面提到的代码时,分配的堆大小图类似于锯齿形状。 我正在附加来自JVisualVM的屏幕截图,它显示了具有锯齿形状的堆分配图。 该程序是一个简单的无限循环打印“Hello,World!” 进入控制台。 public class HelloWorld { public static void main(String a[]){ while(true) { System.out.println(“Hello, World!”); } } } 任何人都可以解释使用堆图形状背后的原因吗? PS :即使我在不​​使用NetBeans的情况下运行它也会发生这种情况,因此它很可能与NetBeans无关…