【问题标题】:Java Large File Upload throws java.io.IOException: Map failedJava 大文件上传抛出 java.io.IOException: Map failed
【发布时间】:2023-03-03 02:30:01
【问题描述】:

我正在使用 Spring 和 Hibernate 并尝试上传大文件,但是当我尝试上传时 超过 150 Mb 然后它会产生类似的错误

Caused by: java.lang.OutOfMemoryError: Map failed
at sun.nio.ch.FileChannelImpl.map0(Native Method)
at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:755)
... 157 more

我使用的是 Windows 64 位操作系统。经过大量谷歌搜索后,我发现这是 JDK 中可用的错误。 谁能帮我解决这个问题?

有人写过这个问题https://github.com/MLCL/Byblo/issues/78。但我不确定这是否是错误。如果有错误,那么我该如何解决。任何其他合适的解决方案。

【问题讨论】:

  • 您能发布执行此操作的代码吗?除非我们看到代码实际上试图做什么,否则我们无能为力。谢谢
  • 其实代码不是我写的。我正在使用带有spring和hibernate的liferay。在它里面我正在使用它上传文件文档和媒体 Portlets。
  • 无论您使用什么库,都非常不明智地使用内存映射文件来保存上传文件,并且无论出于何种原因,操作系统都不会对超过一定大小的文件进行内存映射.在这种情况下,不需要内存映射 I/O。向图书馆供应商投诉,然后再找一家。
  • 我同意 EJP。如果您查看 FileChannelImpl.map0(..) 源代码:hg.openjdk.java.net/jdk7u/jdk7u/jdk/file/726e38af4020/src/…,您将看到 JNU_ThrowOutOfMemoryError(env, "Map failed") 是否仅在文件太大的情况下才会发生。看看这个:stackoverflow.com/questions/19016512/c-mapviewoffile-fails
  • @ EJP:是的,我得到了你的建议,但现在我的项目结束了,我无法更改我的 liferay CMS。有没有其他方法可以执行此任务。并且想说这仅在我的平台上执行,而不是在所有平台上执行。这不是与 liferay 相关的错误。但是我的 java evn 配置有问题。我尝试在 antoher liferay 中上传相同的文件,没有错误。

标签: java spring file-io


【解决方案1】:

增加 JVM 堆大小?

-Xmx1024m

【讨论】:

  • 是的,我这样做了,但它不适合我。我也检查增加和减少。
  • 映射文件的内存不是来自 Java 堆。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-16
  • 2012-04-01
  • 2016-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多