因此,我设置了一些 shell 脚本来自动将新war
文件部署到 tomcat 服务器。我调用 shellscript 来停止 tomcat ( shutdown.sh
),然后终止catalina
PID,但我注意到这需要大约一分钟才能终止进程,并且当我的启动脚本被调用时,进程仍在运行。在我的启动脚本中,我有一个条件,即只有在 tomcat 未运行时才会启动 tomcat。由于旧进程仍处于活动状态,如果我保留此逻辑,则不会重新启动 tomcat。我可以随时删除该条件,但我不确定两个 tomcat 同时运行会发生什么,即使只运行几秒钟。
我的问题是,这是否kill -9
会使进程更快终止?现在我只是使用kill
无信号。我读到它基本上告诉进程立即终止,如果我立即终止 tomcat,我有什么需要担心的吗?(可能是堆空间没有正确释放或类似情况)
万分感谢!
答案1
堆空间将得到正确释放,没有问题。但是,如果您的应用程序需要一些时间才能关闭,它们可能会进行一些数据库清理工作 - 例如清空缓冲区等。这可能是您需要关注的。
我认为依赖应用程序需要较长的关机时间是一种不好的做法,因为断电时它也没有那么长的时间,而且您不能就这样留下一个不一致的系统。考虑kill -9
像断电一样,只针对该单个进程:操作系统将无条件终止该进程,而没有任何机会清理应用程序级数据(例如刷新缓存)。不用担心操作系统:一旦终止,它将回收该进程分配的资源。