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

大機率是由於本身對Tomcat以及jvm不熟;
今天上午一直在碰到問題解決問題,把問題記錄一下,理解一下爲何會出現這種問題。web項目啓動的時候:html

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…web

2.jvm內存不足

今天在啓動了幾回以後,忽然maven不能正常import,而且在maven構建過程當中或者後期compiler過程當中報錯:apache

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

解決:windows

  • 一開始覺得是虛擬機內存設置的太少,後面在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以後依然有進程在運行???tomcat

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

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

  • war:發佈模式,先打成war包,再發布
  • war explode:直接把文件夾、視圖頁面 、classes等等移到Tomcat 部署文件夾裏面,進行加載部署。這種方式支持熱部署,通常在開發的時候也是用這種方式;在平時開發的時候,使用熱部署的話,應該對Tomcat進行相應的設置,這樣的話修改的jsp界面什麼的東西才能夠及時的顯示出來;

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

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

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

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

這個也是catalina.bat中配置文件中配置項寫的不對,致使Tomcat啓動出錯,我在修復了第3個小問題以後,這個問題就不存在了。jsp

5.端口占用問題

這個就比較簡單了,windows中的解決方法:
eg:查看1099端口是否佔用,並killmaven

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

6.總結

  • Tomcat仍是很難的,jvm等等裏面的內容有待學習;
  • 不少問題,光看理論是不夠的,但願可以多多碰到問題,促使我學習進步。
  • 有空會再去回味一下jvm虛擬機那本書
相關文章
相關標籤/搜索