![如何释放(未使用的)内存?](https://linux22.com/image/629028/%E5%A6%82%E4%BD%95%E9%87%8A%E6%94%BE%EF%BC%88%E6%9C%AA%E4%BD%BF%E7%94%A8%E7%9A%84%EF%BC%89%E5%86%85%E5%AD%98%EF%BC%9F.png)
作为使用 amazon ec2 的新手,我正在尝试使我的应用程序正常工作。我通过 ssh 连接了几次,我一直在运行和停止服务器,有时连接会丢失,还有一些其他事情...
有一次,我收到 JVM 的错误(我的应用程序使用 Scala),提示没有足够的可用内存,无法分配给自己运行。我所做的就是重启服务器。这有效。但我认为应该有更有效的方法。有吗?
更新:
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c5550000, 715849728, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate 715849728 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /home/ubuntu/my-app/hs_err_pid8668.log
答案1
我会关注两个变化:
- 我非常确定您需要调整 JVM 的内存使用情况(首先使用
-Xmx
)以匹配您所使用的机器。确保您要求的内存不超过 VM 所拥有的内存。 - 破坏你的过度使用设置。 Re:invent 2013 上的演讲建议
overcommit_memory=2
和overcommit_ratio=80
。陷入过度承诺的糟糕境地将导致 malloc 失败,就像您看到的那样。