Tomcat相关问题
set JAVA_OPTS=%JAVA_OPTS% -server -Xms512m -Xmx512m -XX:MaxNewSize=256m -XX:PermSize=512M -XX:MaxPermSize=512m
Tomcat运行一段时间后,自动停止关闭,To prevent a memory leak,Druid 数据库连接自动关闭, the JDBC Driver has been forcibly unregistered.
- 解决办法
将Tomcat中server.xml监听器注释掉,重启tomcat
vi tomcat9/conf/server.xml //注释如下两行:
<?xml version='1.0' encoding='utf-8'?> Tomcat 权限大类上分为Manager和Admin两种 ps. manager-gui、manager-script、manager-jmx均具备manager-status的权限 server.xml中有这样一句: 我们通过 telnet 命令访问 8005 端口并执行 SHUTDOWN(区分大小写) 不需要任何验证即可将 tomcat 关闭! 优化方式: 若使用 tomcat 默认错误页面,比如 404,则会暴露服务器版本等信息 web.xml 倒数第二行增加配置 webapps/ROOT 下增加错误页面 index.jsp tomcat/webapps 下的所有文件夹 docker rm -f tomcat ; docker run --restart=always -d --name tomcat -p 10000:8080 -v /docker/tomcat/webapps/:/usr/local/tomcat/webapps/ -v /docker/tomcat/logs:/usr/local/tomcat/logs rinetd/tomcat:8.5 解决方法是修改成非阻塞的熵源/dev/urandom。 至于为什么是/dev/./urandom,而不是/dev/urandom,这源于java的一个bug。大意是/dev/urandom在某些情况下可能还是最终会转换成调用/dev/random。所以为了保险起见,还是使用/dev/./urandom吧! apt install tomcat8 有两种解决办法: 1)在Tomcat环境中解决 sed -i 's|securerandom.source=file:/dev/random|securerandom.source=file:/dev/urandom|g' /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/java.security 配置服务器Tomcat #优化运行环境 ##启动文件优化 CATALINA_HOME=/usr/local/tomcat ##开启链接池,关闭非链接池配置 ###开启线程池 ###优化线程池配置 RUN sed -i '/Connector executor="tomcatThreadPool"/a enableLookups="false" URIEncoding="UTF-8" acceptCount="1000"' ${TOMCAT_HOME}/conf/server.xml ##正则表达式编辑xml,增加应用部署目录 #清除管理用户 #集群配置session共享;需要先启动session服务 #配置redis 共享 ###增加数据源 RUN cat ${TOMCAT_HOME}/conf/context.xml #删除注释文件 JAVA_OPTS='-Xms2048M -Xmx4096m -XX:MaxNewSize=128m -XX:MaxPermSize=256m -XX:PermSize=128M' 在Jetty 的VM参数中设置: 在tomcat运行环境中设置: linux环境在catalina.sh 1、对于安装版的TOMCAT: 进入TOMCAT的安装目录下的bin目录,双击tomcat6w.exe。点击Java选项卡,可设置初始化内存,最大内存,线程的内存大小。 2、对于解压版的TOMCAT: 如果是WINDOWS操作系统,修改catalina.bat文件;否则修改catalina.sh文件。只需要在文件的头部加上"set JAVA_OPTS=-Xms512m -Xmx512m -Xss1024k”,数值分别对应了初始化的最小内存,最大内存,线程内存大小。如果JDK的版本是5.0之后的,线程内存可以不用设置。 3、linux系统下修改方法 在/usr/local/apache-tomcat-5.5.23/bin目录下的catalina.sh 对于容器下运行了多个WEB应用时,尽量将相同的JAR包转移到TOMCAT的lib下,此外还需要在JAVA OPTS后加上如下配置: 即为:JAVA_OPTS=’-Xms256m –Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m’ 修改内存后,可启动TOMCAT,输入http://127.0.0.1:8080,进入Status,会提示输入登录的用户名和密码,用户可以在conf/tomcat-user.xml中配置(配置完后需要重启TOMCAT), <?xmlversion='1.0'encoding='utf-8'?> 登录后即可看到TOMCAT当前的空闲内存和最大内存。 tomcat报Exception in thread "http-8080-36" java.lang.OutOfMemoryError: PermGen space异常的解决: PermGen space的全称是Permanent Generation space,是指内存的永久保存区域, 这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中, 修改TOMCAT_HOME/bin/catalina.sh 建议:将相同的第三方jar文件移置到tomcat/shared/lib目录下,这样可以达到减少jar 文档重复占用内存的目的。Manager
允许访问html接口(即URL路径为/manager/html/*)
允许访问纯文本接口(即URL路径为/manager/text/*)
允许访问JMX代理接口(即URL路径为/manager/jmxproxy/*)
允许访问Tomcat只读状态页面(即URL路径为/manager/status/*)
即 manager-gui、manager-script、manager-jmx三种角色权限无需再额外添加manager-status权限,即可直接访问路径/manager/status/*Admin
allows access to the HTML GUI
allows access to the text interface8005端口
<Server port="8005" shutdown="SHUTDOWN">
telnet 127.0.0.1 8005
SHUTDOWN
错误页面
为避免该情况,可以自定义错误页面:<error-code>404</error-code>
<location>/index.jsp</location>
删除自带信息
SpringBoot 启动慢
可以修改java.security文件中的securerandom.source值,也可以使用参数java.security.egd:java -jar app.jar -Djava.security.egd=file:/dev/./urandom
Tomcat 启动慢
可以通过配置JRE使用非阻塞的Entropy Source。
在catalina.sh中加入这么一行:-Djava.security.egd=file:/dev/./urandom
即可。
加入后再启动Tomcat,整个启动耗时下降到Server startup in 2912 ms。
2)在JVM环境中解决
打开$JAVA_PATH/jre/lib/security/java.security
这个文件,找到下面的内容:
securerandom.source=file:/dev/random
替换成securerandom.source=file:/dev/urandom
开启远程调试
CATALINA_OPTS="-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8899"
进入$TOMCAT_HOME/bin
目录下在 # OS specific support. 上面添加
export JAVA_OPTS='-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005'
RUN sed -i '1a JAVA_OPTS="$JAVA_OPTS -Xms2048m -Xmx12048m -XX:MaxNewSize=256m -XX:PermSize=128M -XX:MaxPermSize=512m -Xss512k"' ${CATALINA_HOME}/bin/catalina.sh
##配置文件优化
RUN sed -i '/<Connector port="8080"/a maxThreads="800" acceptCount="1000" maxPostSize="0" URIEncoding="UTF-8"' ${TOMCAT_HOME}/conf/server.xml
RUN sed -i 's/port="8009"/port="8009" maxThreads="800" acceptCount="1000" maxPostSize="0" URIEncoding="UTF-8"/' ${TOMCAT_HOME}/conf/server.xml
####删除匹配行的上一行
RUN sed -i 'N;/\n.*tomcatThreadPool/!P;D' ${TOMCAT_HOME}/conf/server.xml
####删除匹配行的下一行
RUN sed -i '/minSpareThreads/{n;/-->/d}' ${TOMCAT_HOME}/conf/server.xml
RUN sed -i '/redirectPort/{n;/-->/d}' ${TOMCAT_HOME}/conf/server.xml
###关闭非线程池配置
RUN sed -i '/
####
RUN sed -i '/
RUN sed -i '/
####<Connector executor="tomcatThreadPool" port="80" protocol="HTTP/1.1" connectionTimeout="20000"enableLookups="false" redirectPort="8443" URIEncoding="UTF-8" acceptCount="1000" />
##**对应的目录必须存在,否则启动会报错
RUN sed -i '/
#RUN sed -i '/
RUN sed -i '/ <Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" /> \
<Manager className="com.radiadesign.catalina.session.RedisSessionManager" \
host="myredis" \
port="6379" \
database="0" \
maxInactiveInterval="60"/> \
' ${TOMCAT_HOME}/conf/context.xml
RUN sed -i '/ <Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource" \
maxActive="100" maxIdle="30" maxWait="10000" \
username="java" password="java" driverClassName="com.mysql.jdbc.Driver" \
url="jdbc:mysql://mysql:3306/javatest"/> \
' ${TOMCAT_HOME}/conf/context.xml
RUN sed -i '/<!–/,/–>/d' ${TOMCAT_HOME}/conf/server.xml
RUN sed -i '/<!–/,/–>/d' ${TOMCAT_HOME}/conf/tomcat-users.xml修改tomcat 内存
-Xms256m -Xmx512m -XX:MaxNewSize=256m -XX:MaxPermSize=256m
window环境 startup.bat第一行
SET CATALINA_OPTS= -Xms256m -Xmx512m -XX:MaxNewSize=256m -XX:MaxPermSize=256m
在
"if [ $have_tty -eq 1 ]; then"之后增加
JAVA_OPTS="-server -Xms256m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=256m"
初始化内存:如果机器的内存足够大,可以直接将初始化内存设置为512M,如果机器内存较小可适当调小,对于运行了EJB的应用,最好不要低于128M。
最大内存:最大内存目前设置为512M.
线程内存大小:目前配置为1024KB,这也是JDK5.0后的默认配置。
对于容器下运行了多个WEB应用时,尽量将相同的JAR包转移到TOMCAT的lib下,此外还需要在JAVA OPTIONS加上如下配置:
-XX:PermSize=16m
-XX:MaxPermSize=128m
此配置表示JAVA永久保存区域(即不会被虚拟机回收)初始大小为16M,最大为128M。
添加:JAVA_OPTS=’-Xms512m -Xmx1024m’
要加“m”说明是MB,否则就是KB了,在启动tomcat时会报内存不足。
-Xms:初始值
-Xmx:最大值
-Xmn:最小值
-XX:PermSize=16m -XX:MaxPermSize=128m
此配置表示JAVA永久保存区域(即不会被虚拟机回收)初始大小为16M,最大为128M。
它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对
PermGen space进行清理,所以如果你的应用中有很多CLASS的话,就很可能出现PermGen space错误,
这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小
超过了jvm默认的大小(4M)那么就会产生此错误信息了。
解决方法: 手动设置MaxPermSize大小
在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
JAVA_OPTS="-server -XX:PermSize=128m -XX:MaxPermSize=256m”