一、 Java简介

  1. JDK: 面向开发人员使用的SDK,提供Java的开发环境和运行环境
  2. SDK: 软件开发包,包括函数库、编译程序等
  3. JRE: Java的运行环境,面向Java的使用者,不是开发者

二、 Tomcat安装

  1. 1、软件准备
  2. JDK下载:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
  3. Tomcat下载:http://tomcat.apache.org/
  4.  
  5. 2、部署java环境
  6. # mkdir /application/tools/ -p
  7. # cd /application/tools/
  8. # tar xf jdk-8u60-linux-x64.tar.gz -C /application/
  9. # ln -s /application/jdk1.8.0_60 /application/jdk
  10. # sed -i.ori '$a export JAVA_HOME=/application/jdk\n
  11. export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH\n
  12. export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar'
  13. /etc/profile
  14. # source /etc/profile
  15. # java -version
  16.  
  17. 3、安装Tomcat
  18. # tar xf apache-tomcat-8.0.27.tar.gz -C /application/
  19. # ln -s /application/apache-tomcat-8.0.27 /application/tomcat
  20. # echo 'export TOMCAT_HOME=/application/tomcat' >> /etc/profile
  21. # source /etc/profile
  22. # useradd -u 601 tomcat
  23. # chown -R tomcat.tomcat /application/jdk/ /application/tomcat/
  24. # tail -4 /etc/profile
  25. export JAVA_HOME=/application/jdk
  26. export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
  27. export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
  28. export TOMCAT_HOME=/application/tomcat
  29.  
  30. 4、Tomcat目录介绍
  31. # tree -L 1 /application/tomcat/
  32. ├── bin #管理Tomcat脚本文件(.bat和.sh)
  33. ├── conf #配置文件(XML和DTD)
  34. ├── lib #web应用访问的JAR包
  35. ├── LICENSE
  36. ├── logs #Catalina和应用的日志文件
  37. ├── NOTICE
  38. ├── RELEASE-NOTES
  39. ├── RUNNING.txt
  40. ├── temp #临时文件
  41. ├── webapps #Web应用程序根目录
  42. └── work #JSP编译出的Servlet的.java和.class文件
  43. # ll webapps/
  44. drwxr-xr-x 14 root root 4096 docs #tomcat帮助文档
  45. drwxr-xr-x 6 root root 4096 examples #web应用实例
  46. drwxr-xr-x 5 root root 4096 host-manager #管理
  47. drwxr-xr-x 5 root root 4096 manager #管理
  48. drwxr-xr-x 3 root root 4096 ROOT #默认网站根目录
  49.  
  50. 5、启动Tomcat
  51. # /application/tomcat/bin/startup.sh #启动程序
  52. # /application/tomcat/bin/shutdown.sh #关闭程序
  53. # netstat -tunlp | grep java
  54. # ps -ef | grep java
  55.  
  56. 6、访问网站
  57. 网址: http://192.168.1.11:8080/
  58.  
  59. 7、Tomcat日志
  60. # tailf /application/tomcat/logs/catalina.out
  61.  
  62. 8、tomcat 启动和停止的方法
  63. 1) 启动Tomcat
  64. 方法1
  65. # /opt/tomcat/bin/startup.sh
  66. 方法2
  67. # /opt/tomcat/bin/catalina start
  68.  
  69. 2) 停止Tomcat
  70. 方法1
  71. # /opt/tomcat/bin/shutdown.sh
  72. 方法2
  73. # /opt/tomcat/bin/catalina stop
  74.  
  75. 3) 重启Tomcat
  76. 方法1
  77. # /opt/tomcat/bin/shutdown.sh
  78. # /opt/tomcat/bin/startup.sh
  79. 方法2
  80. # /opt/tomcat/bin/catalina restart
  81. 方法3
  82. # /opt/tomcat/bin/catalina stop
  83. # /opt/tomcat/bin/catalina start

三、Tomcat配置文件

1、配置文件介绍

  1. server.xml #主配置文件
  2. tomcat-users.xml #管理用户配置文件

2、Tomcat管理(生产环境不要用)

  1. # vim /application/tomcat/conf/tomcat-users.xml
  2. <role rolename="manager-gui"/>
  3. <role rolename="admin-gui"/>
  4. <user username="tomcat" password="123456" roles="manager-gui,admin-gui"/>
  5. # /application/tomcat/bin/shutdown.sh
  6. # /application/tomcat/bin/startup.sh

3、主配置文件详解

  1. 1、配置文件结构
  2. <server> #顶级组件,位于整个配置的顶层
  3. <service> #容器类组件,可包含其它组件
  4. <connector /> #连接器组件,用户请求连接tomcat
  5. <engine> #容器类组件,可包含其它组件
  6. <host> #容器类组件,可包含其它组件
  7. <context></context> #容器类组件,可包含其它组件
  8. </host>
  9. <host>
  10. <context></context>
  11. <Valve /> #被嵌套类组件,位于一个容器中,不能包含其他组件
  12. </host>
  13. </engine>
  14. </service>
  15. </server>
  16.  
  17. 2、配置文件注释
  18. <?xml version='1.0' encoding='utf-8'?>
  19. <!--
  20. <Server> #实例的顶层元素,代表整个容器
  21. port: #关闭tomcat端口
  22. shutdown: #关闭tomcat字符串
  23. -->
  24. <Server port="8005" shutdown="SHUTDOWN">
  25. <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  26. <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  27. <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  28. <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  29. <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
  30. <GlobalNamingResources>
  31. <Resource name="UserDatabase" auth="Container"
  32. type="org.apache.catalina.UserDatabase"
  33. description="User database that can be updated and saved"
  34. factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
  35. pathname="conf/tomcat-users.xml" />
  36. </GlobalNamingResources>
  37. <!--
  38. service服务组件
  39. -->
  40. <Service name="Catalina">
  41. <!--
  42. connector #接收用户请求
  43. port: #服务监听端口号
  44. address: #服务监听地址,默认0.0.0.0
  45. protocol: #连接器使用的协议,支持HTTP和AJP(ajp:httpd反向代理tomcat时用)
  46. minProcessors #最小处理请求的线程数
  47. maxProcessors #最大处理请求的线程数
  48. enableLookups #是否开启DNS查询,true:返回主机名,false:返回ip
  49. redirectPort #https端口号
  50. acceptCount #队列的请求数
  51. connectionTimeout #连接超时时间,单位:毫秒
  52. -->
  53. <Connector port="8080" protocol="HTTP/1.1"
  54. connectionTimeout="20000"
  55. redirectPort="8443" />
  56. <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
  57. <!--
  58. engine #核心容器组件,catalina引擎,接收并处理用户请求
  59. defaultHost #默认处理请求的主机名
  60. -->
  61. <Engine name="Catalina" defaultHost="localhost">
  62. <!--
  63. Realm #存放用户名,密码及role的数据库
  64. -->
  65. <Realm className="org.apache.catalina.realm.LockOutRealm">
  66. <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
  67. resourceName="UserDatabase"/>
  68. </Realm>
  69. <!--
  70. host #一个虚拟主机
  71. name: #主机名
  72. appBase: #应用程序的目录,app的目录,可相对路径,也可绝对路径
  73. unpackWARs: #是否自动解压war包,true:不解压,false:解压
  74. autoDeploy: #是否自动部署war包
  75. xmlValidation: #是否启动xml的校验功能,一般不效验
  76. xmlNamespaceAware: #是否检测名称空间,一般不检测
  77. -->
  78. <Host name="localhost" appBase="webapps"
  79. unpackWARs="true" autoDeploy="true">
  80. <!--
  81. Context #一个web应用程序,通常为WAR文件
  82. docBase #webapp的war包目录,相对路径或绝对路径
  83. path #webapp的url的前缀,url:http://localhost:8080/path/webapp
  84. reloadable #自动加载新的应用,目录:/WEB-INF/lib和/WEB-INF/classes
  85. -->
  86. <Context path="" docBase="" debug=""/>
  87. <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
  88. prefix="localhost_access_log" suffix=".txt"
  89. pattern="%h %l %u %t "%r" %s %b" />
  90. </Host>
  91. </Engine>
  92. </Service>
  93. </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脚本

  1. # vim tomcat.sh
  2. #!/bin/sh
  3. JAVA_HOME=/application/jdk
  4. CATALINA_HOME=/application/tomcat
  5.  
  6. usage(){
  7. echo "$0 {start|stop|restart}"
  8. exit 1
  9. }
  10. [ $# -ne 1 ]&& usage
  11.  
  12. start_tomcat(){
  13. $CATALINA_HOME/bin/startup.sh
  14. }
  15. stop_tomcat(){
  16. TPID=$(ps -aux|grep java|grep tomcat|grep -v 'grep'|awk '{print $2}')
  17. kill -9 $TPID
  18. sleep 5;
  19. TSTAT=$(ps -aux|grep java|grep tomcat|grep -v 'grep'|awk '{print $2}')
  20. if [ -z $TSTAT ];then
  21. echo "tomcat stop"
  22. else
  23. kill -9 $TSTAT
  24.  
  25. fi
  26.  
  27. cd $CATALINA_HOME
  28. rm temp/* -rf
  29. rm work/* -rf
  30. }
  31.  
  32. case $1 in
  33. start)
  34. start_tomcat
  35. ;;
  36. stop)
  37. stop_tomcat
  38. ;;
  39. restart)
  40. stop_tomcat
  41. sleep 5
  42. start_tomcat
  43. ;;
  44. *)
  45. usage
  46. ;;
  47. esac

四、Tomcat性能优化

1、内存优化

  1. -server #以server模式运行(默认client模式)
  2. -Xms #初始堆内存大小
  3. -Xmx #最大堆内存大小
  4. Xmn #年轻代大小(整个堆大小=年轻代大小+年老代大小+持久代大小)
  5. -XX:NewSize #设置年轻代大小(for 1.3/1.4版本)
  6. -XX:MaxNewSize #年轻代最大值(for 1.3/1.4)
  7. -XX:PermSize #设置持久代初始值
  8. -XX:MaxPermSize #设置持久代最大值
  9. -Xss #每个线程的堆栈大小(JDK版本5.0后,每个线程堆栈大小:1M)
  10. -XX:NewRatio #年轻代与年老代的比值
  11. -XX:SurvivorRatio #Eden区与Survivor区的大小比值
  12. -XX:LargePageSizeInBytes #内存页的大小,设置过大,会影响Perm的大小
  13. -XX:+UseFastAccessorMethods #原始类型的快速优化(get,set方法转成本地代码)
  14. -XX:+DisableExplicitGC #关闭System.gc()
  15. -XX:MaxTenuringThreshold #垃圾最大年龄(该参数在串行GC时才有效)
  16. -XX:+AggressiveOpts #加快编译
  17. -XX:+UseBiasedLocking #锁机制的性能改善
  18. -XX:MetaspaceSize #Metaspace的初始大小
  19. -XX:MaxMetaspaceSize #Metaspace的最大值
  20. -Xnoclassgc #禁用垃圾回收
  21. -XX:PretenureSizeThreshold #对象超过多大,直接在旧生代分配
  22. -XX:TLABWasteTargetPercent #TLAB占eden区的百分比
  23. -XX:+CollectGen0First #FullGC时是否先YGC
  24.  
  25. 并行收集器
  26. -XX:+UseParNewGC #对年轻代采用多线程并行回收(gc)
  27. -XX:ParallelGCThreads #并行收集器的线程数
  28. -XX:+UseParallelOldGC #对年老代采用多线程并行回收(gc)
  29. -XX:MaxGCPauseMillis #每次年轻代垃圾回收的最长时间(最大暂停时间)
  30. -XX:+UseAdaptiveSizePolicy #自动选择年轻代区大小和相应的Survivor区比例
  31. -XX:GCTimeRatio #垃圾回收占程序运行的时间百分比
  32. -XXUseParallelGC #垃圾回收设置为并行收集器
  33.  
  34. CMS
  35. -XX:+UseConcMarkSweepGC #用CMS收集器对年老代进行GC,CMS收集器优势停顿时间少,适用停顿时间短的前台应用
  36. -XX:+AggressiveHeap #用大量的物理内存,忽略Xmx参数
  37. -XX:CMSFullGCsBeforeCompaction #多少次后进行内存压缩
  38. -XX:+CMSParallelRemarkEnabled #开启降低标记停顿
  39. -XX:+UseCMSCompactAtFullCollection #CMS收集器完成垃圾回收后,是否对年老代的压缩整理
  40. -XX:+UseCMSInitiatingOccupancyOnly #用手动定义初始化开始CMS收集(指定阈值回收,不指定jvm会自动调整)
  41. -XX:CMSInitiatingOccupancyFraction=70 #年老代满70%开始CMS收集
  42. -XX:CMSInitiatingPermOccupancyFraction #持久代满多少百分比,开始CMS回收
  43. -XX:+CMSIncrementalMode #设置为增量模式(用于单CPU)
  44. -XX:+CMSClassUnloadingEnabled #在用CMS收集进行垃圾回收时,同时清理持久代不使用的class(类)
  45. -XX:ParallelCMSThreads #设定CMS的线程数
  46.  
  47. 辅助信息
  48. -XX:+PrintGC #输出JVM gc日志
  49. -XX:+PrintGCDetails #输出JVM gc详情
  50. -XX:+PrintGCTimeStamps #gc日志中输出GC的时间戳
  51. -XX:+PrintGC:PrintGCTimeStamps #gc日志中输出GC的时间戳(混合模式)
  52. -XX:+PrintGCApplicationStoppedTime #输出垃圾回收期间,程序暂停的时间(可与上面一起用)
  53. -XX:+PrintGCApplicationConcurrentTime #输出每次垃圾回收前,程序未中断的执行时间(可与上面一起用)
  54. -XX:+PrintHeapAtGC #输出GC前后的详细堆栈信息
  55. -XX:+PrintClassHistogram #输出实例的数量以及空间大小
  56. -XX:+PrintTLAB #输出TLAB空间的使用情况
  57. -XX:+PrintTenuringDistribution #输出每次minor GC后,新的存活周期的阈值
  58. -verbose:gc #输出JVM gc日志
  59. -Xloggc:${CATALINA_BASE}/logs/gc.log #指定gc日志目录
  60. -XX:+PrintGCDateStamps #gc日志中输出GC的时间戳(日期格式: 2013-05-04T21:53:59.234+0800)
  61. -XX:+HeapDumpOnOutOfMemoryError #在发生OOM时dump堆内存便于排查问题
  62. -XX:HeapDumpPath=${CATALINA_BASE}/logs #指定堆内存dump文件导出路径
  63.  
  64. -Djava.awt.headless=true #一般在最后,图表工具的展示

2、连接器优化

  1. 主要优化connector标签相关参数,用于处理用户的访问请求
    1、通用配置
  2. # vim server.xml
  3. <Connector port="8080" protocol="HTTP/1.1"
  4. #编码格式
  5. URIEncoding="UTF-8"
  6. #线程配置
  7. maxThreads="1000" maxProcessors="1000" minProcessors="5" minSpareThreads="100" maxSpareThreads="1000
  8. #连接数配置    
  9. maxConnections="1000" connectionTimeout="20000" acceptCount="1000"
  10.     enableLookups="false" disableUploadTimeout="true" useURIValidationHack="false"
  11. #启用压缩的配置     
  12. compression="on" compressionMinSize="2048" noCompressionUserAgents="gozilla, traviata"
  13. compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"     
  14. #其他配置     
  15. maxPostSize="10485760" maxHttpHeaderSize="8192" tcpNoDelay="true" acceptorThreadCount="8" redirectPort="8443" />
  16.  
  17. 2、https配置示例
  18. # vim server.xml
  19. <Connector port="8443" protocol="HTTP/1.1"
  20. URIEncoding="UTF-8" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" disableUploadTimeout="true"
  21. connectionTimeout="20000"acceptCount="300" maxThreads="300" maxProcessors="1000" minProcessors="5"
  22. useURIValidationHack="false" compression="on" compressionMinSize="2048"
  23. compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
  24. SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS"
  25. keystoreFile="/home/tomcat/ssl/test.jks" keystorePass="123456" />

3、线程池优化

  1. 1、配置
  2. # vim server.xml
  3. <Connector port="8066" executor="tomcatThreadPool" protocol="org.apache.coyote.http11.Http11NioProtocol"
  4. connectionTimeout="20000" enableLookups="false" maxPostSize="10485760" URIEncoding="UTF-8" acceptCount="100"
  5. useBodyEncodingForURI="true" acceptorThreadCount="2" disableUploadTimeout="true" maxConnections="10000" SSLEnabled="false"
  6. />
  7. <Executor name="tomcatThreadPool"
  8. namePrefix="catalina-exec-" maxThreads="1000" minSpareThreads="100" maxIdleTime="60000"
  9. maxQueueSize="Integer.MAX_VALUE" prestartminSpareThreads="false" threadPriority="5"
  10. className="org.apache.catalina.core.StandardThreadExecutor"/>
  11.  
  12. 2、参数详解
  13. name #线程池名,在 Connector中指定
  14. namePrefix #创建每个线程名的前缀,线程名: namePrefix + threadNumber
  15. maxThreads #线程池最大线程数
  16. minSpareThreads #活跃线程数
  17. maxIdleTime #线程空闲时间,默认:6000(1分钟),单位:毫秒
  18. maxQueueSize #被执行前最大队列数,默认:Int的最大值,一般不用改
  19. prestartminSpareThreads #启动线程池时是否启动minSpareThreads部分线程,默认:false(不启动)
  20. className #线程池实现类,默认实现类:org.apache.catalina.core.StandardThreadExecutor

4、优化IO模式

  1. 1io模式介绍
  2. BIO(阻塞型IO)、NIONIO2APR
  3.  
  4. 2、区别
  5. BIO: BIO(Blocking I/O),阻塞式I/O,使用传统的Java I/O操作(java.io包及其子包),默认:bio模式,性能低,连接数少
  6. NIO: NIO(New I/O),基于缓冲区,非阻塞I/O,提供java API(java.nio包及其子包),并发高,适合连接数多且短(聊天),后台耗时完成请求的操作
  7. APR: APR(Apache Portable Runtime)JNI调用HTTP动态库处理文件,提高静态文件和SSL的处理,连接数多且长(相册),从系统层面解决IO堵塞
  8.  
  9. 3、修改io模式
  10. <Connector port="8066" protocol="org.apache.coyote.http11.Http11NioProtocol" redirectPort="8448"/>
  11. protocol="HTTP/1.1" #BIO
  12. protocol="org.apache.coyote.http11.Http11NioProtocol" #NIO
  13. protocol="org.apache.coyote.http11.Http11Nio2Protocol" #NIO2
  14. protocol="org.apache.coyote.http11.Http11AprProtocol" #APR

5、监听器优化

  1. 1Listener配置
    预防JRE内存泄漏,默认无需配置
  2. <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />

6、优化总结

  1. 1、如何分配JVM的内存空间
  2. 2、应该使用什么类型的垃圾回收器
  3. JVM产生的垃圾需要回收、回收有不同的回收器,JVM的调优需要了解各个垃圾回收机制的原理
  4. 终极目标: 降低FULL GC出现的频率(FULL GC出现会导致应用的暂停服务)

五、监控Tomcat

1、使用jconsole来监控jvm

  1. 1、安装jconsole
  2. Windows平台安装jconsole图形化软件
  3.  
  4. 2、配置tomcat的远程连接
  5. # vim bin/catalina.sh
  6. CATALINA_OPTS="$CATALINA_OPTS
  7. -Dcom.sun.management.jmxremote #启用远程监控JMX
  8. -Dcom.sun.management.jmxremote.port=12345 #jmx远程端口
  9. -Dcom.sun.management.jmxremote.authenticate=false #不开启用户密码认证
  10. -Dcom.sun.management.jmxremote.ssl=false #不开启ssl(https)
  11. -Djava.rmi.server.hostname=192.168.230.130" #tomcat的IP地址

    3、单击java目录bin下的JConsole.exe可执行文件

学习Tomcat(二)的更多相关文章

  1. 烂泥:学习tomcat之通过shell批量管理多个tomcat

    本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb 公司的业务是使用tomcat做web容器,为了更有效的利用服务器的性能,我们一般部署多个 ...

  2. Shell 学习(二)

    目录 Shell 学习(二) 1 设置环境变量 1.1 基本语法 1.2 实践 2 位置参数变量 2.1 介绍 2.2 基本语法 2.3 位置参数变量应用实例 3 预定义变量 3.1 基本介绍 3.2 ...

  3. crawler4j 学习(二)

    crawler4j 学习(二) 实现控制器类以制定抓取的种子(seed).中间数据存储的文件夹.并发线程的数目: public class Controller { public static voi ...

  4. 从零开始学习jQuery (二) 万能的选择器

    本系列文章导航 从零开始学习jQuery (二) 万能的选择器 一.摘要 本章讲解jQuery最重要的选择器部分的知识. 有了jQuery的选择器我们几乎可以获取页面上任意的一个或一组对象, 可以明显 ...

  5. Android Animation学习(二) ApiDemos解析:基本Animators使用

    Android Animation学习(二) ApiDemos解析:基本Animatiors使用 Animator类提供了创建动画的基本结构,但是一般使用的是它的子类: ValueAnimator.O ...

  6. AspectJ基础学习之二搭建环境(转载)

    AspectJ基础学习之二搭建环境(转载) 一.下载Aspectj以及AJDT 上一章已经列出了他的官方网站,自己上去download吧.AJDT是一个eclipse插件,开发aspectj必装,他可 ...

  7. WPF的Binding学习笔记(二)

    原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...

  8. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

  9. MyBatis学习系列二——增删改查

    目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring 数据库的经典操作:增删改查. 在这一章我们主要说明一下简单的查询和增删改, ...

  10. MyBatis学习 之 二、SQL语句映射文件(2)增删改查、参数、缓存

    目录(?)[-] 二SQL语句映射文件2增删改查参数缓存 select insert updatedelete sql parameters 基本类型参数 Java实体类型参数 Map参数 多参数的实 ...

随机推荐

  1. Weblogic补丁升级常见问题

    转至:https://blog.csdn.net/weixin_44659716/article/details/106804177 常用企业级版本:Weblogic 11g(weblogic10.3 ...

  2. Sonic+p4(1)

    知识: Docker容器(打包环境加应用) 静态镜像运行container docker run(start)形成拓扑 目的:switch1获取switch2的网络统计数据 start.sh启动拓扑, ...

  3. 查询性能提升3倍!Apache Hudi 查询优化了解下?

    从 Hudi 0.10.0版本开始,我们很高兴推出在数据库领域中称为 Z-Order 和 Hilbert 空间填充曲线的高级数据布局优化技术的支持. 1. 背景 Amazon EMR 团队最近发表了一 ...

  4. C# 反编译工具之dnSpy

    下载地址:https://github.com/0xd4d/dnSpy/releases无需安装,和 ILSPY同门,感觉比ILSPY还强大 直接把dll拖拽到程序集资源管理器里面就可以啦

  5. 【数据科学基础复习 - 3】PCA主成分分析

    本文仅就PCA原理及应用作一简单总结, 具体的数学原理等考试后再补上. 1. PCA推导 目标 对于正交空间中的样本点,现想将其投影到一个低维超平面中使得所有样本可在该平面中得到恰当的表达. 什么叫恰 ...

  6. 线上| 10万奖金!Greaterwms/DVAdmin插件开发者现金激励活动

    为激励广大开发者创作精神,Greaterwms/DVadmin插件开发者现金激励活动现已上线! 什么是GreaterWMS 完全开源仓储管理软件,遵循Apache License 2.0协议,前后端分 ...

  7. 调用Visual Studio的cl.exe编译C/C++程序

    @ 目录 调用Visual Studio的cl.exe编译C/C++程序 前言 1.查看VS的路径 2.添加环境变量 3.查看设置是否生效 4.配置Notepad++ 调用Visual Studio的 ...

  8. SpringCloudStream(RabbitMQ&Kafka)&Spring-Kafka配置使用

    目录 是什么 解决问题 使用方式 创建生产者项目 pom yml 生产消息方法 接口 实现 创建消费者项目 pom yml 接收消息方法 重复消费 消费者yml 持久化 消费者负载个性配置(预拉取) ...

  9. tep完整教程帮你突破pytest

    持续维护的教程 tep教程会随着版本更新或经验积累,持续维护在电子书中,最新的最全的内容请锁定这篇文章[最新]tep完整教程帮你突破pytest: https://dongfanger.gitee.i ...

  10. tp5 缩略图自写

    1:php终端 安装扩展 使用Composer安装ThinkPHP5的图像处理类库: composer require topthink/think-image2:控制器代码: public func ...