0
点赞
收藏
分享

微信扫一扫

[Tomcat] 日常填坑

东言肆语 2022-03-12 阅读 76


内存溢出 java.lang.OutOfMemoryError

基本概念

>堆内存分配:

 ​​-Xms​​   JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;

 ​​-Xmx​​  JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4;

  默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、-Xmx相等以避免在每次GC 后调整堆的大小。


>非堆内存分配

 ​​-XX:PermSize​​ JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64 

 ​​-XX:MaxPermSize​​ 由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。

注意:

  参数中-Xms的值要小于-Xmx, -XX:PermSize的值要小于-XX:MaxPermSize; -Xmx的值和-XX:MaxPermSize的总和应不超过JVM内存的最大限制,比如当前操作系统最大内存限制,或者实际的物理内存  -vmargs -Dosgi.requiredJavaVersion=1.5 -Xms512m -Xmx1024m -XX:PermSize=256M -XX:MaxPermSize=512M


修改catalina.bat

 1. 添加​​JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1536m -Xmx1536m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+DisableExplicitGC" JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms512m -Xmx512m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+DisableExplicitGC"​

 2.修改​​TOMCAT_HOME/bin/catalina.sh​​ 在​​“echo "Using CATALINA_BASE:  $CATALINA_BASE"”​​上面加入以下行:​​JAVA_OPTS="-server -Xms800m -Xmx800m  -XX:MaxNewSize=256m"​


实例​,以下给出1G内存环境下java jvm 的参数设置参考:

  JAVA_OPTS=”-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true ”

  Caused by: java.lang.OutOfMemoryError: Java heap space

  解决方法:设置TOMCAT的内存大小


MyEclipse


Window-->Preference-->MyEclipse-->Application Servers-->Tomcat-->Tomcat 6.x-->JDK-->Optional Java VM arguments下填上:
-Xms256m -Xmx512m -XX:PermSize=256m -XX:MaxPermSize=600m


Window系统


编辑tomcat的catalina.bat文件,在第一行的后面增加一句:
set JAVA_OPTS=-server -Xms256m -Xmx512m -XX:PermSize=128M -XX:MaxPermSize=256M


IDEA


Run/Debug configuration 的你要运行行的tomcat里面的 
vm options里面输入
-server -XX:PermSize=128M -XX:MaxPermSize=256m


8G内存推荐:
-server -Xms256m -Xmx512m -XX:PermSize=128M -XX:MaxPermSize=256M
16G内存推荐:
-Xms512m -Xmx1024m -XX:PermSize=256M -XX:MaxPermSize=512M

​​参考网址 http://outofmemory.cn/c/java-outOfMemoryError​​

At least one JAR was scanned for TLDs yet contained no TLDs

这样的问题是你的页面中含有​​<!---->​​的注释 去掉就好了,​​tomcat7.0.20.​

tomcat 7对​​EL​​表达式的语法要求比较严格,例如​​"${owner.new}"​​因包含关键字new就会导致解析出错。

问题是出来了,怎么解决呢?有三种,如下:

第一种:严格遵守java规范,修改对象的属性名称,要求不包含java关键字;

第二种:修改EL表达式,例如” owner.new"可以修改为" {owner[‘new’]}”;

第三种:修改tomcat属性,忽略对EL表达式的关键字检查。修改​​$CATALINA_BASE/conf/catalina.properties​​文件,添加​​org.apache.el.parser.SKIP_IDENTIFIER_CHECK=true​​选项。

第四种:

pom增加:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>

​​参考网址:http://www.myexception.cn/ai/1462646.html​​

前端乱码

>  tomcat/conf/server.xml
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"  URIEncoding="UTF-8"/>



举报

相关推荐

0 条评论