学习Tomcat(二)
一、 Java简介
- JDK: 面向开发人员使用的SDK,提供Java的开发环境和运行环境
- SDK: 软件开发包,包括函数库、编译程序等
- JRE: Java的运行环境,面向Java的使用者,不是开发者
二、 Tomcat安装
- 1、软件准备
- JDK下载:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
- Tomcat下载:http://tomcat.apache.org/
- 2、部署java环境
- # mkdir /application/tools/ -p
- # cd /application/tools/
- # tar xf jdk-8u60-linux-x64.tar.gz -C /application/
- # ln -s /application/jdk1.8.0_60 /application/jdk
- # sed -i.ori '$a export JAVA_HOME=/application/jdk\n
- export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH\n
- export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar'
- /etc/profile
- # source /etc/profile
- # java -version
- 3、安装Tomcat
- # tar xf apache-tomcat-8.0.27.tar.gz -C /application/
- # ln -s /application/apache-tomcat-8.0.27 /application/tomcat
- # echo 'export TOMCAT_HOME=/application/tomcat' >> /etc/profile
- # source /etc/profile
- # useradd -u 601 tomcat
- # chown -R tomcat.tomcat /application/jdk/ /application/tomcat/
- # tail -4 /etc/profile
- export JAVA_HOME=/application/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=/application/tomcat
- 4、Tomcat目录介绍
- # tree -L 1 /application/tomcat/
- ├── bin #管理Tomcat脚本文件(.bat和.sh)
- ├── conf #配置文件(XML和DTD)
- ├── lib #web应用访问的JAR包
- ├── LICENSE
- ├── logs #Catalina和应用的日志文件
- ├── NOTICE
- ├── RELEASE-NOTES
- ├── RUNNING.txt
- ├── temp #临时文件
- ├── webapps #Web应用程序根目录
- └── work #JSP编译出的Servlet的.java和.class文件
- # ll webapps/
- drwxr-xr-x 14 root root 4096 docs #tomcat帮助文档
- drwxr-xr-x 6 root root 4096 examples #web应用实例
- drwxr-xr-x 5 root root 4096 host-manager #管理
- drwxr-xr-x 5 root root 4096 manager #管理
- drwxr-xr-x 3 root root 4096 ROOT #默认网站根目录
- 5、启动Tomcat
- # /application/tomcat/bin/startup.sh #启动程序
- # /application/tomcat/bin/shutdown.sh #关闭程序
- # netstat -tunlp | grep java
- # ps -ef | grep java
- 6、访问网站
- 网址: http://192.168.1.11:8080/
- 7、Tomcat日志
- # tailf /application/tomcat/logs/catalina.out
- 8、tomcat 启动和停止的方法
- 1) 启动Tomcat
- 方法1
- # /opt/tomcat/bin/startup.sh
- 方法2
- # /opt/tomcat/bin/catalina start
- 2) 停止Tomcat
- 方法1
- # /opt/tomcat/bin/shutdown.sh
- 方法2
- # /opt/tomcat/bin/catalina stop
- 3) 重启Tomcat
- 方法1
- # /opt/tomcat/bin/shutdown.sh
- # /opt/tomcat/bin/startup.sh
- 方法2
- # /opt/tomcat/bin/catalina restart
- 方法3
- # /opt/tomcat/bin/catalina stop
- # /opt/tomcat/bin/catalina start
三、Tomcat配置文件
1、配置文件介绍
- server.xml #主配置文件
- tomcat-users.xml #管理用户配置文件
2、Tomcat管理(生产环境不要用)
- # vim /application/tomcat/conf/tomcat-users.xml
- <role rolename="manager-gui"/>
- <role rolename="admin-gui"/>
- <user username="tomcat" password="123456" roles="manager-gui,admin-gui"/>
- # /application/tomcat/bin/shutdown.sh
- # /application/tomcat/bin/startup.sh
3、主配置文件详解
- 1、配置文件结构
- <server> #顶级组件,位于整个配置的顶层
- <service> #容器类组件,可包含其它组件
- <connector /> #连接器组件,用户请求连接tomcat
- <engine> #容器类组件,可包含其它组件
- <host> #容器类组件,可包含其它组件
- <context></context> #容器类组件,可包含其它组件
- </host>
- <host>
- <context></context>
- <Valve /> #被嵌套类组件,位于一个容器中,不能包含其他组件
- </host>
- </engine>
- </service>
- </server>
- 2、配置文件注释
- <?xml version='1.0' encoding='utf-8'?>
- <!--
- <Server> #实例的顶层元素,代表整个容器
- port: #关闭tomcat端口
- shutdown: #关闭tomcat字符串
- -->
- <Server port="8005" shutdown="SHUTDOWN">
- <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
- <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
- <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
- <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
- <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
- <GlobalNamingResources>
- <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" />
- </GlobalNamingResources>
- <!--
- service服务组件
- -->
- <Service name="Catalina">
- <!--
- connector #接收用户请求
- port: #服务监听端口号
- address: #服务监听地址,默认0.0.0.0
- protocol: #连接器使用的协议,支持HTTP和AJP(ajp:httpd反向代理tomcat时用)
- minProcessors #最小处理请求的线程数
- maxProcessors #最大处理请求的线程数
- enableLookups #是否开启DNS查询,true:返回主机名,false:返回ip
- redirectPort #https端口号
- acceptCount #队列的请求数
- connectionTimeout #连接超时时间,单位:毫秒
- -->
- <Connector port="8080" protocol="HTTP/1.1"
- connectionTimeout="20000"
- redirectPort="8443" />
- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
- <!--
- engine #核心容器组件,catalina引擎,接收并处理用户请求
- defaultHost #默认处理请求的主机名
- -->
- <Engine name="Catalina" defaultHost="localhost">
- <!--
- Realm #存放用户名,密码及role的数据库
- -->
- <Realm className="org.apache.catalina.realm.LockOutRealm">
- <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
- resourceName="UserDatabase"/>
- </Realm>
- <!--
- host #一个虚拟主机
- name: #主机名
- appBase: #应用程序的目录,app的目录,可相对路径,也可绝对路径
- unpackWARs: #是否自动解压war包,true:不解压,false:解压
- autoDeploy: #是否自动部署war包
- xmlValidation: #是否启动xml的校验功能,一般不效验
- xmlNamespaceAware: #是否检测名称空间,一般不检测
- -->
- <Host name="localhost" appBase="webapps"
- unpackWARs="true" autoDeploy="true">
- <!--
- Context #一个web应用程序,通常为WAR文件
- docBase #webapp的war包目录,相对路径或绝对路径
- path #webapp的url的前缀,url:http://localhost:8080/path/webapp
- reloadable #自动加载新的应用,目录:/WEB-INF/lib和/WEB-INF/classes
- -->
- <Context path="" docBase="" debug=""/>
- <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
- prefix="localhost_access_log" suffix=".txt"
- pattern="%h %l %u %t "%r" %s %b" />
- </Host>
- </Engine>
- </Service>
- </Server>
4、组件详解
server | port | 关闭tomcat端口 |
shutdown | 关闭tomcat字符串 | |
service | name | 服务的名称,默认:Catalina |
Connector | port | 服务监听端口号 |
address | 服务监听地址,默认0.0.0.0 | |
protocol | 连接器协议类型,支持HTTP(BIO,NIO,NIO2,APR)和AJP(httpd反向代理tomcat时用) | |
minProcessors | 最小处理请求的线程数 | |
maxProcessors | 最大处理请求的线程数 | |
enableLookups | 是否开启DNS查询,true:返回主机名,false:返回ip | |
redirectPort | https端口号 | |
acceptCount | 队列的请求数 | |
connectionTimeout | 连接超时时间,单位:毫秒 | |
maxThreads | 最大并发连接数 | |
allowTrace | 是否跟踪请求转发过程,一般不跟踪 | |
asyncTimeout | 一部分访问超时时间,默认是30000(30秒) | |
maxHeaderCount |
最大的headers信息数量,默认100,0为不限制 |
|
maxParameterCount | 最大的参数数量,默认1000,0为不限制 | |
maxPostSize | 最大POST请求提交数据包,默认为2M | |
maxSavePostSize | SSL验证最大缓存大小,默认是4k | |
scheme | 协议名字,默认http | |
secure | 是否用安全模式通信,默认false | |
useIPVHosts | 是否用IP指向虚拟主机,默认false | |
xpoweredBy | 是否添加X-Powered-By头信息 | |
executor | 指定使用线程池,默认使用内置的线程池 | |
acceptorThreadCount | cpu数量 | |
compressableMimeType | 压缩类型 | |
compression | 是否开启压缩 | |
compressionMinSize | 压缩文件最小值 | |
connectionUploadTimeout | 上传文件的超时时间 | |
disableUploadTimeout | 是否禁用上传超时时间 | |
keepAliveTimeout | Keep-Alive连接超时时间,默认和connectionTimeout一致 | |
maxConnections | 最大连接数,NIO:10000,APR:8192(windows:1024) | |
maxKeepAliveRequests | 最大保持活跃的连接数,默认100 | |
minSpareThreads | 最小空闲线程数 | |
maxSpareThreads | 最大空闲线程数 | |
maxHttpHeaderSize | 请求和响应的HTTP头的最大大小,单位:字节 | |
tcpNoDelay | 可以提高性能,默认是true | |
noCompressionUserAgents | 对于以下的浏览器,不启用压缩 | |
URIEncoding | URL编码字符集 | |
allowTrace | 是否允许HTTP的TRACE方法,默认:false | |
emptySessionPath | 用户的所有路径是否设置为/(跟目录),默认为false | |
useBodyEncodingForURI | 是否用contentType中指定的编码来取代URIEncoding,默认:false | |
bufferSize | 连接器缓冲区的大小,单位:字节,默认缓存区大小:2048字节 | |
socketBuffer | Socket输出缓冲区的大小,单位:字节,默认:9000字节,-1:禁止缓冲 | |
threadPriority | JVM中请求处理线程优先级,默认:NORMAL-PRIORITY | |
useURIValidationHack | 是否检查不必要的URL,false:不检查,提升性能 | |
Engine | defaultHost | 默认接收的主机名称 |
name | Engine组件的名称,提供日志记录,名称不能和其他Engine冲突 | |
host | name | 主机名 |
appBase | 应用程序的目录,app的目录,可相对路径,也可绝对路径 | |
unpackWARs | 是否自动解压war包,true:不解压,false:解压 | |
autoDeploy | 是否自动部署war包 | |
xmlValidation | 是否启动xml的校验功能,一般不效验 | |
xmlNamespaceAware | 是否检测名称空间,一般不检测 | |
Values | directory | 日志保存的目录 |
prefix | 指定log文件的前缀 | |
suffix | 指定log文件的后缀 | |
pattern | 日志内容格式 | |
fileDateFormat | 自定义时间戳,作为日志suffix的前缀 | |
timestamp | 文件名是否加入系统时间戳,true:开启 | |
AccessLogValve | 访问日志Valve | |
ExtendedAccessValve | 扩展功能的访问日志Valve | |
JDBCAccessLogValve | 通过JDBC将访问日志,发送到数据库 | |
RequestDumperValve | 请求转储Valve | |
RemoteAddrValve | 基于远程地址的访问控制 | |
RemoteHostValve | 基于远程主机名的访问控制 | |
SemaphoreValve | 控制Tomcat主机任何容器的并发访问量 | |
JvmRouteBinderValve | 配置多个Tomcat,以Apache通过mod_proxy或mod_jk作为前端的集群架构中,当停止某节点时,通过此Valve将请求定向至备用节点,使用此Valve,必须使用JvmRouteSessionIDBinderListener | |
ReplicationValve | 专用于Tomcat集群架构中,某个请求的session发生更改时,触发session数据在各节点间进行复制 | |
SingleSignOn | 将两个或多个需要对用户进行认证,webapp在认证用户时,即一次认证,可访问所有连接在一起的webapp | |
ClusterSingleSingOn | SingleSignOn的扩展,专用于Tomcat集群中,要结合ClusterSingleSignOnListener进行工作 | |
Context | docBase | webapp的war包目录,相对路径或绝对路径 |
path | webapp的url的前缀,url: http://localhost:8080/path/webapp | |
reloadable | 自动加载新的应用,目录:/WEB-INF/lib和/WEB-INF/classes | |
Realm | JAASRealm | 基于Java Authintication and Authorization Service实现用户认证 |
JDBCRealm | 通过JDBC访问某关系型数据库表实现用户认证 | |
JNDIRealm | 基于JNDI使用目录服务实现认证信息的获取 | |
MemoryRealm | 查找tomcat-user.xml文件实现用户信息的获取 | |
UserDatabaseRealm | 基于UserDatabase文件(通常是tomcat-user.xml)实现用户认证 |
5、管理tomcat脚本
- # vim tomcat.sh
- #!/bin/sh
- JAVA_HOME=/application/jdk
- CATALINA_HOME=/application/tomcat
- usage(){
- echo "$0 {start|stop|restart}"
- exit 1
- }
- [ $# -ne 1 ]&& usage
- start_tomcat(){
- $CATALINA_HOME/bin/startup.sh
- }
- stop_tomcat(){
- TPID=$(ps -aux|grep java|grep tomcat|grep -v 'grep'|awk '{print $2}')
- kill -9 $TPID
- sleep 5;
- TSTAT=$(ps -aux|grep java|grep tomcat|grep -v 'grep'|awk '{print $2}')
- if [ -z $TSTAT ];then
- echo "tomcat stop"
- else
- kill -9 $TSTAT
- fi
- cd $CATALINA_HOME
- rm temp/* -rf
- rm work/* -rf
- }
- case $1 in
- start)
- start_tomcat
- ;;
- stop)
- stop_tomcat
- ;;
- restart)
- stop_tomcat
- sleep 5
- start_tomcat
- ;;
- *)
- usage
- ;;
- esac
四、Tomcat性能优化
1、内存优化
- -server #以server模式运行(默认client模式)
- -Xms #初始堆内存大小
- -Xmx #最大堆内存大小
- –Xmn #年轻代大小(整个堆大小=年轻代大小+年老代大小+持久代大小)
- -XX:NewSize #设置年轻代大小(for 1.3/1.4版本)
- -XX:MaxNewSize #年轻代最大值(for 1.3/1.4)
- -XX:PermSize #设置持久代初始值
- -XX:MaxPermSize #设置持久代最大值
- -Xss #每个线程的堆栈大小(JDK版本5.0后,每个线程堆栈大小:1M)
- -XX:NewRatio #年轻代与年老代的比值
- -XX:SurvivorRatio #Eden区与Survivor区的大小比值
- -XX:LargePageSizeInBytes #内存页的大小,设置过大,会影响Perm的大小
- -XX:+UseFastAccessorMethods #原始类型的快速优化(get,set方法转成本地代码)
- -XX:+DisableExplicitGC #关闭System.gc()
- -XX:MaxTenuringThreshold #垃圾最大年龄(该参数在串行GC时才有效)
- -XX:+AggressiveOpts #加快编译
- -XX:+UseBiasedLocking #锁机制的性能改善
- -XX:MetaspaceSize #Metaspace的初始大小
- -XX:MaxMetaspaceSize #Metaspace的最大值
- -Xnoclassgc #禁用垃圾回收
- -XX:PretenureSizeThreshold #对象超过多大,直接在旧生代分配
- -XX:TLABWasteTargetPercent #TLAB占eden区的百分比
- -XX:+CollectGen0First #FullGC时是否先YGC
- 并行收集器
- -XX:+UseParNewGC #对年轻代采用多线程并行回收(gc)
- -XX:ParallelGCThreads #并行收集器的线程数
- -XX:+UseParallelOldGC #对年老代采用多线程并行回收(gc)
- -XX:MaxGCPauseMillis #每次年轻代垃圾回收的最长时间(最大暂停时间)
- -XX:+UseAdaptiveSizePolicy #自动选择年轻代区大小和相应的Survivor区比例
- -XX:GCTimeRatio #垃圾回收占程序运行的时间百分比
- -XXUseParallelGC #垃圾回收设置为并行收集器
- CMS
- -XX:+UseConcMarkSweepGC #用CMS收集器对年老代进行GC,CMS收集器优势停顿时间少,适用停顿时间短的前台应用
- -XX:+AggressiveHeap #用大量的物理内存,忽略Xmx参数
- -XX:CMSFullGCsBeforeCompaction #多少次后进行内存压缩
- -XX:+CMSParallelRemarkEnabled #开启降低标记停顿
- -XX:+UseCMSCompactAtFullCollection #CMS收集器完成垃圾回收后,是否对年老代的压缩整理
- -XX:+UseCMSInitiatingOccupancyOnly #用手动定义初始化开始CMS收集(指定阈值回收,不指定jvm会自动调整)
- -XX:CMSInitiatingOccupancyFraction=70 #年老代满70%开始CMS收集
- -XX:CMSInitiatingPermOccupancyFraction #持久代满多少百分比,开始CMS回收
- -XX:+CMSIncrementalMode #设置为增量模式(用于单CPU)
- -XX:+CMSClassUnloadingEnabled #在用CMS收集进行垃圾回收时,同时清理持久代不使用的class(类)
- -XX:ParallelCMSThreads #设定CMS的线程数
- 辅助信息
- -XX:+PrintGC #输出JVM gc日志
- -XX:+PrintGCDetails #输出JVM gc详情
- -XX:+PrintGCTimeStamps #gc日志中输出GC的时间戳
- -XX:+PrintGC:PrintGCTimeStamps #gc日志中输出GC的时间戳(混合模式)
- -XX:+PrintGCApplicationStoppedTime #输出垃圾回收期间,程序暂停的时间(可与上面一起用)
- -XX:+PrintGCApplicationConcurrentTime #输出每次垃圾回收前,程序未中断的执行时间(可与上面一起用)
- -XX:+PrintHeapAtGC #输出GC前后的详细堆栈信息
- -XX:+PrintClassHistogram #输出实例的数量以及空间大小
- -XX:+PrintTLAB #输出TLAB空间的使用情况
- -XX:+PrintTenuringDistribution #输出每次minor GC后,新的存活周期的阈值
- -verbose:gc #输出JVM gc日志
- -Xloggc:${CATALINA_BASE}/logs/gc.log #指定gc日志目录
- -XX:+PrintGCDateStamps #gc日志中输出GC的时间戳(日期格式: 2013-05-04T21:53:59.234+0800)
- -XX:+HeapDumpOnOutOfMemoryError #在发生OOM时dump堆内存便于排查问题
- -XX:HeapDumpPath=${CATALINA_BASE}/logs #指定堆内存dump文件导出路径
- -Djava.awt.headless=true #一般在最后,图表工具的展示
2、连接器优化
- 主要优化connector标签相关参数,用于处理用户的访问请求
1、通用配置- # vim server.xml
- <Connector port="8080" protocol="HTTP/1.1"
- #编码格式
- URIEncoding="UTF-8"
- #线程配置
- maxThreads="1000" maxProcessors="1000" minProcessors="5" minSpareThreads="100" maxSpareThreads="1000
- #连接数配置
- maxConnections="1000" connectionTimeout="20000" acceptCount="1000"
- enableLookups="false" disableUploadTimeout="true" useURIValidationHack="false"
- #启用压缩的配置
- compression="on" compressionMinSize="2048" noCompressionUserAgents="gozilla, traviata"
- compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
- #其他配置
- maxPostSize="10485760" maxHttpHeaderSize="8192" tcpNoDelay="true" acceptorThreadCount="8" redirectPort="8443" />
- 2、https配置示例
- # vim server.xml
- <Connector port="8443" protocol="HTTP/1.1"
- URIEncoding="UTF-8" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" disableUploadTimeout="true"
- connectionTimeout="20000"acceptCount="300" maxThreads="300" maxProcessors="1000" minProcessors="5"
- useURIValidationHack="false" compression="on" compressionMinSize="2048"
- compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
- SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS"
- keystoreFile="/home/tomcat/ssl/test.jks" keystorePass="123456" />
3、线程池优化
- 1、配置
- # vim server.xml
- <Connector port="8066" executor="tomcatThreadPool" protocol="org.apache.coyote.http11.Http11NioProtocol"
- connectionTimeout="20000" enableLookups="false" maxPostSize="10485760" URIEncoding="UTF-8" acceptCount="100"
- useBodyEncodingForURI="true" acceptorThreadCount="2" disableUploadTimeout="true" maxConnections="10000" SSLEnabled="false"
- />
- <Executor name="tomcatThreadPool"
- namePrefix="catalina-exec-" maxThreads="1000" minSpareThreads="100" maxIdleTime="60000"
- maxQueueSize="Integer.MAX_VALUE" prestartminSpareThreads="false" threadPriority="5"
- className="org.apache.catalina.core.StandardThreadExecutor"/>
- 2、参数详解
- name #线程池名,在 Connector中指定
- namePrefix #创建每个线程名的前缀,线程名: namePrefix + threadNumber
- maxThreads #线程池最大线程数
- minSpareThreads #活跃线程数
- maxIdleTime #线程空闲时间,默认:6000(1分钟),单位:毫秒
- maxQueueSize #被执行前最大队列数,默认:Int的最大值,一般不用改
- prestartminSpareThreads #启动线程池时是否启动minSpareThreads部分线程,默认:false(不启动)
- className #线程池实现类,默认实现类:org.apache.catalina.core.StandardThreadExecutor
4、优化IO模式
- 1、io模式介绍
- BIO(阻塞型IO)、NIO、NIO2和APR
- 2、区别
- BIO: BIO(Blocking I/O),阻塞式I/O,使用传统的Java I/O操作(java.io包及其子包),默认:bio模式,性能低,连接数少
- NIO: NIO(New I/O),基于缓冲区,非阻塞I/O,提供java API(java.nio包及其子包),并发高,适合连接数多且短(聊天),后台耗时完成请求的操作
- APR: APR(Apache Portable Runtime)JNI调用HTTP动态库处理文件,提高静态文件和SSL的处理,连接数多且长(相册),从系统层面解决IO堵塞
- 3、修改io模式
- <Connector port="8066" protocol="org.apache.coyote.http11.Http11NioProtocol" redirectPort="8448"/>
- protocol="HTTP/1.1" #BIO
- protocol="org.apache.coyote.http11.Http11NioProtocol" #NIO
- protocol="org.apache.coyote.http11.Http11Nio2Protocol" #NIO2
- protocol="org.apache.coyote.http11.Http11AprProtocol" #APR
5、监听器优化
- 1、Listener配置
预防JRE内存泄漏,默认无需配置- <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
6、优化总结
- 1、如何分配JVM的内存空间
- 2、应该使用什么类型的垃圾回收器
- JVM产生的垃圾需要回收、回收有不同的回收器,JVM的调优需要了解各个垃圾回收机制的原理
- 终极目标: 降低FULL GC出现的频率(FULL GC出现会导致应用的暂停服务)
五、监控Tomcat
1、使用jconsole来监控jvm
- 1、安装jconsole
- 在Windows平台安装jconsole图形化软件
- 2、配置tomcat的远程连接
- # vim bin/catalina.sh
- CATALINA_OPTS="$CATALINA_OPTS
- -Dcom.sun.management.jmxremote #启用远程监控JMX
- -Dcom.sun.management.jmxremote.port=12345 #jmx远程端口
- -Dcom.sun.management.jmxremote.authenticate=false #不开启用户密码认证
- -Dcom.sun.management.jmxremote.ssl=false #不开启ssl(https)
- -Djava.rmi.server.hostname=192.168.230.130" #tomcat的IP地址
3、单击java目录bin下的JConsole.exe可执行文件
学习Tomcat(二)的更多相关文章
- 烂泥:学习tomcat之通过shell批量管理多个tomcat
本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb 公司的业务是使用tomcat做web容器,为了更有效的利用服务器的性能,我们一般部署多个 ...
- Shell 学习(二)
目录 Shell 学习(二) 1 设置环境变量 1.1 基本语法 1.2 实践 2 位置参数变量 2.1 介绍 2.2 基本语法 2.3 位置参数变量应用实例 3 预定义变量 3.1 基本介绍 3.2 ...
- crawler4j 学习(二)
crawler4j 学习(二) 实现控制器类以制定抓取的种子(seed).中间数据存储的文件夹.并发线程的数目: public class Controller { public static voi ...
- 从零开始学习jQuery (二) 万能的选择器
本系列文章导航 从零开始学习jQuery (二) 万能的选择器 一.摘要 本章讲解jQuery最重要的选择器部分的知识. 有了jQuery的选择器我们几乎可以获取页面上任意的一个或一组对象, 可以明显 ...
- Android Animation学习(二) ApiDemos解析:基本Animators使用
Android Animation学习(二) ApiDemos解析:基本Animatiors使用 Animator类提供了创建动画的基本结构,但是一般使用的是它的子类: ValueAnimator.O ...
- AspectJ基础学习之二搭建环境(转载)
AspectJ基础学习之二搭建环境(转载) 一.下载Aspectj以及AJDT 上一章已经列出了他的官方网站,自己上去download吧.AJDT是一个eclipse插件,开发aspectj必装,他可 ...
- WPF的Binding学习笔记(二)
原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...
- AJax 学习笔记二(onreadystatechange的作用)
AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...
- MyBatis学习系列二——增删改查
目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring 数据库的经典操作:增删改查. 在这一章我们主要说明一下简单的查询和增删改, ...
- MyBatis学习 之 二、SQL语句映射文件(2)增删改查、参数、缓存
目录(?)[-] 二SQL语句映射文件2增删改查参数缓存 select insert updatedelete sql parameters 基本类型参数 Java实体类型参数 Map参数 多参数的实 ...
随机推荐
- Weblogic补丁升级常见问题
转至:https://blog.csdn.net/weixin_44659716/article/details/106804177 常用企业级版本:Weblogic 11g(weblogic10.3 ...
- Sonic+p4(1)
知识: Docker容器(打包环境加应用) 静态镜像运行container docker run(start)形成拓扑 目的:switch1获取switch2的网络统计数据 start.sh启动拓扑, ...
- 查询性能提升3倍!Apache Hudi 查询优化了解下?
从 Hudi 0.10.0版本开始,我们很高兴推出在数据库领域中称为 Z-Order 和 Hilbert 空间填充曲线的高级数据布局优化技术的支持. 1. 背景 Amazon EMR 团队最近发表了一 ...
- C# 反编译工具之dnSpy
下载地址:https://github.com/0xd4d/dnSpy/releases无需安装,和 ILSPY同门,感觉比ILSPY还强大 直接把dll拖拽到程序集资源管理器里面就可以啦
- 【数据科学基础复习 - 3】PCA主成分分析
本文仅就PCA原理及应用作一简单总结, 具体的数学原理等考试后再补上. 1. PCA推导 目标 对于正交空间中的样本点,现想将其投影到一个低维超平面中使得所有样本可在该平面中得到恰当的表达. 什么叫恰 ...
- 线上| 10万奖金!Greaterwms/DVAdmin插件开发者现金激励活动
为激励广大开发者创作精神,Greaterwms/DVadmin插件开发者现金激励活动现已上线! 什么是GreaterWMS 完全开源仓储管理软件,遵循Apache License 2.0协议,前后端分 ...
- 调用Visual Studio的cl.exe编译C/C++程序
@ 目录 调用Visual Studio的cl.exe编译C/C++程序 前言 1.查看VS的路径 2.添加环境变量 3.查看设置是否生效 4.配置Notepad++ 调用Visual Studio的 ...
- SpringCloudStream(RabbitMQ&Kafka)&Spring-Kafka配置使用
目录 是什么 解决问题 使用方式 创建生产者项目 pom yml 生产消息方法 接口 实现 创建消费者项目 pom yml 接收消息方法 重复消费 消费者yml 持久化 消费者负载个性配置(预拉取) ...
- tep完整教程帮你突破pytest
持续维护的教程 tep教程会随着版本更新或经验积累,持续维护在电子书中,最新的最全的内容请锁定这篇文章[最新]tep完整教程帮你突破pytest: https://dongfanger.gitee.i ...
- tp5 缩略图自写
1:php终端 安装扩展 使用Composer安装ThinkPHP5的图像处理类库: composer require topthink/think-image2:控制器代码: public func ...