Java Service Wrapper 详解

JSW介绍

Java Service Wrapper(JSW) 可用于将Java后台程序包装成一个后台服务运行。除此以外,JSW还可以在你的Java程序挂掉以后,自动帮你把服务再次拉起,相当于提供了一个守护进程的功能。它的一个主要目标就是,单点服务做到尽可能高可靠,挂了之后第一时间帮你把它拉起来!这样,能够最大化降低运维成本,让你不用半夜提心吊胆服务挂掉起不来,让你可以第二天妥妥当当地到公司再解决服务挂掉的问题。

除了Window和Linux,Java Service Wrapper 还支持其他平台。此外,Java Service Wrapper分为社区版和企业版,企业版的功能更加强大,但是要收费。目前一般使用的都是社区版,免费并且开源。

特性列举

  • 多平台支持
  • 简单的安装步骤,即可将Java程序当成后台进程方式运行
  • Java服务高可靠,服务挂了自动拉起
  • 无需编写任何脚步,灵活的配置,可定制化JSW的配置和JVM(你的Java服务)的配置
  • Log功能(针对Java标准控制台输出)

错误检测

  • 检测应用Crash
  • 检测应用死锁
  • 检测应用内存溢出
  • 检测应用僵死(JVM)

JVM Hang 的检测原理

上面说到,JSW充当我们Java服务的守护进程,当我们的服务挂掉以后,JSW能够自动感知,并且将其拉起(RESTART,当然可以选择在挂掉以后执行其他动作,后面章节会讲到);当JVM hung住时间太长,也会将服务重启。那么,它是怎么办到的呢?

JSW两个概念: JSW守护进程和wrapper,守护进程用来守护我们的应用程序,在应用程序挂掉的时候将其拉起;而wrapper实际上就是在我们的应用程序上面包装了一层。JSW守护进程会开启一个ServerSocket监听端口(服务端);而对于wrapper,内部会开启一个socket(客户端),连接到守护进程的serversocket监听端口上。守护进程在wrapper连接上自己以后,就会定期地发送ping包(其内部定义的数据包格式)给wrapper,wrapper收到ping包以后,会返回一个包,告知守护进程自己是OK的。若守护进程在一定时间内没有收到wrapper ping包的返回,则认为目标jvm,即我们的应用程序是hang住了。

给一个具体的图示:

使用方式

使用方式参考官方介绍,另外,对于使用maven构建的项目,还可以通过appassember插件在构建的时候集成JSW,参考appassember-maven-plugin usage-jsw

重要的配置参数

所有参数可以在此处查看

wrapper.ping.interval

配置ping JVM的间隔时间,默认为5s

wrapper.ping.timeout

配置ping JVM的超时时间,单位为秒,默认为30s,表示30s如果ping JVM没有收到响应,则认为JVM此时hung住,需要执行响应的动作,动作取决于wrapper.ping.timeout.action的指定

wrapper.ping.timeout.action

设置当ping JVM timeout以后执行的动作,默认动作是RESTART,表示会重启应用

所有action:

  • DEBUG : 打印debug信息,没什么卵用 (Since ver. 3.5.0)
  • DUMP : 触发thread dump (Since ver. 3.3.6)
  • GC : 触发一次full gc (Since ver. 3.5.7)
  • RESTART : 重启应用
  • SHUTDOWN : 停掉应用
  • USER_< n > : 触发一个用户自定义事件 (Since ver. 3.5.0, Professional Edition)
  • PAUSE : 如果应用程序接受暂停操作,则暂停应用程序(没搞懂) (Since ver. 3.5.0)
  • RESUME : 继续运行暂停的应用程序 (Since ver. 3.5.0)
  • SUCCESS : ?(没搞懂) (Since ver. 3.5.5)
  • NONE : 什么都不做

【重要】可以配置多个action,将会在ping timeout后触发这些action,eg:

wrapper.ping.timeout.action=DUMP,RESTART

注意,如果JVM真的已经挂了,那么GC和DUMP动作将不会进行

你可能感兴趣的:(java.基础)