直接優化JVM 和 Tomcat JVM(修改catalina.sh)優化有什麼區別?

直接優化JVM 和 Tomcat JVM(修改catalina.sh)優化有什麼區別?

「java -Xmx3550m -Xms3550m -Xmn2g -Xss128k 」是可以直接命令行設置JVM參數嗎?是一次性的而重啟後失效嗎?

設置系統環境變數JAVA_OPTS="-Xms256m -Xmx512m"就是永久性的沒錯吧。

一下是我的理解,是否有誤?

:

比如我在命令行「java -Xmx3550m -Xms3550m -Xmn2g -Xss128k 」

或者設置系統環境變數JAVA_OPTS="-Xms256m -Xmx512m"

是不是就是把機器上的JVM優化方案定死了

Tomcat JVM(修改catalina.sh)就是當應用起來的時候該應用採取指定的JVM優化方案

-----------------------------------------------------------------

PS:很久沒寫程序了,求重虐,求點醒


@曹旭東 的答案OK。在它的基礎上俺補充一點來攪個局…

針對HotSpot VM這個具體的JVM實現,它其實還支持自動從兩個環境變數獲取VM參數:

  • _JAVA_OPTIONS
  • JAVA_TOOL_OPTIONS

其實現在:jdk8u/jdk8u/hotspot: 68de83e1d912 src/share/vm/runtime/arguments.cpp

所以只要設置了這倆環境變數的任何一個,都可以影響到HotSpot VM的配置。

參數的優先順序是:

-XX:Flags=& 或 .hotspotrc 配置文件

&< $JAVA_TOOL_OPTIONS

&< java命令行參數

&< $_JAVA_OPTIONS

(優先順序更高的會覆蓋掉優先順序更低的)

題主說的JAVA_OPTS是Tomcat自己的啟動腳本里用的環境變數,對應到上面我說的優先順序是屬於「java命令行參數」那一類。


以下內容,以tomcat-8.0.14和jdk1.8.0_20為基準,伺服器為ubuntu。

「java -Xmx3550m -Xms3550m -Xmn2g -Xss128k 」是可以直接命令行設置JVM參數嗎?是一次性的而重啟後失效嗎?

這樣可以設置jvm的參數;是一次性的。

設置系統環境變數JAVA_OPTS="-Xms256m -Xmx512m"就是永久性的沒錯吧。

這個得看你是具體怎麼設置,以及tomcat是怎麼啟動的。若你的環境變數是針對個人用戶設置的,而tomcat是在伺服器啟動時,默認啟動的,則不會應用這個環境變數。

比如我在命令行「java -Xmx3550m -Xms3550m -Xmn2g -Xss128k 」

或者設置系統環境變數JAVA_OPTS="-Xms256m -Xmx512m"

是不是就是把機器上的JVM優化方案定死了

環境變數`JAVA_OPTS`並不是java本身所支持的環境變數,而是各個java應用自己使用的,例如tomact和jetty。

針對tomcat本身的設置,應該使用環境變數`CATALINA_OPTS`,而不是`JAVA_OPTS`。它們的區別如下:

# CATALINA_OPTS (Optional) Java runtime options used when the "start",

# "run" or "debug" command is executed.

# Include here and not in JAVA_OPTS all options, that should

# only be used by Tomcat itself, not by the stop process,

# the version command etc.

# Examples are heap size, GC logging, JMX ports etc.

# JAVA_OPTS (Optional) Java runtime options used when any command

# is executed.

# Include here and not in CATALINA_OPTS all options, that

# should be used by Tomcat and also by the stop process,

# the version command etc.

# Most options should go into CATALINA_OPTS.


一台伺服器可以起多個jvm,所以你把參數配在環境變數裡面,那麼這台機器上嗎啟動的jvm實例如果帶的參數沒有被其他方式複寫默認是你配在環境變數裡面的。


推薦閱讀:

tomcat運行久了,需要重新啟動,才能接收客戶端請求,但是靜態資源可以訪問,怎麼解決?
web項目上線之前需要注意什麼問題?
什麼樣的項目才會考慮使用JBoss、WebSphere、WebLogic等伺服器?
adt-bundle-windows沒有集成tomcat,如何配置tomcat伺服器?網上的教程大多很古老不適用。
Tomcat是如何將JSP代碼編譯成Servlet代碼的?

TAG:Java | Java虛擬機JVM | ApacheTomcat | JavaEE |