SpringBoot2.x基礎篇:Linux後臺運行Jar以及Jvm參數調優

2020-12-20 計算機java編程

我們將編寫的應用程式打包為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同級目錄下。

相關焦點

  • Spring Boot 2.4 安裝
    一個需要注意的是,你的項目如果需要轉換為 Spring Boot 的項目的話,你的項目必須是 spring-boot-starter-parent的子項目。安裝 Spring BootSpring Boot 可以通過使用 「傳統(classic)」 的 Java 開發工具或者安裝一個命令行工具(command line tool)。
  • 反爬蟲防盜刷 Spring Boot 組件 kk-anti-reptile 初版發布
    kk-anti-reptile 是適用於基於spring-boot開發的分布式系統的反爬蟲組件系統要求 基於spring-boot開發(spring-boot1
  • springboot2.1.5集成fineReport報表工具
    2.在項目resources目錄下新建libs文件夾,將依賴jar放入其中2.在pom.xml中設置打包時將項目中libs文件夾下的jar也打包進去<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin
  • spring boot 整合shiro 錯誤
    最近在弄spring boot 整合shiro的。凱哥現在用的是spring boot。web.xml沒有。但是凱哥配置了shiro的核心攔截器啊。如下圖:並且使用了@Configuration這個註解了。
  • Spring boot 2.1.8 中 @SpringBootApplication 註解來源
    簡介啟動Spring boot 時,啟動類中有個註解 @SpringBootApplication查看源碼其中標註的三個註解正能解決我們上面所說的三種功能>[] exclude() default {}:根據 class 來排除,排除特定的類加入 spring 容器,傳入參數 value 類型是 class 類型。
  • SpringBatch從入門到放棄002- 核心概念1
    穿梭機:基於Spring Boot 2.x 的 Spring Batch 入門到放棄之旅SpringBatch從入門到放棄001- HelloWorld本篇文章的目錄如下:Spring Boot的所有自動配置都包含在spring.boot.autoconfigure.jar 這個 jar 中。
  • 如何在Spring Boot項目中集成微信支付V3
    演示例子: payment-spring-boot-samples文檔:Payment Spring Boot文檔有疑問請提交ISSUE會及時跟進,歡迎Star ,歡迎PR貢獻。1.0.3.SNAPSHOT 已經進入測試階段目前功能實現微信支付多商戶集成支付寶SDK、快速接入Spring Boot實現微信支付V3 基礎支付實現微信支付V3 合單支付實現微信支付V3 代金券實現微信支付V3 微信支付分實現微信支付V3 先享卡Maven 中央倉庫坐標最新版本的坐標為:<dependency>
  • Spring Boot 2.4 從早期版本進行升級
    如果你打算從 Spring Boot 的 1.x 版本進行升級的話,請查看 「項目 WIKI 頁面中 合併指南」 的內容來了解有關升級的詳細指南。 請查看 「發布日誌(release notes)」 頁面中的內容來了解針對每一個發行版本的 「新的和值得注意的特性」 的信息。
  • Java程式設計師必會SpringMVC框架入門 b/s架構精講0基礎也能看懂
    今天我們將演示如何手動搭建SpringMVC框架以及基本操作的介紹。SpringMVC是Spring家族的產物,也可以作為組件併入Spring中,它是一個web層框架主要用於對前臺的參數接收及處理工作,相同類型的還有struts2框架,SpringMVC使用起來要比Struts2精簡許多。先給大家介紹一下B/S架構項目的流程。
  • Rocket-API 2.3.2 發布,基於 spring boot 的 API 敏捷開發框架
    告別加班,拒絕重複勞動,遠離搬磚概述"Rocket-API" 基於spring boot 的API敏捷開發框架,服務端50%以上的功能只需要寫SQL或者 mongodb原始執行腳本就能完成開發,另外30%也在不停的完善公共組件,比如文件上傳,下載,導出,預覽,分頁等等通過一二行代碼也能完成開發,剩下的20%也能依賴於動態編譯技術生成class的形式,不需要發布部署,不需要重啟來實現研發團隊的快速編碼
  • 這一定是全網寫JVM最好的文章之一—JVM運行時數據區
    JVM基礎知識一個Java程序到底是如何運行的?一個Java程序,首先要經過javac編譯成.class文件,.class文件是給JVM進行識別的,JVM將.class文件加載到方法區,執行引擎會執行這些字節碼,執行時,會翻譯成作業系統相關的函數。
  • Spring Boot 啟動事件和監聽器,太強大了!
    Spring Boot 啟動事件順序1、ApplicationStartingEvent這個事件在 Spring Boot 應用運行開始時,且進行任何處理之前發送(除了監聽器和初始化器註冊之外)。Spring Boot 基礎的構建這裡就不介紹了,如果你對 Spring Boot 還不是很熟悉,或者只是會簡單的使用,那還是建議你深入學習下吧,推薦這個 Spring Boot 學習倉庫,歡迎 Star 關注:https://github.com/javastacks/spring-boot-best-practice1、新建監聽器
  • 使用IntelliJ IDEA創建Spring Boot項目
    1.2 填寫項目信息在此步驟中,需要指定一些必要的項目信息,它們是:Group:項目的groupId,例如com.ramostearArtifact:項目的artifactId,例如hello-springbootType:項目的構建方式,默認為
  • Spring Boot集成validation用於優雅的校驗API參數的合法性
    ,郵箱格式是否正確等等,校驗框架比較多,用的比較多的是hibernate-validator, 也支持國際化,也可以自定義校驗類型的註解,這裡只是簡單的演示校驗框架在Spring Boot中的簡單集成,要想了解更多可以參考 hibernate-validator1. pom.xml<dependency> <groupId>org.springframework.boot
  • 直通BAT必考題系列:JVM性能調優的6大步驟,及關鍵調優參數詳解
    2.導致Full GC的原因1)年老代(Tenured)被寫滿調優時儘量讓對象在新生代GC時被回收、讓對象在新生代多存活一段時間和不要創建過大的對象及數組避免直接在舊生代創建對象 。>在對JVM調優的過程中,很大一部分工作就是對於FullGC的調節,下面詳細介紹對應JVM調優的方法和步驟。
  • Spring Boot Admin快速打造監控平臺
    今天我們介紹一個可視化的監控指標平臺Spring Boot Admin,它利用spring-boot-starter-actuator提供的功能,將各個微服務的狀態整合到一起,並提供良好的界面查看支持,並且能夠動態的修改實例日誌級別
  • SpringCloud微服務架構篇7:Config配置資源庫及加解密
    在加載Environment相應資源時參數變化成了以下變量:{application}:對應客戶端配置中的spring.application.name。{profile}:對應客戶端配置中的spring.profiles.action。
  • 解讀LINUX和LILO
    MBR可通過兩種方式運行,其一是定位到活動分區並加載相應的引導扇區,然後由引導扇區完成該分區內作業系統的基本組件的加載;其二是直接從一指定分區中加載信息,並通過它裝入任一分區的作業系統,諸如LILO、OS/2 boot loader及Partition Magic等引導加載程序都可以配置成這種方式。