Tomcat常见问题
启动冲突
在tomcat中启动应用的时候出现 ,启动时出现32 位和64 位冲突的错误:
1 | java.lang.UnsatisfiedLinkError: D:\tomcat\ydkq-tomcat-client\bin\tcnative-1.dll: Can't load AMD 64-bit .dll on a IA 32-bit platform |
【原因】原因是因为jdk 的运行环境和tomcat的不一致,一个是32位一个是64位的,改成一致的就可以了
【解决】更换成对应版本的JDK即可。
端口占用
tomcat无法正常启动时,出现Socket bind failed
【原因】 端口被占用
【解决】 在任务管理器中关掉 java.exe , javaw.exe
缓存不够问题
1 | [localhost-startStop-1] org.apache.catalina.webresources.Cache.getResource Unable to add the resource at [/WEB-INF/classes/] to the cache because there was insufficient free space available after evicting expired cache entries - consider increasing the maximum size of the cache |
【解决】
建议更改Tomcat的setenv.sh 或 setclasspath.sh,加入:
1
JAVA_OPTS='-Xms【初始化内存大小】 -Xmx【可以使用的最大内存】'
在tomcat的conf 文件夹下面找到context.xml,然后加入下面的代码重启即可。
1 | <Context> |
#请求头信息的大小不足
当程序中request的header信息过长时,会出现如下错误:
【原因】tomcat访问的请求头的信息的太大,超过tomcat默认配置
【解决办法】:
在tomcat 的conf的server.xml文件中的如下位置加入:maxHttpHeaderSize="65536" maxPostSize="4194304"
,即可。
1 | <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" |
web应用编译异常
在以Tomcat作为Web容器,启动java Web工程时,遇到下面问题:
1 | org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException |
【原因】
系统默认 jdk版本的影响,更换成tomcat中class 文件编译的jdk版本即可。
【解决】
1、JSP文件,受生产环境影响,不同的生产环境会产出不同的结果;
2、部署在Windows、Linux端的工程里的JSP文件,受bin文件和lib文影响;
3、bin文件,存放各种不同平台开启与关闭Tomcat的脚本文件;一般的Tomcat版本里的bin文件,都包含Windows、Linux平台开启与关闭的脚本文件;部署在Windows、Linux端的Tomcat可用一个同一个版本;
4、存Tomcat与web应用的Jar包,JSP文件依赖于servlet.jar和jsp-api.jar;不同的Tomcat版本,如:(Apache-Tomcat 7.0.23和Apache-Tomcat 7.0.33),都会造成影响;部署在Windows、Linux端的Tomcat可用一个同一个版本;
注:同一大版本号,不同小版本号的JDK和Tomcat均会造成Windows和Linux的差异;最佳方案是JDK和Tomcat最初就保持相同的小版本号;