conf/server.xml
#tomcat shutdonw 端口连接端口 输入shutdown会关闭tomcat
<Server port="8005" shutdown="SHUTDOWN">
#用户管理端 认证模式 用户名密码模式
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
#用户管理配置文件
pathname="conf/tomcat-users.xml" />
#web端口
<Connector port="8080" protocol="HTTP/1.1"
#超时时间毫秒
connectionTimeout="20000"
redirectPort="8443" />
#tomcat与apache连接的端口,使用nginx可以注释
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
#nio工作模式
#protocol="org.apache.coyote.http11.Http11Nio2Protocol"
#apr工作模式 修改8080和8009端口 需下载apr apr-devel tomcat-native
#protocol="org.apache.coyote.http11.Http11AprProtocol"
#hostname域名,appbase站点目录
<Host name="localhost" appBase="webapps"
#自动解压 #自动部署 把代码加载到jvm中
unpackWARs="true" autoDeploy="true">
#访问日志格式
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
#日志文件名称前缀
prefix="localhost_access_log" suffix=".txt"
#日志文件名称后缀 " html中的一个双引号
pattern="%h %l %u %t "%r" %s %b" />
bin/
version.sh查看tomcat和jdk的版本
catalina.sh核心脚本,开启和关闭均会调用,配置 java启动参数 ,tomcat远程管理 配置jvm参数
conf/
web.xml补充额外功能
tomcat-user.xml管理端配置文件
logs/
catalina.out #tomcat最全日志 查看 error startup finished启动的时间 被切割后不会清空
配置tomcat管理端conf/tomcat-user.xml
<role rolename="admin-gui"/>#允许访问HTML图形用户界面和状态页
<role rolename="admin-script"/>#允许访问文本界面和状态页
<role rolename="manager-gui"/>#允许访问html接口(即URL路径为/manager/html/*)
<role rolename="manager-script"/>#允许访问纯文本接口(即URL路径为/manager/text/*)
<role rolename="manager-jmx"/>#允许访问JMX代理接口(即URL路径为/manager/jmxproxy/*)
<role rolename="manager-status"/>#允许访问Tomcat只读状态页面(即URL路径为/manager/status/*)
<user username="test" password="test" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-script,admin-gui"/>
webapps/manager/META-INF/context.xml(server status manager app)
allow="\d\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1
webapps/host-manager/META-INF/context.xml(host manager)
allow="\d\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1
jvm java虚拟机关注使用内存情况
jre java开发环境
jdk java运行环境
export JAVA_HOME=/app/jdk
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export
CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
export TOMCAT_HOME=/app/tomcat
jar包 相当于把tomcat放到jar中
war包 放入webapps中自动解压
tomcat工作的三种模式
bio 一个线程处理一个请求
nio 少量线程处理大量请求
apr 处理静态资源性能,也是高并发首选模式
c8使用编译安装tomcat-native
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
export LD_RUN_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
jps -lvm 查看java的进程pid
echo ‘obase=16;10802’ |bc 转换为16进制
jstack 进程pid |grep -i 转换为16进制的线程pid
jmap -heap javapid 查看jvm内存使用情况
jmap -dump:format=b,file=/root/tomcat.bin javapid 导出jvm内存使用情况,用mat分析
bin/catalina.sh 写在一行
CATALINA_OPTS="$CATALINA_OPTS #java启动参数
-Dcom.sun.management.jmxremote #启动远程监控功能
-Dcom.sun.management.jmxremote.port=12345 #监听端口
-Dcom.sun.management.jmxremote.authenticate=false #认证用户名密码
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=111.231.78.205" #ip地址
windows连接方式
jdk/bin/jconsole
jdk/bin/jvisualvm
tomcat安全优化
- 修改shutdonw端口和口令
- 将代码存放在安装目录以外的目录
- 降权启动(监牢模式 keep in jail)su - tomcat -c “/app/tomcat/bin/startup.sh”
- 文件列表访问控制conf/web.xml
<init-param> <param-name>listings</param-name> <param-value>false</param-value> </init-param>
- 版本信息隐藏
conf/web.xml
<error-page>
<error-code>403</error-code>
<location>/forbidden.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/notfound.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/systembusy.jsp</location>
</error-page>
- server header重写
<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol" server="nginx/1.16.1" connectionTimeout="20000" redirectPort="8443" />
- 访问限制
<Context path="" docBase="/home/work/tomcat" debug="0" reloadable="false" crossContext="true"> <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="61.148.18.138,61.135.165.*" deny="*.*.*.*"/> </Context>
- 脚本权限回收 chmod 700 tomcat/bin/*.sh
- 配置完整的日志格式
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t %r %s %b %{Referer}i % {User-Agent}i %D" resolveHosts="false"/>
%{Referer}i 用户从哪里跳转过来的
%{User-Agent}i 用户客户端(浏览器)
tomcat性能优化
-
jmeter压力测试工具bin/jmeter.bat,添加线程组添加http请求添加结果树和聚合报告,基准值:吞吐量 10 左右
-
注释ajp端口
-
maxThreads=“500” #最大的线程数量200-400之间
-
acceptCount=""#当达到最大线程数量的时候 队列长度,与maxThreads 一致
-
acceptorThreadCount=“2” #分为几对 与cpu核心总数 一致或2倍 默认是1
-
minSpareThreads=“10” #空闲时候最小的线程数量
-
enableLookups=“false” #禁止DNS逆向查询
-
compression=“on” #开启 tomcat压缩功能
-
compressionMinSize=“2048” #压缩文件 最小2048字节
-
compressableMimeType=“text/html,text/plain,text/css,applicati on/javascript,application/json,application/x-font- ttf,application/x-font-otf” #压缩哪些类型的文件
-
disableUploadTimeout=“true” #关闭上传文件超时时间
jvm优化
#设置 jvm初始内存大小 (物理内存1/64) jvm最大内存大小 (物理内存的1/4 )
##修改 catalina.sh文件
JAVA_OPTS=’-Xms1024m -Xmx1024m -Xlog gc:/var/log/tomcat_gc.log’
#-Xms jvm 初始内存
#-Xmx max 最大 jvm最大内存
#一般 -Xmx 是 -Xms 2倍
#gc garbage collect 垃圾回收 定期清理 jvm内存
#-Xloggc 执行gc的时候 日志 出现故障tomcat崩溃 挂了 catalaina.out gc日志
conf/server.xml
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t %r %s %b %{Referer}i %{User-Agent}i %D" />