分析“java.lang.OutOfMemoryError: Failed to create a thread”错误

主要观点: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”参数,调整其值可影响内存和交换空间的使用。
阅读 5
0 条评论