Skip to content

十四、Tomcat

1、Tomcat 的缺省端口是多少,怎么修改?

  1. 找到 Tomcat 目录下的 conf 文件夹

  2. 进入 conf 文件夹里面找到 server.xml 文件

  3. 打开 server.xml 文件

  4. 在 server.xml 文件里面找到下列信息

    xml
    <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1"
    redirectPort="8443" uriEncoding="utf-8"/>
    port="8080"改成你想要的端口

2、Tomcat 有几种部署方式?

  1. 直接把 Web 项目放在 webapps 下,Tomcat 会自动将其部署
  2. 在 server.xml 文件上配置<Context>节点,设置相关的属性即可
  3. 通过 Catalina 来进行配置:进入到 conf\Catalina\localhost 文件下,创建一个xml 文件,该文件的名字就是站点的名字。

3、tomcat 容器是如何创建 servlet 类实例?用到了什么原理?

​ 当容器启动时,会读取在 webapps 目录下所有的 web 应用中的 web.xml 文件,然后对 xml 文件进行解析,并读取 servlet 注册信息。然后,将每个应用中注册的 servlet 类都进行加载,并通过反射的方式实例化。(有时候也是在第一次请求时实例化)在 servlet 注册时加上如果为正数,则在一开始就实例化,如果不写或为负数,则第一次请求实例化。

4、tomcat 如何优化?

  1. 优化连接配置.这里以 tomcat7 的参数配置为例,需要修改 conf/server.xml文件,修改连接数,关闭客户端 dns 查询。

参数解释:

URIEncoding=”UTF-8″ :使得 tomcat 可以解析含有中文名的文件的 url,真方便,不像 apache 里还有搞个 mod_encoding,还要手工编译
maxSpareThreads : 如果空闲状态的线程数多于设置的数目,则将这些线程中止,减少这个池中的线程总数。
minSpareThreads : 最小备用线程数,tomcat 启动时的初始化的线程数。
enableLookups : 这个功效和 Apache 中的 HostnameLookups 一样,设为关闭。
connectionTimeout : connectionTimeout 为网络连接超时时间毫秒数。
maxThreads : maxThreads Tomcat 使用线程来处理接收的每个请求。这个值表示 Tomcat 可创建的最大的线程数,即最大并发数。
acceptCount : acceptCount 是当线程数达到 maxThreads 后,后续请求会被放入一个等待队列,这个 acceptCount 是这个队列的大小,如果这个队列也满了,就直接 refuse connection
maxProcessors 与 minProcessors : 在 Java 中线程是程序运行时的路径,是在一个程序中与其它控制线程无关的、能够独立运行的代码段。它们共享相同的地址空间。多线程帮助程序员写出 CPU 最 大利用率的高效程序,使空闲时间保持最低,从而接受更多的请求。
通常 Windows 是 1000 个左右,Linux 是 2000 个左右。

5、内存调优

内存方式的设置是在 catalina.sh 中,调整一下 JAVA_OPTS 变量即可,因为后
面的启动参数会把 JAVA_OPTS 作为 JVM 的启动参数来处理。
具体设置如下:
JAVA_OPTS="$JAVA_OPTS -Xmx3550m -Xms3550m -Xss128k -
XX:NewRatio=4 -XX:SurvivorRatio=4"
其各项参数如下:
-Xmx3550m:设置 JVM 最大可用内存为 3550M。
-Xms3550m:设置 JVM 促使内存为 3550m。此值可以设置与-Xmx 相同,以
避免每次垃圾回收完成后 JVM 重新分配内存。
-Xmn2g:设置年轻代大小为 2G。整个堆大小=年轻代大小 + 年老代大小 +
持久代大小。持久代一般固定大小为 64m,所以增大年轻代后,将会减小年老
代大小。此值对系统性能影响较大,Sun 官方推荐配置为整个堆的 3/8。
-Xss128k:设置每个线程的堆栈大小。JDK5.0 以后每个线程堆栈大小为 1M,
以前每个线程堆栈大小为 256K。更具应用的线程所需内存大小进行调整。在相
同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的
线程数还是有限制的,不能无限生成,经验值在 3000~5000 左右。
-XX:NewRatio=4:设置年轻代(包括 Eden 和两个 Survivor 区)与年老代的比
值(除去持久代)。设置为 4,则年轻代与年老代所占比值为 1:4,年轻代占
整个堆栈的 1/5
-XX:SurvivorRatio=4:设置年轻代中 Eden 区与 Survivor 区的大小比值。设置
为 4,则两个 Survivor 区与一个 Eden 区的比值为 2:4,一个 Survivor 区占整
个年轻代的 1/6
-XX:MaxPermSize=16m:设置持久代大小为 16m。
-XX:MaxTenuringThreshold=0:设置垃圾最大年龄。如果设置为 0 的话,则年
轻代对象不经过 Survivor 区,直接进入年老代。对于年老代比较多的应用,可
以提高效率。如果将此值设置为一个较大值,则年轻代对象会在 Survivor 区进
行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收
的概论。