1. 程式人生 > 程式設計 >總結一下Tomcat碰到的幾個問題

總結一下Tomcat碰到的幾個問題

大概率是因為自己對Tomcat以及jvm不熟;
今天上午一直在碰到問題解決問題,把問題記錄一下,理解一下為什麼會出現這種問題。web專案啟動的時候:

1.jrebel的team url問題

team url經常會過期,網上能找到可以用的不容易
解決:使用http://jrebel.yanjiayu.cn:9001/64245b6b-ef68-4bdc-aabf-7f8e85a540e4
後面UUID部分可以替換,線上生成https://www.uuidgenerator.net/
參考:www.cnblogs.com/joyny/p/102…

2.jvm記憶體不足

今天在啟動了幾次之後,突然maven不能正常import,並且在maven構建過程中或者後期compiler過程中報錯:

# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate 1338256 bytes for Chunk::new
複製程式碼

解決:

  • 一開始以為是虛擬機器器記憶體設定的太少,後面在D:\apache tomcat\apache-tomcat-8.0.51\bin目錄下的catalina.bat目錄下設定了jvm啟動引數-Xss:
    set JAVA_OPTS=%JAVA_OPTS% -Xms128m -Xmx512m,仍然不行; catalina.bat是Tomcat中最重要的指令碼,比如Tomcat的啟動和關閉都是catalina.bat完成的。Tomcat會在終端列印catalina log,見圖2
    圖1 catalina.bat路徑

圖2 catalina log

  • 第二步:檢視記憶體,發現記憶體佔用也才百分之50左右;
  • 最後,檢視Tomcat相關程式是否未關閉,手動kill了1099和8080埠的所有程式;最後解決這個問題。

疑惑:為什麼Tomcat在shutdown之後依然有程式在執行???

3.Artifact XXX:war: Error during artifact deployment. See server log for details.

問題:Tomcat啟動就報這個錯;主要是因為配置的時候war和war explode兩種模式不一致。
解決:網上查了資料,這是一個常見的問題,的確也是我第二次碰到了,但是我依然不知道如何解決,現在可以總結:改變了artifact,然而Tomcat的配置中的artifact沒有重新配置,就會報錯。
artifact包括兩種模式:

  • war:釋出模式,先打成war包,再發布
  • war explode:直接把資料夾、檢視頁面 、classes等等移到Tomcat 部署資料夾裡面,進行載入部署。這種方式支援熱部署,一般在開發的時候也是用這種方式;在平時開發的時候,使用熱部署的話,應該對Tomcat進行相應的設定,這樣的話修改的jsp介面什麼的東西才可以及時的顯示出來;

explode模式下的:on update action和on frame deactivation支援update classes and resources選項(熱部署)

步驟: 1.file---project structure-》

2.步驟中最後一步一定是在deployment處;
我碰到過即使看起來都是war模式,都是一致的,卻報這個錯誤,這是因為修改了artifact模式之後,最後沒有在deployment處重新配置。

4.Tomcat啟動到org.apache.catalina.startup.Catalina.start Server star就停止問題

這個也是catalina.bat中配置檔案中配置項寫的不對,導致Tomcat啟動出錯,我在修復了第3個小問題之後,這個問題就不存在了。

5.端口占用問題

這個就比較簡單了,windows中的解決方法:
eg:檢視1099埠是否佔用,並kill

  • netstat -aon|findstr 1099
    發現1099處的pid是19128
  • taskkill -f -pid 19128

6.總結

  • Tomcat還是很難的,jvm等等裡面的內容有待學習;
  • 很多問題,光看理論是不夠的,希望能夠多多碰到問題,促使我學習進步。
  • 有空會再去回味一下jvm虛擬機器器那本書