主要观点:OutOfMemoryError 不是因为堆内存不足,而是由过多线程创建、本地内存不足、系统资源限制等原因导致,可通过调整 Java 和 Linux 参数来解决。
关键信息:
- Java 方面:可通过减少堆大小、使用 XSS 参数减少线程栈大小、减少元空间等内存空间来给本地内存创建线程留出空间。
- Linux 方面:可检查现有进程并终止不必要的,调整 threads-max 和 ulimit -u 参数,手动或自动清除缓存以增加可用内存,调整“/proc/sys/vm/swappiness”参数以平衡内存和交换空间。
重要细节: - Java 中减少堆大小,设置低内存值的最小堆大小可减少堆占用内存;使用 XSS 参数减少每个线程的内存分配。
- Linux 中查看 threads-max 和 ulimit -u 的当前值,增加 threads-max 可创建更多线程,增加 ulimit -u 可间接创建更多线程;通过 free -h 命令可确认可用内存和交换使用情况;手动清除缓存可使用 echo 命令;自动清除缓存可调整“/proc/sys/vm/swappiness”参数,调整其值可影响内存和交换空间的使用。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。