Java service wrapper可以将java程序像业务一样部署到Linux/Windows平台,Wrapper进程类似一个daemon,负责监听java程序的状态,
当java程序出现异常崩溃(如JVM崩溃)时,对java程序的业务进行重启,并记录日志等。
【配置方法】:
1、下载指定的程序包,注意OS平台,32bit/64bit,并区分standard与community版本,其中后者是免费的,但没有deadlock detection功能
2、JSW解压后有6个文件夹,分别是
bin:可执行程序,包括一个demo,一个test,以及wrapper的核心程序
demo用来模拟app在wrapper上遇到异常时的场景;test用来展示wrapper的功能集
conf:配置文件,其中wrapper.conf异常重要,使用wrapper主要修改该文件
doc:文档,忽略
lib:libwrapper.so以及wrapper.jar是必须的两个文件,在windows下可能是wrapper.dll
logs:日志文件的路径
src: src/bin/ 路径下的 sh.script.in 是关键的脚本,上述bin中的wrapper可执行文件,需要通过该脚本调用才能运行
3、可以直接在JSW现成的目录结构下部署,但一般来说,每个项目都有自己的目录结构,因此需要根据实际情况,调整 wrapper.conf 以及
sh.script.in 中跟路径相关的配置。
一种比较简单的方式,是在项目工程中分别创建bin,conf,lib,logs 4个文件夹:
bin:拷贝/bin/wrapper到此目录下
conf:拷贝/conf/wrapper.conf到此目录下
lib:拷贝libwrapper.so以及wrapper.jar到此目录下,并将用户程序的jar包也放在这里,例如customTest.jar
logs:不需要做处理
4、如果上述各文件夹的相对路径没有改变,可不改变 sh.script.in 脚本
# Application
APP_NAME="@app.name@"
APP_LONG_NAME="@app.long.name@"
# Wrapper
WRAPPER_CMD="./wrapper"
WRAPPER_CONF="../conf/wrapper.conf"
5、重点在 wrapper.conf 配置文件
5.1 wrapper.java.mainclass=org.tanukisoftware.wrapper.test.Main
改为:wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp
使用 WrapperSimpleApp来集成用户程序,是JSW官网最推荐的方式,也比较简单,不需要额外的编码,只需要把用户程序的入口作为
参数传给SimpleApp即可,wrapper通过SimpleApp调用用户进程。
链接如下:
http://wrapper.tanukisoftware.com/doc/english/integrate.html#method1
5.2 添加所依赖的jar包,包括用户程序的jar包
# Java Classpath (include wrapper.jar) Add class path elements as
# needed starting from 1
wrapper.java.classpath.1=../lib/wrappertest.jar
wrapper.java.classpath.2=../lib/wrapper.jar
5.3 添加库文件的搜索路径
# Java Library Path (location of Wrapper.DLL or libwrapper.so)
wrapper.java.library.path.1=../lib
5.4 设置JVM的堆大小
# Initial Java Heap Size (in MB)
#wrapper.java.initmemory=3
# Maximum Java Heap Size (in MB)
#wrapper.java.maxmemory=64
5.5 指定用户的程序入口
# Application parameters. Add parameters as needed starting from 1
wrapper.app.parameter.1=com.test.ServerMain 【程序入口的类】
wrapper.app.parameter.1=xxx
5.6 指定是否打开wrapper的debug信息,默认是关闭的
# Enables Debug output from the Wrapper.
# wrapper.debug=TRUE
5.6 指定logfile,一般保持默认即可
# Log file to use for wrapper output logging.
wrapper.logfile=../logs/wrapper.log
5.7 设置日志文件的单个大小限制,以及个数限制
# Maximum size that the log file will be allowed to grow to before
# the log is rolled. Size is specified in bytes. The default value
# of 0, disables log rolling. May abbreviate with the 'k' (kb) or
# 'm' (mb) suffix. For example: 10m = 10 megabytes.
wrapper.logfile.maxsize=0
# Maximum number of rolled log files which will be allowed before old
# files are deleted. The default value of 0 implies no limit.
wrapper.logfile.maxfiles=0
对于community版本来说,其它都可以保持不变。
【使用】
1、启动
执行 ./sh.script.in start 启动程序
执行 ./sh.script.in stop 终止程序
其它的参数可以参考manual,如果打开了wrapper的debug信息,则wrapper的启动信息也会打到 ./conf/wrapper.conf中,可以用来定位
wrapper的启动错误,当用户程序可正常启动后,建议关闭wrapper的debug信息,避免干扰。
2、wrapper启动后会在command line界面显示用户进程的进程pid,kill -3 pid,向进程发一个SIGQUIT,可以触发JVM打出全部调用栈,在定位
deadlock的时候比较好用。