1. 程式人生 > >【wrapper】weapper 配置詳解消化

【wrapper】weapper 配置詳解消化

       將一個簡單的程度如HelloWorld 的應用包裝秤Wrapper 服務並不複雜,甚至可以認為非常簡單。但是實際專案應用過程中我們的程式一般較龐大,執行環境也較複雜。

        通過Wrapper 配置檔案的分析與配置進一步瞭解構建Wrapper 服務需要注意的關鍵點及重要部分。

首先,開啟conf 資料夾下的wrapper.conf配置檔案,此配置檔案時Wrapper 的主配置檔案也是關鍵配置檔案,下面開始一項一項的開始分析。

 

        1.檔案編碼及子配置檔案
        檔案頭部包含了配置檔案編碼格式,子配置檔案等相關資訊,如下所示:

Xml程式碼

 收藏程式碼

  1. #檔案編碼,每個配置檔案起始位置必須指定該檔案的編碼格式  
  2. encoding=UTF-8  
  3.   
  4. # 如果包含配置檔案出現問題可以使用debug除錯模式,去掉一個"#",格式為#include.debug  
  5. #include.debug  
  6.   
  7. # 包含子配置檔案,可以是配置資訊也可以是許可資訊  
  8. include ../conf/wrapper-license.conf  
  9. include ../conf/wrapper2.conf  
  10.   
  11. # 是否開啟許可檔案debug模式  
  12. wrapper.license.debug=TRUE  

 

 

        通過子配置檔案的配置可以使主配置檔案關聯最多10級子配置,例如:wrapper.conf 包含 wrapper2.conf ,wrapper2.conf 包含wrapper3.conf ..... wrapper9.conf 包含wrapper10.conf,檔案結構如下:

Xml程式碼

 收藏程式碼

  1. wrapper.conf  
  2.     |-wrapper2.conf  
  3.         |-wrapper3.conf  
  4.               .....  
  5.             |-wrapper9.conf  
  6.                 |-wrapper10.conf  

 

        也就是說配置檔案巢狀層級最大可達10級,引用一張官方圖片可以很好的說明:



        如果子配置檔案不存在時,那麼它將被忽略,不會導致程式執行錯誤。

 

 

        2.Wrapper 語言設定

        通過這兩項的設定可以指定Wrapper 的語言種類,可以在Wrapper 官網下到這些語言包支援,目前不支援中文。

Xml程式碼

 收藏程式碼

  1. # 指定Wrapper語言,預設使用系統語言  
  2. wrapper.lang=en_US  
  3.   
  4. #指定Wrapper 語言資源位置,如果該檔案不存在則預設設定為en_US  
  5. wrapper.lang.folder=../lang  

 

 

        3.Wrapper Java 相關屬性配置

        (1)java執行環境設定

Xml程式碼

 收藏程式碼

  1. # Java 程式配置:  
  2. #   (1)預設使用PATH環境變數配置資訊則使用下列配置形式  
  3. wrapper.java.command=java  
  4.   
  5. #   (2)如果想單獨配置執行程式,則可採用此種配置方式  
  6. set.JAVA_HOME=/java/path  
  7. wrapper.java.command=%JAVA_HOME%/bin/java  
  8.   
  9. # java程式日誌級別  
  10. wrapper.java.command.loglevel=INFO  

 

        (2)程式入口

Xml程式碼

 收藏程式碼

  1. # Java Main class,也就是程式入口    
  2. #該類需要實現WrapperListener 介面並保證WrapperManager 得到初始化(呼叫WrapperManager.start(WrapperListener listener, String[] args) 方法)。  
  3. wrapper.java.mainclass=com.helloworld.hello.HelloWorld  

 

        (3)類庫設定

Xml程式碼

 收藏程式碼

  1. # Java Classpath配置,必須從序號"1"開始,新增新的jar包後序號遞增  
  2. wrapper.java.classpath.1=../lib/wrapper.jar  
  3. wrapper.java.classpath.2=../lib/hello.jar  
  4.   
  5. # Java 類庫路徑 (Wrapper.DLL 或 libwrapper.so 依賴檔案的存放位置)  
  6. wrapper.java.library.path.1=../lib  

 

        (4)JVM相關配置

Xml程式碼

 收藏程式碼

  1. # 32/64位選擇,true為自動選擇  
  2. wrapper.java.additional.auto_bits=TRUE  
  3.   
  4. # Java附加引數  
  5. wrapper.java.additional.1=  

 

        附加引數即為java命令可選引數,如下所示: 

Params程式碼

 收藏程式碼

  1. -d32          use a 32-bit data model if available  
  2.   
  3. -d64          use a 64-bit data model if available  
  4. -server   to select the "server" VM  
  5.       The default VM is server.  
  6.         
  7. -cp <class search path of directories and zip/jar files>  
  8. -classpath <class search path of directories and zip/jar files>  
  9.       A : separated list of directories, JAR archives,  
  10.       and ZIP archives to search for class files.  
  11. -D<name>=<value>  
  12.       set a system property  
  13. -verbose[:class|gc|jni]  
  14.       enable verbose output  
  15. -version      print product version and exit  
  16. -version:<value>  
  17.       require the specified version to run  
  18. -showversion  print product version and continue  
  19. -jre-restrict-search | -jre-no-restrict-search  
  20.       include/exclude user private JREs in the version search  
  21. -? -help      print this help message  
  22. -X            print help on non-standard options  
  23. -ea[:<packagename>...|:<classname>]  
  24. -enableassertions[:<packagename>...|:<classname>]  
  25.       enable assertions  
  26. -da[:<packagename>...|:<classname>]  
  27. -disableassertions[:<packagename>...|:<classname>]  
  28.       disable assertions  
  29. -esa | -enablesystemassertions  
  30.       enable system assertions  
  31. -dsa | -disablesystemassertions  
  32.       disable system assertions  
  33. -agentlib:<libname>[=<options>]  
  34.       load native agent library <libname>, e.g. -agentlib:hprof  
  35.         see also, -agentlib:jdwp=help and -agentlib:hprof=help  
  36. -agentpath:<pathname>[=<options>]  
  37.       load native agent library by full pathname  
  38. -javaagent:<jarpath>[=<options>]  
  39.       load Java programming language agent, see java.lang.instrument  
  40. -splash:<imagepath>  
  41.       show splash screen with specified image  

 

        記憶體大小設定:

Xml程式碼

 收藏程式碼

  1. # Java Heap 初始化大小(單位:MB)  
  2. wrapper.java.initmemory=3  
  3.   
  4. # Java Heap 最大值(單位:MB)  
  5. wrapper.java.maxmemory=64  

 

        應用程式引數設定:

Xml程式碼

 收藏程式碼

  1. # 應用程式引數,也就是main函式的String[] args引數值,序號需從"1"開始,例如:  
  2. wrapper.app.parameter.1=g21121  
  3. wrapper.app.parameter.2=http://286.iteye.com/  

  

        在main函式和start方法中添加了引數列印語句來觀察引數是否已經傳入,程式碼如下:

Java程式碼

 收藏程式碼

  1. package com.helloworld.hello;  
  2.   
  3. import org.tanukisoftware.wrapper.WrapperListener;  
  4. import org.tanukisoftware.wrapper.WrapperManager;  
  5.   
  6. public class HelloWorld implements WrapperListener {  
  7.   
  8.     public static void main(String[] args) {  
  9.         // 列印引數  
  10.         for (String arg : args)  
  11.             System.out.println(arg);  
  12.         WrapperManager.start(new HelloWorld(), args);  
  13.     }  
  14.   
  15.     @Override  
  16.     public void controlEvent(int event) {  
  17.         System.out.println("controlEvent(" + event + ")");  
  18.         if ((event == WrapperManager.WRAPPER_CTRL_LOGOFF_EVENT) && (WrapperManager.isLaunchedAsService() || WrapperManager.isIgnoreUserLogoffs())) {  
  19.         } else {  
  20.             WrapperManager.stop(0);  
  21.         }  
  22.     }  
  23.   
  24.     @Override  
  25.     public Integer start(String[] args) {  
  26.         // 列印引數  
  27.         for (String arg : args)  
  28.             System.out.println(arg);  
  29.         System.out.println("hello world!");  
  30.         return null;  
  31.     }  
  32.   
  33.     @Override  
  34.     public int stop(int exitCode) {  
  35.         System.out.println("stop(" + exitCode + ")");  
  36.         return exitCode;  
  37.     }  
  38.   
  39. }  

 

        重新執行服務,結果如下:

Result程式碼

 收藏程式碼

  1. [email protected]:/usr/local/wrapper/bin# ./hello console  
  2. Running helloWorld...  
  3. wrapper  | --> Wrapper Started as Console  
  4. wrapper  | Java Service Wrapper Community Edition 64-bit 3.5.20  
  5. wrapper  |   Copyright (C) 1999-2013 Tanuki Software, Ltd. All Rights Reserved.  
  6. wrapper  |     http://wrapper.tanukisoftware.com  
  7. wrapper  |   
  8. wrapper  | Launching a JVM...  
  9. jvm 1    | g21121  
  10. jvm 1    | http://286.iteye.com/  
  11. jvm 1    | WrapperManager: Initializing...  
  12. jvm 1    | g21121  
  13. jvm 1    | http://286.iteye.com/  
  14. jvm 1    | hello world!  
  15. jvm 1    | stop(0)  
  16. wrapper  | <-- Wrapper Stopped  

 

 

        4.Wrapper 日誌配置

Xml程式碼

 收藏程式碼

  1. # 是否顯示debug日誌  
  2. wrapper.debug=TRUE  
  3.   
  4. # 控制檯資訊輸出格式  
  5. wrapper.console.format=PM  
  6.   
  7. # 控制檯日誌級別  
  8. wrapper.console.loglevel=INFO  
  9.   
  10. # 日誌檔案位置及名稱  
  11. wrapper.logfile=../logs/wrapper.log  
  12.   
  13. # 日誌檔案輸出格式  
  14. wrapper.logfile.format=LPTM  
  15.   
  16. # 日誌檔案日誌級別  
  17. wrapper.logfile.loglevel=INFO  
  18.   
  19. # 限制日誌檔案大小,0為不限制,引數:k,m,g等  
  20. wrapper.logfile.maxsize=10m  
  21.   
  22. # 限制最大日誌檔案數,0為不限制  
  23. wrapper.logfile.maxfiles=0  
  24.   
  25. # syslog 日誌級別  
  26. wrapper.syslog.loglevel=NONE  

 

 

        5.Wrapper 基本屬性配置

Xml程式碼

 收藏程式碼

  1. # 允許使用非連續編號的屬性,例如:path的序號可以打亂  
  2. wrapper.ignore_sequence_gaps=TRUE  
  3.   
  4. # 如果pid檔案已經存在則不啟動程式  
  5. wrapper.pidfile.strict=TRUE  
  6.   
  7. # 控制檯啟動時顯示的標題  
  8. wrapper.console.title=------------Wrapper Console------------  

 

 

        6.Wrapper JVM 檢查

Xml程式碼

 收藏程式碼

  1. # 檢測JVM中的死鎖執行緒(需要標準版Wrapper)  
  2. wrapper.check.deadlock=TRUE  
  3. #間隔,單位:秒  
  4. wrapper.check.deadlock.interval=10  
  5. #出現死鎖時處理事件  
  6. wrapper.check.deadlock.action=RESTART  
  7. #資訊輸出級別,FULL:全部;SIMPLE:精簡;NONE:無;  
  8. wrapper.check.deadlock.output=FULL  

 

        以下為wrapper.check.deadlock.action的事件型別:
Xml程式碼

 收藏程式碼

  1. DEBUG :  
  2.     will cause a debug message to be logged. This is only really useful in helping to understand when the action is fired.  
  3. DUMP :  
  4.     will invoke a thread dump.  
  5. GC (Since ver. 3.5.7) :  
  6.     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.  
  7. RESTART :  
  8.     will stop the current JVM and then restart a new invocation.  
  9. SHUTDOWN :  
  10.     will stop the JVM as well as the Wrapper.  
  11. USER_<n> (Professional Edition) :  
  12.     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.  
  13. PAUSE :  
  14.     will pause the Java application if pausing is enabled and the JVM is running. See the wrapper.pausable property for details.  
  15. RESUME :  
  16.     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.  
  17. SUCCESS (Since ver. 3.5.5) :  
  18.     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.  
  19. NONE :  

 

 

        7.記憶體溢位檢測

Xml程式碼

 收藏程式碼

  1. # 記憶體溢位檢測,Wrapper提供了幾種不同的匹配機制  
  2. wrapperwrapper.filter.trigger.999=wrapper.filter.trigger.*java.lang.OutOfMemoryError  
  3. wrapper.filter.allow_wildcards.999=TRUE  
  4. wrapper.filter.action.999=NONE  
  5. wrapper.filter.trigger.1000=[Loaded java.lang.OutOfMemoryError  
  6. wrapper.filter.action.1000=NONE  
  7. wrapper.filter.trigger.1001=java.lang.OutOfMemoryError  
  8. #wrapper.filter.trigger.1001=Exception in thread "*" java.lang.OutOfMemoryError  
  9. #wrapper.filter.allow_wildcards.1001=TRUE  
  10. wrapper.filter.action.1001=RESTART  
  11. wrapper.filter.message.1001=The JVM has run out of memory.  

 

 

        8.Wrapper Email 通知設定(需要專業版Wrapper)

Xml程式碼

 收藏程式碼

  1. # 郵件基本資訊設定  
  2. wrapper.event.default.email.debug=TRUE  
  3. #smtp伺服器地址  
  4. wrapper.event.default.email.smtp.host=  
  5. #smtp伺服器埠  
  6. wrapper.event.default.email.smtp.port=25  
  7. #郵件主題  
  8. wrapper.event.default.email.subject=[%WRAPPER_HOSTNAME%:%WRAPPER_NAME%:%WRAPPER_EVENT_NAME%] Event Notification  
  9. #發件人地址  
  10. wrapper.event.default.email.sender=<Sender email>  
  11. #收件人地址  
  12. wrapper.event.default.email.recipient=<Recipient email>  
  13. # 指定檔案內容  
  14. wrapper.event.jvm_restart.email.body=The JVM was restarted.\n\nPlease check on its status.\n  

 Xml程式碼

 收藏程式碼

  1. # 郵件日誌相關配置  
  2. wrapper.event.default.email.attach_log=TRUE  
  3. wrapper.event.default.email.maillog.lines=50  
  4. wrapper.event.default.email.maillog.format=LPTM  
  5. wrapper.event.default.email.maillog.loglevel=INFO  

 Xml程式碼

 收藏程式碼

  1. # 觸發事件,即當以下事件為true時傳送郵件  
  2. wrapper.event.wrapper_start.email=TRUE  
  3. wrapper.event.jvm_prelaunch.email=TRUE  
  4. wrapper.event.jvm_start.email=TRUE  
  5. wrapper.event.jvm_started.email=TRUE  
  6. wrapper.event.jvm_deadlock.email=TRUE  
  7. wrapper.event.jvm_stop.email=TRUE  
  8. wrapper.event.jvm_stopped.email=TRUE  
  9. wrapper.event.jvm_restart.email=TRUE  
  10. wrapper.event.jvm_failed_invocation.email=TRUE  
  11. wrapper.event.jvm_max_failed_invocations.email=TRUE  
  12. wrapper.event.jvm_kill.email=TRUE  
  13. wrapper.event.jvm_killed.email=TRUE  
  14. wrapper.event.jvm_unexpected_exit.email=TRUE  
  15. wrapper.event.wrapper_stop.email=TRUE  

 

        以上是對wrapper.conf配置檔案主要屬性的介紹,Wrapper更多特性及應用還需要自己去結合文件深入學習,以下是Wrapper官網文件地址:
        http://wrapper.tanukisoftware.com/doc/english/properties.html


原文:http://286.iteye.com/blog/1921414