wrapper在java应用中的bug

来源:互联网 发布:淘宝怎样进闲鱼 编辑:程序博客网 时间:2024/05/20 16:42

先介绍下wrapper是个什么东西,下面的简单解释是直接Google出来的:

Java Service Wrapper可以把Java应用程序安装成一个Windows NT服务或Unix Daemon.它同时还为应用程序提供日记功能,灵活的配置,可靠的运行性能,按需求重新启动,简化应用程序的安装等

去年的java项目用了这个东西,在入口类使用接口WrapperListener,继承了WrapperListenerstart(),stop(),在项目外层指定入口类,wrapper会通过start()启动虚拟机,这里有些东西要弄清楚。

通过wrapper启动服务的时候,一共是启动了两个进程,一个wrapper服务,一个java虚拟机服务。

wrapper通过轮询的方式询问java虚拟机,以保证服务正常。问题就出在这里,java虚拟机做GC的时候,所有的线程会被挂起,包括响应轮询的线程。在默认的配置里面没有设置轮询超时时间的项,默认是3s。如果3sgc还没完毕则会使得轮询超时,wrapper会认为服务不正常,自动调用stop();start();重启java虚拟机服务。

这个问题必须显式的配置wrapper.ping.timeout和wrapper.ping.interval,一个是超时时间,一个是轮询间隔时间。相关的内容可以在官网看到

http://wrapper.tanukisoftware.com/doc/english/prop-ping-timeout.html 

http://wrapper.tanukisoftware.com/doc/english/prop-ping-interval.html 

原创粉丝点击