在生产环境中tomcat内存设置不好很容易出现jvm内存溢出。
1、 linux下的tomcat:
修改TOMCAT_HOME/bin/catalina.sh
位置cygwin=false前。
JAVA_OPTS="-server -Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=128m"
JAVA_OPTS="-server -Xms256m -Xmx512m -Xss1024K -XX:PermSize=128m -XX:MaxPermSize=256m"
2、配置tomcat将session保存到redis中:
在context.xml配置(Valve标签一定要在Manager标签前面):
<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />
<Manager className="com.radiadesign.catalina.session.RedisSessionManager"
host="192.168.0.150" #redis服务器的IP地址
port="6379"
database="0"
maxInactiveInterval="60" />
3、修改tomcat-user.xml
<role rolename="manager-gui"/>
<role rolename="manager"/>
<role rolename="admin"/>
<role rolename="admin-gui"/>
<user username="admin" password="admin" roles="admin-gui,admin,manager-gui,manager"/>
4、server.xml
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="800" minSpareThreads="50"/>
<Connector port="8080"
protocol="HTTP/1.1"
maxHttpHeaderSize="8192"
maxThreads="1000"
minSpareThreads="100"
maxSpareThreads="1000"
minProcessors="100"
maxProcessors="1000"
enableLookups="false"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
connectionTimeout="20000"
URIEncoding="utf-8"
acceptCount="1000"
redirectPort="8443"
disableUploadTimeout="true"/>
5、tomcat7在一台机器起上启动多个tomcat实例:
!注意修改server注意修改server.xml中的8080、8005、8009三个端口
tomcat8的不同,还需要改的,
!如果启动时报错:ERROR:transport error 202:bind faild :Address already used
解决方式:注释掉catalina.sh中的declare项,一般在第一行。注释掉或者将Address的
8000改成不同的端口。
6、如果将tomcat下的tmp目录删除了,或tomcat启动时停在ROOT处,不能正常启动。
解决方式:vim catalina.sh
CATALINA_OPTS='-Djava.security.egd=file:/dev/./urandom'
如果想要全局使用上述的修改,可以修改java的配置文件:$JAVA_HOME/jre/lib/security/java.security
securerandom.source=file:/dev/./urandom
7、java环境配置,添加到 /etc/profile的最后面
JAVA_HOME=/usr/local/java
JRE_HOME=/usr/local/java/jre
JAVA_BIN=/usr/local/java/bin
JRE_BIN=$JRE_HOME/bin
PATH=$PATH:$JAVA_BIN:$JRE_BIN
CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JRE_HOME JRE_BIN JAVA_BIN PATH CLASSPATH
8、使用jmx监控tomcat
CATALINA_OPTS="-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=172.17.164.155
-Dcom.sun.management.jmxremote.port=12358"
9、一、全局设置,对Tomcat下所有应用生效
server.xml中添加下面一行,重启服务器即可:
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.1.*" deny=""/>
此行放在</Host>之前。
例:
1,只允许192.168.1.10访问:
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.1.10" deny=""/>
2,只允许192.168.1.*网段访问:
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.1.*" deny=""/>
3,只允许192.168.1.10、192.168.1.30访问:
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.1.10,192.168.1.30" deny=""/>
4,根据主机名进行限制:
<Valve className="org.apache.catalina.valves.RemoteHostValve" allow="abc.com" deny=""/>
10、开启tomcat远程调试端口
首先检查要使用的端口是否被占用:
#lsof -i:8899
没有输出,则证明没有被占用。
在startup.sh里面添加如下配置:
declare -x CATALINA_OPTS="-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8899"
重启服务生效。
二、局部设置,仅对具体的应用生效
根据项目配置情况进行设置:
1,使用conf目录下xml文件进行配置${tomcat_root}confproj_1.xml
2,直接在server.xml中进行设置${tomcat_root}confserver.xml
在上述文件对应项目的</Context>前增加下面一行:
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.1.*" deny=""/>
特别需求:测试版本不想提供别人访问
打开tomcat6confserver.xml文件
如果是要限制整个站点别人不能访问,则要将
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.1.*,192.168.2.*,*.mysite.com" deny=""/>
加入到<HOST></HOST>标签中
如果是要限制某个站点不能被访问,则要加入到<Context>里面就可以。
<Context path="/myweb" reloadable="true" docBase="E: omcat6webappsmyweb">
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.13.110,192.168.1.*,220.250.13.21" deny=""/>
</Context>
RemoteHostValve
根据主机名进行限制:
<Valve className="org.apache.catalina.valves.RemoteHostValve" allow="tmachine1" deny=""/>
修改文件:
tomcat/conf/server.xml
通过tomcat限制ip访问
<Engine name="Standalone" ...>
<Valve className="org.apache.catalina.valves.RemoteHostValve"
allow="*.mycompany.com,*.a.com"/> 域名限制
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
deny="192.168.1.*"/> IP限制
</Engine>
重启tomcat升效