java - 如何防止tomcat中的OutOfMemory异常(限制每个war文件的内存)?
问题描述
如果一个tomcat
网络服务器正在运行多个*.war
应用程序,并且其中一个应用程序导致OutOfMemory
异常,这将关闭整个 tomcat 服务器。
问题:是否可以防止这种情况发生?例如为每个war文件分配一个最大内存限制,这样只有这个应用程序会被关闭(或重新启动)?
解决方案
不。
Tomcat 在单个 JVM 中运行,Web 应用程序共享内存以及所有其他资源,包括 CPU、线程池、网络 I/O 等。
管理每个 Web 应用程序的内存的最简单解决方案是运行单独的 Tomcat 实例。假设您相应地减少其他资源分配,这样做的内存开销是几十 MB。例如,如果您在线程池中有一个具有 200 个线程的 Tomcat 实例,并且如果您在所有四个实例中分配总共超过 200 个线程,那么您将其拆分为 4 个 Tomcat 实例,那么您将需要更多内存用于额外的线程。
还要记住,您使用资源的效率会降低。在单个实例中,如果一个 Web 应用程序的使用量激增,它可以利用其他 Web 应用程序未使用的资源(例如线程)。如果每个 Web 应用程序都有自己的实例,则不会发生这种情况。这是您为隔离 Web 应用程序所付出的代价。
推荐阅读
- c++ - Arduino新手。“随机”值在重置时重复
- python - Discord.py 辅助功能不执行文本
- ajax - 我想检查 Ajax 表单提交进度消息
- c - 什么是_ALPHA_宏?(windows设备驱动)
- libgdx - LIBGDX - 如何摆脱渐变背景上的条带效应?
- html - 防止按Enter在Angular4中创建新行
- excel - 如何在excel上手动拼凑分数
- python - 无法创建着色器缓存条目:ChromeDriver Chrome 和 Selenium 出现 -2 错误
- back-button - 如何不允许使用手机后退按钮转到上一页
- c# - 带有 IF 语句的 LINQ 排序集合