概述
停止应用
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 Web应用将HTTP流量切走2 触发停止应用的通知3 收到停止应用的通知后,应用内执行如下流程4 shell脚本轮训,检测应用绑定的JMX端口是否存在5 超过指定时间,强制kill启动应用1 检测进程是否存在2 备份out文件3 调用启动应用的命令4 shell脚本轮训,检测应用绑定的业务端口是否存在5 访问指定url,触发应用的预热操作6 Web应用将HTTP流量切入7 超过指定时间,发出告警所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复