1. 程式人生 > 程式設計 >springboot程式啟動慢-未配置hostname的解決

springboot程式啟動慢-未配置hostname的解決

目錄
  • springboot程式啟動慢-未配置hostname
    • 具體日誌如下
    • 通過tack檢視執行緒發現如下資訊
    • 檢視原始碼如下
  • Spring Boot啟動速度慢的原因總結
    • 前提條件
    • 原因一
    • 原因二
    • 原因三
    • 解決方法

springboot程式啟動慢-未配置hostname

今天有同時反饋自己的程式在本地mac環境還正常,在生產環境上centos7啟動特別慢

具體日誌如下

springboot程式啟動慢-未配置hostname的解決

可以看到程式在這裡卡了將近2分鐘時間,期間無任何日誌輸出。

通過jstack檢視執行緒發現如下資訊

springboot程式啟動慢-未配置hostname的解決

檢視原始碼如下

public native InetAddress[] lookupAllHostAddr(Swww.cppcns.comtring hostname) throws UnknownHostException;

入參為hostname,於是檢視機器hostname,再ping hostname發現ping不通,至此知道解決辦法應該是在/etc/hosts配置一下hostname為本機ip即可解決。

配置hostname後程序正常啟動了。

Spring Boot啟動速度慢的原因總結

現在spring boot的架構可以說是非常流行,不會你都不好意思說你是做的。可是它火歸火,也有一些小問題需要咱們去注意。

如果是單體專案,並且在啟動速度方面沒有任何要求,那麼請忽略。

下面進入主題,在什麼情況下spring boot的專案啟動會變慢呢

前提條件

啟動專案的機器硬體配置不能拖後腿,否則你說專案啟動慢,專案還覺得機器不行呢…

比如網路,記憶體大小,CPU核心數等,不要求太高,至少也要夠用吧

拋開各種人為因素,例如各種連線時間較長,其他元件啟動較慢導致等待…

原因一

專案中使用的無用配置太多。

例如在一個最簡單的web中KgQdCzTur,你還加入了其他各種maven配置,並且將他們配置到專案中(只是比較誇張的例子,這些配置加入都不用),然後專案本身也不懂,既然你配置了,那就載入唄。一個花0.1秒,10個就1秒,100個就10秒了…以此類推,這一點就是最容易想明白的地方了。

原因二

spring boot的自動配置。

自動配置是spring boot的一個特色,但是也是它啟動慢的一個弊病。沒辦法,通常好用功能全的東西,總會在一些地方上有缺陷。上面說到無用的配置多,這裡要說的就是spring boot它自己裝配的東西太多。你可以看到在spring boot的相關jar包裡,都存放著spring.factories的檔案,進去一看,大部分都是寫了很多的類,它是實現spring boot自動裝配的核心之一。但是你仔細觀察會發現,其實有很多類,你可能完全不用。但有什麼辦法呢,不管你用不用,至少它都會http://www.cppcns.com

給你檢查一遍,這不也是花時間的地方嗎?

原因三

專案精簡程度不夠。

現在比較流行微服務的概念,我認為它的概念核心含義即為精簡,單一,並且多數需要強調啟動速度的地方也多是出自微服務的專案中。一個微服務專案中,最好是在10秒以內能夠啟動完畢。但是多數是做不到的,原因在於專案拆分的還不夠細。你說一個介面啟動快,還是10個快,或是更多,答案很明顯。很多專案做到了大而全,所謂大而全就是功能很多,配置很齊全,各種可以擴充套件配置等,全面的不行不行的,但這意味著什麼,你的配置多,有用沒用先不管,至少需要編譯和載入的類檔案都會多出很多來,你說要這樣的專案能啟動快,怎麼能啟動快呢?

解決方法

  • 檢查maven中是否無用的依賴太多
  • 比較複雜,使用spring-boot-maven插件debug啟動,檢視該專案中,使用了哪些配置,哪些配置沒用,然後在啟動類中直接註明只啟動使用了的類,並且刪掉@SpringBootApplication註解,手動填上@Configuration和@Import註解,並在@Import註解中加上那些配置的類。
  • 更換一些配置更快的依賴。例如,你使用A連線池,功能全,配置多,但速度較慢,但是其實B連線池也能滿足專案需求,但是功能相對較少,所以配置也少,啟動更快,你是不是需要考A和B應該選一個。
  • 拆分出更精簡的專案來獨自執行,大而全意味著多而不精,精而簡意味著少但是精通,它們速度,不言而喻。

此次分享就到這裡,歡迎大家的討論。以上為個人經驗,希望能給大家一個參考,也希望大家多多支援我們。