wrapper java 64_Wrapper配置详解及高级应用

article/2025/10/22 20:37:40

将一个简单的程度如HelloWorld 的应用包装秤Wrapper 服务并不复杂,甚至可以认为非常简单。但是实际项目应用过程中我们的程序一般较庞大,运行环境也较复杂。

通过Wrapper 配置文件的分析与配置进一步了解构建Wrapper 服务需要注意的关键点及重要部分。

首先,打开conf 文件夹下的wrapper.conf配置文件,此配置文件时Wrapper 的主配置文件也是关键配置文件,下面开始一项一项的开始分析。

1.文件编码及子配置文件

文件头部包含了配置文件编码格式,子配置文件等相关信息,如下所示:

#文件编码,每个配置文件起始位置必须指定该文件的编码格式

encoding=UTF-8

# 如果包含配置文件出现问题可以使用debug调试模式,去掉一个"#",格式为#include.debug

#include.debug

# 包含子配置文件,可以是配置信息也可以是许可信息

include ../conf/wrapper-license.conf

include ../conf/wrapper2.conf

# 是否开启许可文件debug模式

wrapper.license.debug=TRUE

通过子配置文件的配置可以使主配置文件关联最多10级子配置,例如:wrapper.conf 包含 wrapper2.conf ,wrapper2.conf 包含wrapper3.conf ..... wrapper9.conf 包含wrapper10.conf,文件结构如下:

wrapper.conf

|-wrapper2.conf

|-wrapper3.conf

.....

|-wrapper9.conf

|-wrapper10.conf

也就是说配置文件嵌套层级最大可达10级,引用一张官方图片可以很好的说明:

a3eadfcb504f16da04a359c7bdfd5a5c.png

如果子配置文件不存在时,那么它将被忽略,不会导致程序运行错误。

2.Wrapper 语言设置

通过这两项的设置可以指定Wrapper 的语言种类,可以在Wrapper 官网下到这些语言包支持,目前不支持中文。

# 指定Wrapper语言,默认使用系统语言

wrapper.lang=en_US

#指定Wrapper 语言资源位置,如果该文件不存在则默认设置为en_US

wrapper.lang.folder=../lang

3.Wrapper Java 相关属性配置

(1)java运行环境设置

# Java 程序配置:

# (1)默认使用PATH环境变量配置信息则使用下列配置形式

wrapper.java.command=java

# (2)如果想单独配置运行程序,则可采用此种配置方式

set.JAVA_HOME=/java/path

wrapper.java.command=%JAVA_HOME%/bin/java

# java程序日志级别

wrapper.java.command.loglevel=INFO

(2)程序入口

# Java Main class,也就是程序入口

#该类需要实现WrapperListener 接口并保证WrapperManager 得到初始化(调用WrapperManager.start(WrapperListener listener, String[] args) 方法)。

wrapper.java.mainclass=com.helloworld.hello.HelloWorld

(3)类库设置

# Java Classpath配置,必须从序号"1"开始,添加新的jar包后序号递增

wrapper.java.classpath.1=../lib/wrapper.jar

wrapper.java.classpath.2=../lib/hello.jar

# Java 类库路径 (Wrapper.DLL 或 libwrapper.so 依赖文件的存放位置)

wrapper.java.library.path.1=../lib

(4)JVM相关配置

# 32/64位选择,true为自动选择

wrapper.java.additional.auto_bits=TRUE

# Java附加参数

wrapper.java.additional.1=

附加参数即为java命令可选参数,如下所示:

-d32 use a 32-bit data model if available

-d64 use a 64-bit data model if available

-server to select the "server" VM

The default VM is server.

-cp

-classpath

A : separated list of directories, JAR archives,

and ZIP archives to search for class files.

-D=

set a system property

-verbose[:class|gc|jni]

enable verbose output

-version print product version and exit

-version:

require the specified version to run

-showversion print product version and continue

-jre-restrict-search | -jre-no-restrict-search

include/exclude user private JREs in the version search

-? -help print this help message

-X print help on non-standard options

-ea[:...|:]

-enableassertions[:...|:]

enable assertions

-da[:...|:]

-disableassertions[:...|:]

disable assertions

-esa | -enablesystemassertions

enable system assertions

-dsa | -disablesystemassertions

disable system assertions

-agentlib:[=]

load native agent library , e.g. -agentlib:hprof

see also, -agentlib:jdwp=help and -agentlib:hprof=help

-agentpath:[=]

load native agent library by full pathname

-javaagent:[=]

load Java programming language agent, see java.lang.instrument

-splash:

show splash screen with specified image

内存大小设置:

# Java Heap 初始化大小(单位:MB)

wrapper.java.initmemory=3

# Java Heap 最大值(单位:MB)

wrapper.java.maxmemory=64

应用程序参数设置:

# 应用程序参数,也就是main函数的String[] args参数值,序号需从"1"开始,例如:

wrapper.app.parameter.1=g21121

wrapper.app.parameter.2=http://286.iteye.com/

在main函数和start方法中添加了参数打印语句来观察参数是否已经传入,代码如下:

package com.helloworld.hello;

import org.tanukisoftware.wrapper.WrapperListener;

import org.tanukisoftware.wrapper.WrapperManager;

public class HelloWorld implements WrapperListener {

public static void main(String[] args) {

// 打印参数

for (String arg : args)

System.out.println(arg);

WrapperManager.start(new HelloWorld(), args);

}

@Override

public void controlEvent(int event) {

System.out.println("controlEvent(" + event + ")");

if ((event == WrapperManager.WRAPPER_CTRL_LOGOFF_EVENT) && (WrapperManager.isLaunchedAsService() || WrapperManager.isIgnoreUserLogoffs())) {

} else {

WrapperManager.stop(0);

}

}

@Override

public Integer start(String[] args) {

// 打印参数

for (String arg : args)

System.out.println(arg);

System.out.println("hello world!");

return null;

}

@Override

public int stop(int exitCode) {

System.out.println("stop(" + exitCode + ")");

return exitCode;

}

}

重新运行服务,结果如下:

root@TFS:/usr/local/wrapper/bin# ./hello console

Running helloWorld...

wrapper | --> Wrapper Started as Console

wrapper | Java Service Wrapper Community Edition 64-bit 3.5.20

wrapper | Copyright (C) 1999-2013 Tanuki Software, Ltd. All Rights Reserved.

wrapper | http://wrapper.tanukisoftware.com

wrapper |

wrapper | Launching a JVM...

jvm 1 | g21121

jvm 1 | http://286.iteye.com/

jvm 1 | WrapperManager: Initializing...

jvm 1 | g21121

jvm 1 | http://286.iteye.com/

jvm 1 | hello world!

jvm 1 | stop(0)

wrapper |

4.Wrapper 日志配置

# 是否显示debug日志

wrapper.debug=TRUE

# 控制台信息输出格式

wrapper.console.format=PM

# 控制台日志级别

wrapper.console.loglevel=INFO

# 日志文件位置及名称

wrapper.logfile=../logs/wrapper.log

# 日志文件输出格式

wrapper.logfile.format=LPTM

# 日志文件日志级别

wrapper.logfile.loglevel=INFO

# 限制日志文件大小,0为不限制,参数:k,m,g等

wrapper.logfile.maxsize=10m

# 限制最大日志文件数,0为不限制

wrapper.logfile.maxfiles=0

# syslog 日志级别

wrapper.syslog.loglevel=NONE

5.Wrapper 基本属性配置

# 允许使用非连续编号的属性,例如:path的序号可以打乱

wrapper.ignore_sequence_gaps=TRUE

# 如果pid文件已经存在则不启动程序

wrapper.pidfile.strict=TRUE

# 控制台启动时显示的标题

wrapper.console.title=------------Wrapper Console------------

6.Wrapper JVM 检查

# 检测JVM中的死锁线程(需要标准版Wrapper)

wrapper.check.deadlock=TRUE

#间隔,单位:秒

wrapper.check.deadlock.interval=10

#出现死锁时处理事件

wrapper.check.deadlock.action=RESTART

#信息输出级别,FULL:全部;SIMPLE:精简;NONE:无;

wrapper.check.deadlock.output=FULL

以下为wrapper.check.deadlock.action的事件类型:

DEBUG :

will cause a debug message to be logged. This is only really useful in helping to understand when the action is fired.

DUMP :

will invoke a thread dump.

GC (Since ver. 3.5.7) :

will invoke a full garbage collection sweep in the JVM. Be aware that doing this frequently can affect performance of the JVM as a full sweep will often cause all threads to freeze for the duration of the GC.

RESTART :

will stop the current JVM and then restart a new invocation.

SHUTDOWN :

will stop the JVM as well as the Wrapper.

USER_ (Professional Edition) :

will cause a user defined event to be fired. This can be either the sending of an email, or the execution of an external system command. The command could be anything from performing clean up operations to raising an SNMP trap.

PAUSE :

will pause the Java application if pausing is enabled and the JVM is running. See the wrapper.pausable property for details.

RESUME :

will resume the Java application if it is in a paused state. This could be used if the JVM is not stopped when paused. See the wrapper.pausable property for details.

SUCCESS (Since ver. 3.5.5) :

will tell the Wrapper to reset its internal failed invocation count and count the current JVM invocation as "successful". This is probably not useful in this context, but here for consistency with other properties.

NONE :

7.内存溢出检测

# 内存溢出检测,Wrapper提供了几种不同的匹配机制

wrapper.filter.trigger.999=wrapper.filter.trigger.*java.lang.OutOfMemoryError

wrapper.filter.allow_wildcards.999=TRUE

wrapper.filter.action.999=NONE

wrapper.filter.trigger.1000=[Loaded java.lang.OutOfMemoryError

wrapper.filter.action.1000=NONE

wrapper.filter.trigger.1001=java.lang.OutOfMemoryError

#wrapper.filter.trigger.1001=Exception in thread "*" java.lang.OutOfMemoryError

#wrapper.filter.allow_wildcards.1001=TRUE

wrapper.filter.action.1001=RESTART

wrapper.filter.message.1001=The JVM has run out of memory.

8.Wrapper Email 通知设置(需要专业版Wrapper)

# 邮件基本信息设置

wrapper.event.default.email.debug=TRUE

#smtp服务器地址

wrapper.event.default.email.smtp.host=

#smtp服务器端口

wrapper.event.default.email.smtp.port=25

#邮件主题

wrapper.event.default.email.subject=[%WRAPPER_HOSTNAME%:%WRAPPER_NAME%:%WRAPPER_EVENT_NAME%] Event Notification

#发件人地址

wrapper.event.default.email.sender=

#收件人地址

wrapper.event.default.email.recipient=

# 指定文件内容

wrapper.event.jvm_restart.email.body=The JVM was restarted.\n\nPlease check on its status.\n

# 邮件日志相关配置

wrapper.event.default.email.attach_log=TRUE

wrapper.event.default.email.maillog.lines=50

wrapper.event.default.email.maillog.format=LPTM

wrapper.event.default.email.maillog.loglevel=INFO

# 触发事件,即当以下事件为true时发送邮件

wrapper.event.wrapper_start.email=TRUE

wrapper.event.jvm_prelaunch.email=TRUE

wrapper.event.jvm_start.email=TRUE

wrapper.event.jvm_started.email=TRUE

wrapper.event.jvm_deadlock.email=TRUE

wrapper.event.jvm_stop.email=TRUE

wrapper.event.jvm_stopped.email=TRUE

wrapper.event.jvm_restart.email=TRUE

wrapper.event.jvm_failed_invocation.email=TRUE

wrapper.event.jvm_max_failed_invocations.email=TRUE

wrapper.event.jvm_kill.email=TRUE

wrapper.event.jvm_killed.email=TRUE

wrapper.event.jvm_unexpected_exit.email=TRUE

wrapper.event.wrapper_stop.email=TRUE

以上是对wrapper.conf配置文件主要属性的介绍,Wrapper更多特性及应用还需要自己去结合文档深入学习,以下是Wrapper官网文档地址:

http://wrapper.tanukisoftware.com/doc/english/properties.html


http://chatgpt.dhexx.cn/article/wdiB5djn.shtml

相关文章

RDP Wrapper

说到要在非Windows Server版本上实现多用户远程桌面连接 ,我们都知道一个大名鼎鼎的软件RDP Wrapper Library,它是开源的,所有秘密作者都没有保留,所有问题全部在GitHub上面写的清清楚楚,在这里感谢这些伟大的人&#…

wrapper后台启动java程序

文章目录 1,下载wrapper2,使用wrapper后台启动java程序2.1,编写java样例程序2.2,配置wrapper2.3,拷贝启动脚本2.4,启动服务 1,下载wrapper 下载地址:https://wrapper.tanukisoftwar…

Java常用类-包装类(Wrapper)简单介绍

目录 前言1、包装类(Wrapper) 前言 本文主要介绍java中的包装类 1、包装类(Wrapper) Java是面向对象的编程语言,但它也包含了8种基本数据类型,这8种基本数据类型不支持面向对象的编程机制,基本数据类型的数据也不具备“对象”的特性&#…

强大的wrapper

最近在看大数据和容器相关的东西,发现有一个模式被反复使用到,关键是被用的很恰当且优雅,并能在这些关键技术中都发挥着至关重要的核心作用。我想你已经猜到了,他就是Eminem——强大的rapper——哦,不对,是…

mybatis-plus中wrapper的用法(详细)

用到了wrapper,ge、le、ne、eq等的用法,及多表查询自写sql整理资料记录一下,以备后续复习。 目录------------(可点击相应目录直接跳转) 一、条件构造器关系介绍 条件构造器关系介绍 : wapper介绍 &…

锚点(anchorPoint)

转载请说明出处,谢谢。 原文出处:点击打开链接 今天研究了一下关于layer的anchorPoint问题。 附图: 原文出处:点击打开链接 位置坐标 position+anchorPoint(左下角0,0原点坐标系)。 要确…

cocos2d-x中的锚点(AnchorPoint)理解

锚点的定义 锚点是指节点在进行形状变换、位置变动时依据的基准点。可以想象为钉在墙上用于固定纸张的小图钉,或者公告栏上用于固定纸张用的围棋状的小磁粒。当对某个节点调用setPosition时,cocos2d-x即会将其锚点移动到相应位置;当对节点进行…

cocos2d-x3.2总结(一)Position和AnchorPoint的关系

当cocos2d-x引擎需要绘图时,就需要Position和AnchorPoint等属性。例如:在创建一个Sprite时,要设置Sprite的Position,而我们常常没有设置AnchorPoint,这是因为精灵的AnchorPoint默认值为(0.5,0.5&#xff09…

Anchor3

这里介绍如何修改 Anchor 的尺寸来提高小目标的检测效果,算法tricks优化小目标检测 修改 Anchor 尺寸 在实际的应用场景中,我们按照 MS COCO 标准中把大小不大于 32x32 或者占原始图片比率不足 0.01 的目标物体定义为一个小目标物体。 在使用 Anchor 的检测算法&…

ios-anchorPoint、position理解

anchorPoint(锚点)是layer的一个属性,下面我们来看看其对view的影响,本文主要通过图片方式展现: 锚点用单位坐标来描述也就是图层的相对坐标。在苹果文档中说明左下是(0,0),右上是(1,1),mac系统…

Anderson‘s pointer analysis

本文是垃圾文章,请直接学习其它资料 南京大学《软件分析》课程08(Pointer Analysis)https://www.cs.cmu.edu/~aldrich/courses/15-819O-13sp/resources/pointer.pdf 指针分析 指针分析是一类特殊的数据流问题,它是其它静态程序分析…

iOS围绕某点缩放或旋转的AnchorPoint的设定

经常会遇到需求,要求手势的缩放或者旋转操作,要求动作变化围绕某一个特定点,或者是两指的中心点,或者是某一个点。 这个问题首先要清晰的知道,iOS各个view的层次关系。特别是,要清除的知道,当前…

彻底理解CALayer的position与anchorPoint

引言 相信初接触到CALayer的人都会遇到以下几个问题: 为什么修改anchorPoint会移动layer的位置? CALayer的position点是哪一点呢? anchorPoint与position有什么关系? 我也迷惑过,找过网上的教程,大部分都是复制粘…

position和anchorPoint

本人录制技术视频地址: https://edu.csdn.net/lecturer/1899 欢迎观看。 一、理论概述 1.简单介绍 CALayer有2个非常重要的属性:position和anchorPoint property CGPoint position; 用来设置CALayer在父层中的位置 以父层的左上角为原点(0, 0) prop…

Ant Design - Anchor

Anchor锚点 此组件的属性有以下几点: 现在给出一份例子 其他属性都很简单就不多说了,主要我遇到的麻烦是 getContainer 属性 锚点是默认body滚动的,所以如果你滚动的区域是body就会看到锚点的小蓝点是会随内容滚动的,但是如果你…

Anchor Point

On default, CCNode’s anchor point is (0, 0), which is at the left-bottom point. CCSprite’s anchor point is (0.5, 0.5), which is at the center. 如果你把一个CCSprite作为child加入到CCNode中,CCNode的anchor point不会对sprite的位置有影响,…

【Cocos2d-x 3.0学习笔记】 AnchorPoint 和Position 关系

先不多说,上两张图片: 解释一下上面图片的意思: 描点就是图片中红点的位置。setAnchorPoint的取值范围0~1,距离设置的是一张图片 setAnchorPoint(Point(0,0))表示在图片左下角, setAnchorPoint(Point(1,1))表示在图片…

iOS开发之layer.frame,layer.anchorPoint,layer.position对frame的影响

最近遇到相关的问题,所以就将这三个属性值,进行了分析和研究,话不多说,直接上代码了,详细的文字描述都在代码中,可以自行查看。 之前还写了一篇文章,也可以同时查看一下: iOS开发之…

anchorPoint

OS开发UI篇—CAlayer层的属性 一、position和anchorPoint 1.简单介绍 CALayer有2个非常重要的属性:position和anchorPoint property CGPoint position; 用来设置CALayer在父层中的位置 以父层的左上角为原点(0, 0) property CGPoint anchorPoint; 称为“定位点”、“…

iOS动画小课堂:定点缩放弹窗(利用锚点anchorPoint进行实现)包含完整demo

文章目录 前言I 基础知识 (CALayer)1.1 anchorPoint1.2 positionII iOS开发中常用的动画(定点缩放弹窗)2.1 核心代码2.2 完整demo源码see also前言 iOS开发中常用的动画(定点缩放弹窗)的应用场景: 会员详情的右侧下拉操作菜单 浏览器的右侧下拉菜单