本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云
最近我是想写一个 JVM 系列,然后全部都发表到公众号里,在公众号里形成一个菜单。方便我的粉丝阅读!
这写这篇文章之前,我在百度里搜索了一下关于 java.lang.OutOfMemoryError: Out of swap space 问题的内容,结果不胜理想。基本上很少有讲清楚的,于是我就谷歌,总结了本文。
java.lang.OutOfMemoryError: Out of swap space 错误,根据自己意思,我们差不多也能看出来是交换空间(swap space,虚拟内存) 不足。
详细的说,就是这个错误是当虚拟机向本地操作系统申请内存失败时抛出的。这和你用完了堆或者持久化中的内存的情况有些不同。这个错误通常是在你的程序已经逼近平台限制的时候产生的。这个信息告诉你的是,你可能已经用光了物理内存以及虚拟内存了。由于虚拟内存通常是用磁盘作为交换分区,因此你最先想到的解决方法可能是先增加交换分区的大小。不过我从没见过一个程序在频繁进行内存交换还能正常运行的,所以这个方法可能不会起到什么作用。
在 JVM 启动的时候,我们可以通过 -Xmx 等参数来限制 JVM 的最大内存。当 JVM 使用的内存总量超过可用的物理内存时,操作系统就会用到虚拟内存。
看过前面文章的也都知道,我一直在强调任何 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)!可加作者微信号:xttblog2。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!
本文原文出处:业余草: » 深入理解 java.lang.OutOfMemoryError: Out of swap space 错误