我是靠谱客的博主 精明路灯,这篇文章主要介绍Java应用优雅启停执行步骤实践停止应用1 Web应用将HTTP流量切走2 触发停止应用的通知3 收到停止应用的通知后,应用内执行如下流程4 shell脚本轮训,检测应用绑定的JMX端口是否存在5 超过指定时间,强制kill启动应用1 检测进程是否存在2 备份out文件3 调用启动应用的命令4 shell脚本轮训,检测应用绑定的业务端口是否存在5 访问指定url,触发应用的预热操作6 Web应用将HTTP流量切入7 超过指定时间,发出告警,现在分享给大家,希望可以做个参考。

停止应用


1 Web应用将HTTP流量切走

如果是Web应用,需要先借助工具或者命令,将登记在Nginx中的转发信息临时移除,确保不再有新的流量来访问将要停止的应用。

2 触发停止应用的通知

2.1 方式1-执行kill -2

发送进程停止信号,Java应用中通过Runtime.getRuntime().addShutdownHook注册回调,用于运行在进程退出前需要执行的逻辑。由于addShutdownHook可以注册多个回调,调用顺序并不明确,所以不是最佳方案,仅供参考。

2.2 方式2-通过访问指定url触发停止应用的操作

将应用改造为SpringBoot方式的应用,内置启动触发shutdown的EndPoint,其实就是提供一个指定的url,通过curl命令访问该url,然后在代码中运行在进程退出之前需要执行的逻辑。不是SpringBoot方式,只要是Web应用都可以这样做,注意这个url应该限制允许本地127.0.0.1的ip访问,且需要加上账号密码的鉴权限制,建议也限制仅允许POST方式访问。

举个例子,执行停止进程之前操作

output=$(curl -vvv -u ${USER}:${PASS} -X POST http://127.0.0.1:${SYS_PORT}${CONTEXT_PATH}/actuator/shutdown
echo "response is ${output}"

3 收到停止应用的通知后,应用内执行如下流程

3.1 关闭Spring Context之前,优先执行的操作

3.1.1 调用中间件停止监听的方法

根据应用中所使用的的中间件,调用相应停止监听的方法

3.1.2 调用内置Tomcat的停止连接方法

connector.pause();

3.1.3 调用其他按需实现的业务个性操作

比如某些重要的线程池需要提前执行shutdown并等待完全关闭,则需要逐个调用shutdonw方法。

如果有重要的定时任务在运行,比如跑批操作,需要自行实现优雅的stop或shutdown,便于进程重新启动后自动断点续作。

3.2 执行Spring ApplicationContext的close方法

context.close();

3.3 按需执行其他收尾工作

4 shell脚本轮训,检测应用绑定的JMX端口是否存在

如果端口存在,说明进程没有退出,shell sleep一秒,继续轮训

5 超过指定时间,强制kill

轮训检测超过指定时间,例如90s,进程仍未正常退出,则执行kill -9,强制终止进程,此方式为兜底方案,如果执行到此方式,建议排查进程不能及时终止的原因。

启动应用


1 检测进程是否存在

进程已经存在情况下,按照前面的流程先进性优雅的停止。

2 备份out文件

应用一般将标准输出流写到out文件,默认out文件没有按天滚动的机制,不停的追加,会导致文件越来越大,有些甚至几G甚至几十G,影响性能。因此需要将out文件重命名成带时间戳的备份文件,对于超过指定时间的备份out文件(比如超过3个月)自动删除。

3 调用启动应用的命令

4 shell脚本轮训,检测应用绑定的业务端口是否存在

如果端口存在,说明进程已经启动,否则shell sleep一秒,继续轮询。

5 访问指定url,触发应用的预热操作

轮询检测进程已经正常绑定服务端口,则curl访问指定url,触发应用加载缓存等预热操作,然后等待一定时间,比如5s

6 Web应用将HTTP流量切入

如果是Web应用,需要借助工具或者命令,将登记在Nginx中的转发信息进行恢复,确保有新的流量来访问已经就绪的应用。

7 超过指定时间,发出告警

轮训检测超过指定时间,比如150s,进程仍未正常绑定服务端口,则需要输出告警信息,用于监控分析。

最后

以上就是精明路灯最近收集整理的关于Java应用优雅启停执行步骤实践停止应用1 Web应用将HTTP流量切走2 触发停止应用的通知3 收到停止应用的通知后,应用内执行如下流程4 shell脚本轮训,检测应用绑定的JMX端口是否存在5 超过指定时间,强制kill启动应用1 检测进程是否存在2 备份out文件3 调用启动应用的命令4 shell脚本轮训,检测应用绑定的业务端口是否存在5 访问指定url,触发应用的预热操作6 Web应用将HTTP流量切入7 超过指定时间,发出告警的全部内容,更多相关Java应用优雅启停执行步骤实践停止应用1内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(113)

评论列表共有 0 条评论

立即
投稿
返回
顶部