如果一个tomcat
网络服务器正在运行多个*.war
应用程序,并且其中一个应用程序导致OutOfMemory
异常,则这将关闭整个tomcat服务器。
问题:有可能防止这种情况发生吗?例如,为每个war文件分配最大内存限制,以便仅此应用程序将被关闭(或重新启动)?
答案 0 :(得分:1)
否。
Tomcat在单个JVM中运行,Web应用程序共享内存以及所有其他资源,包括CPU,线程池,网络I / O等。
管理每个Web应用程序内存的最简单解决方案是运行单独的Tomcat实例。假设您相应减少其他资源分配,则此操作的内存开销为几十MB。例如,如果您有一个在线程池中具有200个线程的Tomcat实例,并且将其拆分为4个Tomcat实例(如果您在所有四个实例中总共分配了200个以上的线程),则您将需要更多的内存来容纳额外的线程。 / p>
还请记住,您使用资源的效率会降低。在单个实例中,如果一个Web应用程序的使用高峰,则可以利用其他Web应用程序未使用的资源(例如线程)。如果每个Web应用程序都有其自己的实例,则不会发生。这是您隔离Web应用程序所要付出的代价。