Tomcat Error

1:persisted sessions: java.io.EOFException
  • 分析:EOFException表示输入过程中意外地到达文件尾或流尾的信号,导致从session中获取数据失败。异常是tomcat本身的问题,由于tomcat上次非正常关闭时有一些活动session被持久化(表现为一些临时文件),在重启时,tomcat尝试去恢复这些session的持久化数据但又读取失败造成的。此异常不影响系统的使用。
  • 解决办法: 将tomcat\work\Catalina\localhost\yourProjectName\SESSIONS.ser删除。如果正常关闭服务端,该文件是自动删除的。注:yourProjectName 是你当前正在工作的Web项目名称。 考虑到每个人的tomat的工作目录不同,建议在"搜索"功能中找到你的SESSIONS.ser文件,而且只需要删除..\yourProjectName\下的SESSIONS.ser即可。
  • 热部署:
    • <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
    • <Context path="/myschool " docBase="/webapps/myschool" debug="0" reloadable="true" crossContext="true"></Context> 
    • </Host>
2:java.lang.OutOfMemoryError: PermGen space
  • 原因:PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中,它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的应用中有很CLASS的话,就很可能出现PermGen space错误,这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。
  • 解决方法:
    • 1. 手动设置MaxPermSize大小,修改TOMCAT_HOME/bin/catalina.bat(Linux下为catalina.sh)
      • echo Using CATALINA_BASE:   %CATALINA_BASE%下面:
      • set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=128M -XX:MaxPermSize=512m
      • catalina.sh下为:JAVA_OPTS="$JAVA_OPTS -server -XX:PermSize=128M -XX:MaxPermSize=512m"
    • 2. 将相同的第三方jar文件移置到tomcat/shared/lib目录下,这样可以达到减少jar 文档重复占用内存的目的。
    • 3.Tomcat Error - DaySpring - DaySpring
       
3:java.lang.OutOfMemoryError: Java heap space 
  • 解释: 
    • Heap size 设置,JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。Heap size 的大小是Young Generation 和Tenured Generaion 之和。
    • 提示:在JVM中如果98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出此异常信息。
    • 提示:Heap Size 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。
  • 解决方法: 
    • 手动设置Heap size,修改TOMCAT_HOME/bin/catalina.bat,在“echo "Using CATALINA_BASE:   $CATALINA_BASE"”上面加入以下行:
    • set JAVA_OPTS=%JAVA_OPTS% -server -Xms800m -Xmx800m   -XX:MaxNewSize=256m
    • 或修改catalina.sh在“echo "Using CATALINA_BASE:   $CATALINA_BASE"”上面加入以下行:
    • JAVA_OPTS="$JAVA_OPTS  -server -Xms800m -Xmx800m   -XX:MaxNewSize=256m"
 

4:java.net.SocketException: Broken pipe

  • 原因是往一个socket写一个序列化对象写了2次,因为网络不稳定,所以有短开重新连接的机制,但是由于两太机器通过服务代理的方式传输,所以server无法发现客护短客户端退出,这样造成客户端列表里有一个机器一个端口的两个socket对象,这样往socket里写的时候就造成一个对象写两次的现象

猜你喜欢

转载自www.cnblogs.com/xiaowater/p/9549637.html