当ubuntu中的内存仍然可用时,Java内存不足

当ubuntu中的内存仍然可用时,Java内存不足,java,ubuntu,caching,memory,out-of-memory,Java,Ubuntu,Caching,Memory,Out Of Memory,据我所知,在linux系统中,缓存内存用于提高磁盘IO操作的性能,并且每当某些进程请求分配内存时,它都会被释放 但最近,我得到了OOM(内存不足),导致我的java应用程序在缓存内存仍然可用(~250MB)时关闭,而我现有的java应用程序java堆是Xms:128MB和Xmx:256MB。我捕获了free-m命令和内核错误 你对这种情况有什么想法吗。任何帮助都很好。谢谢您能发布完整的错误消息和java版本吗 它应该包含对耗尽的内存池(即堆、permgen等)的一些描述,这些描述有助于确定异

据我所知,在linux系统中,缓存内存用于提高磁盘IO操作的性能,并且每当某些进程请求分配内存时,它都会被释放

但最近,我得到了OOM(内存不足),导致我的java应用程序在缓存内存仍然可用(~250MB)时关闭,而我现有的java应用程序java堆是Xms:128MB和Xmx:256MB。我捕获了free-m命令和内核错误


你对这种情况有什么想法吗。任何帮助都很好。谢谢

您能发布完整的错误消息和java版本吗

它应该包含对耗尽的内存池(即堆、permgen等)的一些描述,这些描述有助于确定异常的原因。 操作系统级别的可用内存显然只是潜在原因之一(不是很频繁)。 有关更多详细信息,请参阅

大多数情况下,OOM不是由于操作系统级别的可用内存造成的,可以简单地解决,避免向集合中添加一堆对象

OutOfMemory通常是由于JVM(主要是堆)中的空间耗尽造成的。 i、 e.使用Xmx,您将堆限制在256m:如果您为使用超过256m的对象保留引用,您将耗尽堆空间,从而获得OOM。类似于permgen的类或类加载泄漏

堆是分配给JVM以承载对象的内存量,不应与OS内存混淆。 JVM从某个堆大小(Xms)开始,然后向操作系统请求额外内存,直到达到最大限制(Xmx)。 同时,垃圾收集器清理内存(根据运行时条件、JVM版本、配置等,采用多种方法)。 因此,您应该重新审视您的逻辑,避免在内存中保留太多对象,或者增加Xmx。 类/代码和其他内存池也会发生类似的情况(随jvm实现的不同而不同)


如果您遇到内存泄漏,您可以使用或分析分配的内存。是否可以发布完整的错误消息和java版本

它应该包含对耗尽的内存池(即堆、permgen等)的一些描述,这些描述有助于确定异常的原因。 操作系统级别的可用内存显然只是潜在原因之一(不是很频繁)。 有关更多详细信息,请参阅

大多数情况下,OOM不是由于操作系统级别的可用内存造成的,可以简单地解决,避免向集合中添加一堆对象

OutOfMemory通常是由于JVM(主要是堆)中的空间耗尽造成的。 i、 e.使用Xmx,您将堆限制在256m:如果您为使用超过256m的对象保留引用,您将耗尽堆空间,从而获得OOM。类似于permgen的类或类加载泄漏

堆是分配给JVM以承载对象的内存量,不应与OS内存混淆。 JVM从某个堆大小(Xms)开始,然后向操作系统请求额外内存,直到达到最大限制(Xmx)。 同时,垃圾收集器清理内存(根据运行时条件、JVM版本、配置等,采用多种方法)。 因此,您应该重新审视您的逻辑,避免在内存中保留太多对象,或者增加Xmx。 类/代码和其他内存池也会发生类似的情况(随jvm实现的不同而不同)


如果您遇到内存泄漏,可以使用或

同意来分析分配的内存。由于内存/GC中的更改,我可以添加“givejavaversion”architecture@JacekCz当然可以,阿黛格利。由于内存/GC中的更改,我可以添加“givejavaversion”architecture@JacekCz当然,他补充道