我有一台 Tomcat 服务器,它为许多 webapp 提供服务,每个 webapp 都有许多 servlet。有时,一个 webapp 的单个 servlet 内存不足,然后整个 Tomcat 会崩溃,并出现 Java“内存不足”错误,我不得不重新启动它。
有没有办法隔离 servlet,以便当它内存耗尽时,不会导致所有其他应用程序崩溃?
我目前在 Windows 上运行 Tomcat 7,但我可能很快就会转到 Linux,因此欢迎针对这两个平台的答案。
答案1
没有。您必须:
- 不要让它消耗太多内存
- 给 Tomcat 更多的内存,或者
- 将其安装在 Tomcat 自己的实例中,这样当它崩溃时,它不会带走您的其他 web 应用程序。
答案2
在 Linux 中,我看到 OOM 消息“通常”,我再次强调“通常”指向更大的内存大小。这意味着要么增加 RAM,要么获得更大的交换空间。首选第一个选项。
系统架构也很重要,但据我所知,这通常是工作负载大小的问题。这意味着运行更少的应用程序或产生更少的负载或获取更大的内存。