1.Java程序运行
源码XXX.java-->javac编译器-->字节码XXX.class-->JVM-->机器语言(依赖于不同平台)-->执行
JRE(Java Runtime Environment)是包含了JVM和其他一些简单功能的JAVA运行环境,它适用于只运行java程序时。
JDK(Java Development Kit)比JRE包含了更多东西,它除了能作为JAVA运行环境,还提供了很多用于开发的工具,所以它适用于开发程序时使用。
JAVA SE是java开发标准版,里面有JDK,Java EE是企业版,本质上ee只是比se多提供了几个类库而已。
其中:
server是顶级类,一个server算是一个tomcat实例,在此层次中可定义tomcat服务的监听端口。
service是server下的子组件,用于封装绑定connector和container,并为它们提供一个名称属性。有了service就可以提供相关的服务,如监听TCP连接请求、处理http请求。注意server是管理整个tomcat实例的层次,它和提供服务没有关系。
connector是连接器,定义http协议(默认)以及该协议的监听端口。连接器用于接收客户端请求并将container处理的数据返回给客户端。
container称为容器,它和connector连接器进行绑定。该容器内有4个子容器,包括:engine容器、host容器、context容器、Wrapper容器。容器用于分析、处理请求,并构建响应给connector以发送给客户端。它和connector是tomcat的心脏组件。
engine容器定义servlet引擎,用于定义引擎的名称、默认的虚拟主机。引擎用于分析http请求并将请求转发给对应的虚拟主机。
host容器用于定义虚拟主机。
context容器用于定义webapp,一个context定义一个webapp。它是真正管理servlet容器的层次。
wrapper容器对应的是真正的servlet容器,一个wrapper代表一个servlet,它负责管理一个Servlet,包括的Servlet的装载、初始化、执行以及资源回收。Wrapper是最底层的容器,一个context只能包含一个wrapper。在配置文件中,无法配置该容器的属性。
还有一些其他组件,如session管理组件、JMX等。
一个server可以有多个service。一个service可以有多个connector和唯一的container。container是容器类,从container层次开始,真正进入servlet容器相关的过程。它包含了唯一的engine容器,engine容器中包含了一个或多个host容器,host容器中包含了一个或多个context容器,context容器中包含了唯一的wrapper。它们的组织结构大致如下:
<server>
<service>
<connector />
<engine>
<host>
<context />
<context />
</host>
<host>
<context />
</host>
</engine>
</service>
<service>
......
</service>
</server>
tomcat版本: https://tomcat.apache.org/whichversion.html
jdk下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html
2.Tomcat配置详解
[root@tomcat ~]# cd /application/tomcat/
[root@tomcat tomcat]# tree -L 1
.
├── bin #→用以启动、关闭Tomcat或者其它功能的脚本(.bat文件和.sh文件)
├── conf #→用以配置Tomcat的XML及DTD文件
├── lib #→存放web应用能访问的JAR包
├── LICENSE
├── logs #→Catalina和其它Web应用程序的日志文件
├── NOTICE
├── RELEASE-NOTES
├── RUNNING.txt
├── temp #→临时文件
├── webapps #→Web应用程序根目录
└── work #→用以产生有JSP编译出的Servlet的.java和.class文件
7 directories, 4 files
[root@tomcat tomcat]# cd webapps/
[root@tomcat webapps]# ll
total 20
drwxr-xr-x 14 root root 4096 Oct 5 12:09 docs #→tomcat帮助文档
drwxr-xr-x 6 root root 4096 Oct 5 12:09 examples #→web应用实例
drwxr-xr-x 5 root root 4096 Oct 5 12:09 host-manager #→管理
drwxr-xr-x 5 root root 4096 Oct 5 12:09 manager #→管理
drwxr-xr-x 3 root root 4096 Oct 5 12:09 ROOT #→默认网站根目录
JAVA_OPTS参数说明
-server 启用jdk 的 server 版;
-Xms java虚拟机初始化时的最小内存;
-Xmx java虚拟机可使用的最大内存;
-XX:PermSize 内存永久保留区域
-XX:MaxPermSize 内存最大永久保留区域
-Xms=-Xmx=服务器内存*70%,如部署tomcat,jboss在同一台服务器-Xms=-Xmx=服务器内存*80%*1/4,现公司服务器内存一般都可以加到最大4G,所以可以采取以下配置,把以下参数添加到catalina.sh里面,
JAVA_OPTS='-Xms1024m -Xmx4096m -XX:PermSize=256M -XX:MaxNewSize=256m-XX:MaxPermSize=256m'
#-Xmx6000m :设置JVM最大可用内存为6000MB
#-Xms6000m :设置JVM初始可用内存为6000MB
#-Xmn2g :设置年轻代大小为2G
#-Xss128k :设置每个线程的堆栈大小为128k
#-XX:NewRatio=4 :设置年轻代与年老代的比值为4
#-XX:SurvivorRatio=4 :设置年轻代中Eden区与Survivor区的大小比值为4
#-XX:PermSize=512m :设置堆栈永久区起始大小为512m
#-XX:MaxPermSize=512m :设置堆栈永久区最大大小为512m
#-XX:MaxTenuringThreshold=0 :设置垃圾最大年龄为0
#-XX:+UseParallelGC :选择垃圾收集器为并行收集器
#-XX:ParallelGCThreads=8 :配置并行收集器的线程数
#-XX:+UseParallelOldGC :配置年老代垃圾收集方式为并行收集
#-XX:+UseAdaptiveSizePolicy :并行收集器会自动选择年轻代区大小和相应的Survivor区比例,以达到目标系统规定的最低响应时>间或者收集频率等,此值建议使用并行收集器时,一直打开。
#-Xloggc:gc.log 指定垃圾收集日志文件