jvm运行时数据结构:html
jvm堆数据机构:java
-xms 初始化堆大小 默认物理内存的1/64(<1GB)
-xmx 最大堆大小 默认物理内存的1/4(<1GB),实际中建议不大于4GB
通常建议设置 -xms = -xmx 好处是避免每次在gc后,调整堆的大小,减小系统内存分配开销node
整个堆大小=年轻代大小+年老代大小+持久代大小python
新生代=1个eden区+2个suivivor区 使用-xmn来设置其大小,默认值大小为整个堆的3/8,用来存放JVM刚分配的java对象linux
老年代中通过垃圾回收没有被回收掉的对象被复制到老年代,老年代大小无配置参数web
-xx:permsize :设置持久代大小 通常和-xx:maxpermsize最大持久代大小一致,为了不gc后内存的开销
持久代存放class、method元信息,其大小与项目的规模、类、方法的数量有关。通常设置为128M就足够了,设置原则是预留30%的空间apache
tomcat安装部署bootstrap
首先到tomcat和jdk官方下载源码包vim
[root@linux-node1 ~]$ cd /usr/local/ [root@linux-node1 local]$ ll -rw-r--r-- 1 root root 9532698 Mar 5 21:50 apache-tomcat-8.5.29.tar.gz -rw-r--r-- 1 root root 354635831 Mar 19 13:29 jdk-9.0.4_linux-x64_bin.tar.gz
安装jdk和tomcattomcat
[root@linux-node1 local]$ tar xf jdk-9.0.4_linux-x64_bin.tar.gz [root@linux-node1 local]$ tar xf apache-tomcat-8.5.29.tar.gz [root@linux-node1 local]$ ln -s /usr/local/jdk-9.0.4 /usr/local/jdk [root@linux-node1 local]$ ln -s /usr/local/apache-tomcat-8.5.29 /usr/local/tomcat
建立管理jdk和tomcat的用户,并对此用户授予全部者权限
[root@linux-node1 local]# useradd -u 601 tomcat [root@linux-node1 local]# chown tomcat.tomcat /usr/local/jdk -R [root@linux-node1 local]# chown tomcat.tomcat /usr/local/tomcat -R
建立jdk和tomcat的系统环境变量
[root@linux-node1 local]# vim /etc/profile.d/tomcat.sh export JAVA_HOME=/usr/local/jdk export TOMCAT_HOME=/usr/local/tomcat export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$TOMCAT_HOME/bin:$PATH export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/to ols.jar
加载这个脚本,使tomcat和jdk的环境变量生效 [root@linux-node1 ~]# source /etc/profile.d/tomcat.sh
为了安全起见,切换到tomcat用户环境,使用tomcat用户来启动tomcat
[root@linux-node1 local]# su - tomcat [tomcat@linux-node1 ~]$ catalina.sh start [tomcat@linux-node1 ~]$ ps -ef|grep java |grep tomcat tomcat 16777 1 70 16:19 pts/1 00:00:04 /usr/local/jdk/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dignore.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomca -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start #固然也能够取tomcat进程的pid号,这样就能够建立一个管理tomcat的脚本 [tomcat@linux-node1 ~]$ ps -ef|grep java |grep tomcat|grep -v grep |awk '{print $2}' 16777 [tomcat@linux-node1 ~]$ netstat -lntup tcp6 0 0 127.0.0.1:8005 :::* LISTEN 16777/java tcp6 0 0 :::8009 :::* LISTEN 16777/java tcp6 0 0 :::8080 :::* LISTEN 16777/java
可以正常启动tomcat后,就能够建立一个脚原本管理tomcat了,实现经过脚原本启动tomcat或关闭tomcat再或重启tomcat等。
经过设置catalina.sh来配置远程监控jvm
vim /usr/local/tomcat/bin/catalina.sh CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=22222 -Djava.rmi.server.hostname=192.168.182.170"
tomcat 在生产环境下安全规范
一、telnet端口的修改<Server port="8005" shutdown="SHUTDOWN"> 将8005端口修改或shutdown指令字符创作修改好比shutdown="dangji"
若是这个端口没有修改,能够经过这个端口telnet上来关闭tomcat服务:telnet 192.168.182.170 8005 进入后输入SHUTDOWN便可关闭tomcat服务。
二、ajp链接端口的保护:<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
修改默认端口8009为不易冲突的大于1024端口
三、禁用管理端
删除默认安装目录下的conf/tomcat-users.xml文件,重启tomcat后将会自动生成新的文件
删除默认安装目录下的/webapps下默认全部的目录和文件
将tomcat应用根目录配置为tomcat安装目录之外的目录。例如:在Host标签下添加
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/usr/local/tomcat/webroot" debug="
0" reloadable="false" crossContext="true">
</Context>
四、文件列表的访问控制
conf/web.xml文件中的default部分listings的配置必须为false,默认是false。表示禁止将文件展现出来
五、版本信息隐藏
修改web.xml重定向40三、404以及500等错误指定的错误页面,由于这些错误页面上会显示版本信息,因此要修改错误页面的重定向
六、server header重写
在HTTP Connector配置中加入server的配置
七、访问限制
经过配置,限定访问的ip来源
八、起停脚本的权限收回
去除其余用户对tomcat的bin目录下shutdown.sh、startup.sh、catalina.sh的可执行权限
chmod -R 744 tomcat/bin/*
九、访问日志格式的规范
开启tomcat默认访问日志中的Referer和User-Agent记录
tomcat性能优化:
tomcat线程优化:
<Connector port="80" protocol="HTTP/1.1" maxThreads="600" minSpareThreads="100" maxSpareThreads="500" acceptCount="700" connectionTimeout="20000" redirectPort="8443" />
maxThreads="600" ///最大线程数
minSpareThreads="100"///初始化时建立的线程数
maxSpareThreads="500"///一旦建立的线程超过这个值,Tomcat就会关闭再也不须要的socket线程。
acceptCount="700"//指定当全部可使用的处理请求的线程数都被使用时,能够放处处理队列中的请求数,超过这个数的请求将不予处理
能够经过命令:java -xx:+PrintFlagsFinal 显示java所支持的全部的参数及参数对应的默认值
jvm内存调优:
vim /usr/local/tomcat/bin/catalina.sh JSSE_OPTS="-Xmx4000M -Xms4000M -Xmn600M -XX:PermSize=128M -XX:MaxPermSize=128M -Xss256K -XX:+DisableExplicitGC -XX:SurvivorRatio=1 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled -XX:LargePageSizeInBytes=128M -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+PrintClassHistogram -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -Xloggc:log/gc.log "
配置说明:
参考文章:http://www.open-open.com/lib/view/open1324736648468.html
http://blog.chinaunix.net/uid-743704-id-2681326.html