差異處

這裏顯示兩個版本的差異處。

連向這個比對檢視

Both sides previous revision 前次修改
下次修改
前次修改
java:servicewrapper:hangproperties [2016/08/19 16:29]
tony [Problem]
java:servicewrapper:hangproperties [2023/06/25 09:48] (目前版本)
行 4: 行 4:
 Java Service Wrapper提供了JVM發生問題時的處置。有天在執行我們系統的某個功能時,由於超過wrapper預設允許JVM Hang的時間,導致它重新啟動了JVM,也造成功能無法正常執行完畢。本篇文章主要告訴大家,關於JVM沒有回應處置的相關設定。這些設定都可以在官網文件中找到。 Java Service Wrapper提供了JVM發生問題時的處置。有天在執行我們系統的某個功能時,由於超過wrapper預設允許JVM Hang的時間,導致它重新啟動了JVM,也造成功能無法正常執行完畢。本篇文章主要告訴大家,關於JVM沒有回應處置的相關設定。這些設定都可以在官網文件中找到。
 ===== How to? ===== ===== How to? =====
 +設定沒有回應的允許時間,預設30秒。假如有某些操作會造成JVM hang住,那你就需要tune這個值:​
 +<​code>​
 +wrapper.ping.timeout=30
 +</​code>​
 +設定timeout後的處置,預設為重新啟動JVM。它是可以透過逗點設定多個,詳細設定可以看Reference 1:
 +<​code>​
 +wrapper.ping.timeout.action=RESTART
 +</​code>​
 +而在wrapper log中想要知道這些處置,就必須設定正確的log level,至少要STATUS以上才能獲得這些資訊:​
 +<​code>​
 +wrapper.console.loglevel=STATUS
 +</​code>​
 +===== Verify =====
 +參考此[[http://​stackoverflow.com/​questions/​30261965/​how-to-make-jvm-hang-for-a-given-time-period|連結]],可以透過以下指定去模擬JVM hang住5分鐘:​
 +<code bash>
 +pkill -STOP java; sleep $(( 5 * 60 )); pkill -CONT java
 +</​code>​
 +但因為這不夠精確,會造成系統上所有java程式hang住,如果能取得pid,建議使用以下command:​
 +<code bash>
 +$pid=12345
 +kill -STOP $pid
 +sleep 5
 +kill -CONT $pid
 +</​code>​
 +以下為log範例輸出:​
 +<​code>​
 +STATUS | wrapper ​ | 2016/08/19 13:24:10 | --> Wrapper Started as Daemon
 +STATUS | wrapper ​ | 2016/08/19 13:24:11 | Java Service Wrapper Standard Edition 64-bit 3.5.26
 +STATUS | wrapper ​ | 2016/08/19 13:24:11 |   ​Copyright (C) 1999-2014 Tanuki Software, Ltd. All Rights Reserved.
 +STATUS | wrapper ​ | 2016/08/19 13:24:11 |     ​http://​wrapper.tanukisoftware.com
 +STATUS | wrapper ​ | 2016/08/19 13:24:11 |   ​Licensed to Tony Lin
 +STATUS | wrapper ​ | 2016/08/19 13:24:11 |
 +STATUS | wrapper ​ | 2016/08/19 13:24:12 | Launching a JVM...
 +WARN   | wrapper ​ | 2016/08/19 13:26:22 | JVM process was stopped. ​ It will be killed if the ping timeout expires.
 +STATUS | wrapper ​ | 2016/08/19 13:26:36 | JVM appears hung: Timed out waiting for signal from JVM.  Restarting JVM.
 +ERROR  | wrapper ​ | 2016/08/19 13:27:10 | Shutdown failed: Timed out waiting for signal from JVM.
 +ERROR  | wrapper ​ | 2016/08/19 13:27:11 | JVM did not exit on request, termination requested.
 +STATUS | wrapper ​ | 2016/08/19 13:27:11 | JVM received a signal SIGKILL (9).
 +STATUS | wrapper ​ | 2016/08/19 13:27:11 | JVM process is gone.
 +STATUS | wrapper ​ | 2016/08/19 13:27:11 | JVM exited after being requested to terminate.
 +STATUS | wrapper ​ | 2016/08/19 13:27:15 | Launching a JVM...
 +</​code>​
 +===== Reference =====
 +  * [[https://​wrapper.tanukisoftware.com/​doc/​english/​prop-ping-timeout.html|Java Service Wrapper - wrapper.ping.timeout]]
 +  * [[https://​wrapper.tanukisoftware.com/​doc/​english/​prop-console-loglevel.html|Java Service Wrapper - wrapper.console.loglevel]]
 +  * [[http://​stackoverflow.com/​questions/​30261965/​how-to-make-jvm-hang-for-a-given-time-period|How to make JVM hang for a given time period?]]
  
 +=====  ===== 
 +---- 
 +\\ 
 +~~DISQUS~~