本机内存分配(mmap)无法映射 12288 字节

本机内存分配(mmap)无法映射 12288 字节

我们正在使用 Apache Camel 从 SQS 中提取数据并进行一些处理并导入数据库。

由于我们需要更高的性能,我们正在对部署在 Apache Tomcat 版本 8 中的 4 个应用程序进行实验,每个应用程序都有 12 条路由,指向部署在单个服务器(64 GB RAM)中的相应 12 个 SQS 队列

每条路由有 500 个线程和 750 最大池大小。总共 4 个应用程序共有 24000 个线程和 36000 最大池大小。

每当我们运行测试时,Tomcat 都会由于以下错误消息意外停止,

Java HotSpot(TM) 64 位服务器 VM 警告:INFO:os::commit_memory(0x00007f3395aef000, 12288, 0) 失败;错误 =“无法分配内存”(errno=12)Java HotSpot(TM) 64 位服务器 VM 警告:# 尝试保护堆栈保护页面失败。# Java 运行时环境没有足够的内存来继续运行。

本机内存分配(mmap)无法映射 12288 字节

提交保留的内存。

但检查服务器的总 RAM 使用情况时发现仅使用了大约 16 到 18 GB。

因此,我们将每条路由的线程大小减少到 250,将最大池大小减少到 500。总共 4 个应用程序共有 12000 个线程,最大池大小为 24000。此时应用程序运行良好,没有任何问题。

Tomcat 中的堆大小:40G

我们不确定为什么在有更多线程时会遇到问题?我们是否需要更改 tomcat 中的任何配置来支持更多线程?

您能帮助我们解决这个问题吗?

相关内容