![当没有请求时可以将 Tomcat 离线吗?](https://linux22.com/image/795918/%E5%BD%93%E6%B2%A1%E6%9C%89%E8%AF%B7%E6%B1%82%E6%97%B6%E5%8F%AF%E4%BB%A5%E5%B0%86%20Tomcat%20%E7%A6%BB%E7%BA%BF%E5%90%97%EF%BC%9F.png)
我一直在 Ubuntu Server 上使用 Tomcat 7 来建立一个小型网站。但是服务器上还有其他进程在运行,我认为 Tomcat 的 CPU 和内存负载都很高。因此,我很好奇在没有响应时是否可以将 Tomcat 服务器置于睡眠模式。有没有办法在服务器上自动执行此操作,或者有其他 servlet 容器可以做到这一点?
答案1
很抱歉,这个答案可能是您所期望的,但是:
当 Tomcat 没有收到任何请求时,它就无事可做,因此不会消耗任何 CPU 周期。如果您观察到 Tomcat 在未收到任何请求时 CPU 使用率过高,则一定出了问题。
而且,当 Tomcat 长时间没有处理请求时,如果你的 Ubuntu 系统需要内存,它会自动将 Tomcat 使用的内存放在磁盘上:这种机制称为交换. 使用以下命令检查你的 Ubuntu 机器上有多少交换空间
$ free
total used free shared buffers cached
Mem: 7858068 7391512 466556 0 114304 2853220
-/+ buffers/cache: 4423988 3434080
Swap: 2101244 219372 1881872
如果您没有交换分区,我强烈建议您创建一个。因为当系统需要内存时,将休眠应用程序的内存放入磁盘的这种系统行为是默认行为,并且适用于任何“长时间”不执行任何操作的应用程序。
答案2
我担心的不是 tomcat,而是加载 CPU 和内存的战争:)
Tomcat 本身是一个很小的程序,非常快而且轻量级。如果您想查看确切的数字,可以下载 tomcat 并检查其影响。另一方面(我不得不提,尽管您可能知道)带有应用程序的 war 文件由 tomcat 处理,因此它们不会产生额外的进程,换句话说,所有 war 和 tomcat 本身都在同一个 JVM 中运行。
因此,正确的解决方案是了解您的 war 为何会加载服务器。从技术上讲,如果 tomcat 不处理请求,那么它应该只是在 war 中定义的某种后台作业,可能是一些异步任务等等,我想您已经知道了。然后重新分解 war 文件。
您所建议的不是一种常见的做法,从技术上来说也不是可行的方法。
希望这可以帮助
答案3
如果您不需要该服务,您应该停止它。