深入理解 java.lang.OutOfMemoryError: Out of swap space 错误

JAVA herman 496浏览
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:xttblog,发送下载链接帮助你免费下载!
本博客日IP超过1800,PV 2600 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog,之前的微信号好友位已满,备注:返现
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领

最近我是想写一个 JVM 系列,然后全部都发表到公众号里,在公众号里形成一个菜单。方便我的粉丝阅读!

这写这篇文章之前,我在百度里搜索了一下关于 java.lang.OutOfMemoryError: Out of swap space 问题的内容,结果不胜理想。基本上很少有讲清楚的,于是我就谷歌,总结了本文。

java.lang.OutOfMemoryError: Out of swap space 错误,根据自己意思,我们差不多也能看出来是交换空间(swap space,虚拟内存) 不足。

详细的说,就是这个错误是当虚拟机向本地操作系统申请内存失败时抛出的。这和你用完了堆或者持久化中的内存的情况有些不同。这个错误通常是在你的程序已经逼近平台限制的时候产生的。这个信息告诉你的是,你可能已经用光了物理内存以及虚拟内存了。由于虚拟内存通常是用磁盘作为交换分区,因此你最先想到的解决方法可能是先增加交换分区的大小。不过我从没见过一个程序在频繁进行内存交换还能正常运行的,所以这个方法可能不会起到什么作用。

在 JVM 启动的时候,我们可以通过 -Xmx 等参数来限制 JVM 的最大内存。当 JVM 使用的内存总量超过可用的物理内存时,操作系统就会用到虚拟内存。

java.lang.OutOfMemoryError: Out of swap space

看过前面文章的也都知道,我一直在强调任何 OutOfMemoryError 错误,多数都是你的程序引起的。所以,这类问题更多的可能是应用程序的本地内存泄漏(native leak)引起的。

想增加虚拟内存(swap space) 的大小的话,很简单。比如执行下面的命令:

swapoff -a 
dd if=/dev/zero of=swapfile bs=1024 count=655360
mkswap swapfile
swapon swapfile

这段命令创建了一个大小为 640MB 的 swapfile(交换文件) 并启用该文件。

如果通过增加了你的虚拟内存大小还是不能解决你的问题,建议你按照我的第一篇文章《为什么会产生 java.lang.OutOfMemoryError: Java heap space 错误以及如何解决?》中的排查步骤排查你的程序。

当然如果你用的 JDK 版本过低,我建议你升级它们。因为低版本的 JDK 中有很多对应的 Out of swap space bug 存在!

参考资料

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加QQ1群:135430763(2000人群已满),QQ2群:454796847(已满),QQ3群:187424846(已满)。QQ群进群密码:xttblog,想加微信群的朋友,之前的微信号好友已满,请加博主新的微信号:xttblog,备注:“xttblog”,添加博主微信拉你进群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作可添加助理微信进行沟通!

本文原文出处:业余草: » 深入理解 java.lang.OutOfMemoryError: Out of swap space 错误