阅读 312

总结一下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虚拟机那本书