我們將編寫的應用程式打包為Jar可執行文件後,如果在Linux伺服器環境下,可直接使用java -jar xxx.jar命令運行應用程式,不過當我們關閉命令窗口後啟動中的應用程式也會停止,那我們需要通過什麼方式才可以成為後臺服務方式運行呢?
01Nohup命令
Linux系統或者OS X都提供了一個解決應用程式後臺運行的命令,那就是nohup,我們使用該命令可以直接將要執行的任務放置在後臺運行,想要停止運行時需要通過結束pid的方式,使用方式如下所示:
我們通過以上的命令執行後可以看到控制臺輸出了本次運行程序的PID為 2349,我們可以使用kill命令殺死這個PID,從而達到了結束進程的效果。
注意事項:appending output to nohup.out這句話很有必要了解下,要知道我們之前通過java -jar xxx.jar直接運行應用程式時會有運行日誌輸出到控制臺的,我們通過nohup方式運行時我們貌似並沒有發現日誌的輸出,日誌去了哪裡呢?
02運行日誌
當你看到appending output to nohup.out這句話在控制臺列印時,應該可以猜測到了,日誌的內容已經輸出到了名為nohup.out的文件內,該文件所處的位置就是我們運行nohup命令的同級目錄(注意:不是jar文件的目錄),我們可以通過tail -1000f nohup.out命令查看運行日誌內容,如下所示:
通過nohup執行的命令所產生的日誌都會輸出到默認nohup.out文件內。
03指定日誌文件
在同一臺伺服器上、同一個目錄下可能會存在多個需要運行的Jar文件,為了區分每個應用程式的日誌輸出,這時我們就需要指定日誌輸出的文件名,如下所示:
這時我們在nohup命令執行的同級目錄下就可以看到創建了一個名為service-application-0.0.1.log的日誌文件。
建議:日誌文件的名稱格式:Service ID + Service Version,相同ServiceID的服務可能存在部署不同版本的情況。
04JVM Server模式
在JVM內有一個模式的概念,開發環境中一般使用的是client模式,不過生產伺服器上一般都是使用server模式,我們要怎麼選擇呢?
推薦開發環境使用client模式,因為它啟動快,可以提高一部分開發效率,節省每一次項目啟動的時間,而生產環境則是推薦使用server模式,內部使用了代號為C2的重量級編譯器,這樣雖然導致應用程式啟動速度有所提高,不過編譯的比較徹底,服務在運行期間相對於client性能高一些。
設置使用server模式也比較簡單,我們只需要執行java -server命令即可,如下所示:
05初始內存(-Xms)
JVM在client模式下運行,默認Xms大小為1M,而在server模式下默認Xms大小為128M,可以根據實際情況進行修改分配,如下所示:
通過-Xms256M,修改初始化分配的內存為256M。
06最大內存(-Xmx)
JVM在client模式下運行,默認Xmx大小為64M,而在server模式下默認Xmx大小為1024M,可以根據實際情況進行修改分配,如下所示:
通過-Xmx2048M,修改最大分配內存為2048M。
07JVM調優腳本
JVM的調優尤為最重,伺服器的配置有限,可使用的資源我們則是要珍惜,做出最大的貢獻!!!
為了每次部署服務的便利性,我把啟動服務的命令進行了封裝,並命名為boot-jar.sh,內容如下所示:
使用touch boot-jar.sh創建啟動腳本,創建完成後將上面內容複製到腳本內,並通過chmod u+x boot-jar.sh命令修改權限為可執行文件。
boot-jar.sh腳本使用如下:
developing-first-application git:(2.x) ./boot-jar.sh target/service-application-0.0.1-SNAPSHOT.jar
由於腳本內添加了tail命令,應用程式啟動後會自動輸出運行日誌。
建議:boot-jar.sh應用程式啟動腳本位置儘量放在與Jar同級目錄下。