tomcat知识点

1.

1.部署三种方式:

   (1) 在server.xml的Host标签内新建一个Context标签

     <Context path="/learn1" reloadable="true" docBase="E:/work/tech/project/learn1/WebRoot" workDir="E:/work/tech/project/learn1/WebRoot/work" />

      * workDir是指Tomcat解析Jsp转换为Java文件,并编译为class存放的文件夹,设置在项目文件夹里面,可以避免移植到其他地方首次读取jsp文件需要重新解析 。一般格式:项目文件夹/work 

   (2) 放在tomcat的webapps下

   (3) 在tomcat的conf/Catalina/localhost下建立一文件   <访问路径>.xml, 内容同(1)

2.    <context reloadable=true> tomcat会自动检测/WEB-INF/lib和/class下的更新

       http://localhost:8080/manager/reload?path=/<项目名> 可重新装载该项目,避免重启

3.1.性能
(1)使用线程池
Servlet引擎为每一个请求创建一个隔离的线程,分配这个线程给service()方法,在它执行完后移除这个线程。默认情况下,servlet引擎 为每一个请求创建新的线程。因为创建和消除线程是需要系统开销的,可以通过使用线程池来提升性能。依据所期望的并发用户数量,配置线程池的最大、最小、以 及增加数量。在服务启动的时候,servlet引擎使用最小的线程数量创建一个线程池。然后servlet引擎会分配线程给每一个请求,替换原来的创建新 的线程,在处理完成后把线程返回给线程池。使用线程池,性能会有一个显著的提升。如果需要,根据线程的最大和增加数量,更多的线程会被创建,添加到池中以 供更多的请求使用。

(2)禁止servlet和jsp的自动重载
  为了节约开发时间,在开发阶段Servlet/JSP容器提供自动重载功能,方便你在修改Servlet/JSP后不用重新启动服务。可是,在J2EE的生产环境下关闭自动载入功能可以得到更好的性能。

(3)控制HttpSession
    一个常见的误解是以为session在有客户端访问时就被创建,然而事实是直到某server端程式调用HttpServletRequest.getSession(true)这样的语句时才被创建,注意如果JSP没有显示的使用 <%@page session="false"%>关闭session,则JSP文件在编译成Servlet时将会自动加上这样一条语句HttpSession session = HttpServletRequest.getSession(true);这也是JSP中隐含的session对象的来历。由于session会消耗内 存资源,因此,如果不打算使用session,应该在所有的JSP中关闭他。
  在默认情况下,不要在jsp页面中创建HttpSessions对象,jsp页面默认会自动创建HttpSessions,如果在你的jsp页面中不需要HttpSessions,为了节省一些性能,使用下面的页面指令避免自动创建HttpSessions对象。
  <%@ page session="false"%>
  不要存储大型对象到HttpSession:如果你存储大型对象数据到HttpSession中,应用服务器不得不在每一次请求中处理整个的HttpSession,这将会强迫使用java的串行化操作,占用大量系统资源。应用服务的性能将会因为java的串行化操作而减少。
  在结束时候释放HttpSessions对象:在它们不在需要的时候使用HttpSession.invalidate()方法消除sessions。
  设置session的超时值:servlet有一个默认的超时值。如果你在这个时间里面,你既没有移除它,也没有使用它(进行任何服务请求),servlet服务将会自动将其销毁。尽可能的保持session 的超时值最小。
    session在下列情况下被删除a.程式调用HttpSession.invalidate();或b.距离上一次收到客户端发送的session id时间间隔超过了session的超时设置;或c.服务器进程被停止(非持久session)

4.管理页面:

    http://localhost:8080/manager/status  查看tomcat的并发访问量

5.tomcat启动时会装载contextConfigLocation参数指定的文件,如果不指定contextConfigLocation参数 默认装载/WEB-INF/applicationContext.xml文件


6.性能优化

     1) 加大tomcat连接线程数

    server.xml的<Connector里:

   minProcessors最小空闲连接数。默认10

   maxProcessors并发处理的最大请求数,默认为75

   acceptCount 允许最大的连接数,应该>=maxProcessor,默认为100

  enableLookups 允许反查域名,为了提高处理能力,设为false

connectionTimeout 网络连接超时,单位:毫秒,通常为30000

  * 加大并发数应该同时加大maxProcessors和acceptCount,可为1024

*允许的最大连接数还受限于操作系统的内核参数,通常windows是2000个左右,linux是1000个左右

     2) .PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,
这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中,
它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对
PermGen space进行清理,所以如果你的应用中有很多CLASS的话,就很可能出现PermGen space错误,
这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小
超过了jvm默认的大小(4M)那么就会产生java.lang.OutOfMemoryError: PermGen space 错误信息了。
解决方法: 手动设置MaxPermSize大小
  修改TOMCAT_HOME/bin/catalina.sh, 在“echo "Using CATALINA_BASE:   $CATALINA_BASE"”上面加入以下行:JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m
建议:将相同的第三方jar文件移置到tomcat/shared/lib目录下,这样可以达到减少jar 文档重复占用内存的目的。

   3)Heap size 设置
  堆( Heap)是 Java 程序的对象生活的地方,包含活的对象,死的对象以及剩余内存。.JVM在启动的时候会自动设置Heap size的值, 其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。Heap size 的大小是Young Generation 和Tenured Generaion 之和。
提示:在JVM中如果98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出java.lang.OutOfMemoryError: Java heap space异常信息。
提示:Heap Size 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。
解决方法:手动设置Heap size
修改TOMCAT_HOME/bin/catalina.sh
在“echo "Using CATALINA_BASE:   $CATALINA_BASE"”上面加入以下行:
JAVA_OPTS="-server -Xms800m -Xmx800m   -XX:MaxNewSize=256m"

       4)实例,以下给出1G内存环境下java jvm 的参数设置参考:
JAVA_OPTS="-server -Xms800m -Xmx800m  -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "

3. 连接池

   (1) 将数据库驱动程序的JAR文件放在Tomcat的 common/lib 中;

  (2)方法一:局部连接池(仅供本App使用) 在web.xml中或者tomcat_home/conf/localhost/下建立一个<yourAppName>.xml

     <Context>
     <Resource
           name="jdbc/test"
           type="javax.sql.DataSource"
           password="bb"
           driverClassName="com.mysql.jdbc.Driver"
           maxIdle="2"
           maxWait="50"
           username="root"
           url="jdbc:mysql://localhost:3306/test"
           maxActive="4"/>
</Context>

        方法二:配置全局resource,然后通过resourcelink来映射,

           (a) tomcat/conf/server.xml的GlobalNamingResources中增加
<Resource name="jdbc/mydb" type="javax.sql.DataSource" password="mypwd" driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver" maxIdle="30" maxWait="5000" validationQuery="select 1" username="sa" url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb" maxActive="200"/>

      * 参数说明:

              maxIdle,最大空闲数,数据库连接的最大空闲时间。超过空闲时间,数据库连接将被标记为不可用,然后被释放。设为0表示无限制。
              MaxActive,连接池的最大数据库连接数。设为0表示无限制。
              maxWait ,最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。

          (b)、在tomcat/webapps/myapp/META-INF/context.xml的Context中增加:
<ResourceLink global="jdbc/mydb" name="jdbc/mydb" type="javax.sql.DataSource"/>

     (4)编码:
      private static DataSource pool;
      static {
           Context env = null;
            try {
                env = (Context) new InitialContext().lookup("java:comp/env");
                pool = (DataSource)env.lookup("jdbc/WSPool");
                if(pool==null)
                    System.err.println("'DBPool' is an unknown DataSource");
                 } catch(NamingException ne) {
                    ne.printStackTrace();
            }

   (5) 用DBPool.getPool().getConnection(),获得一个Connection对象,就可以进行数据库操作,最后别忘了对Connection对象调用close()方法,注意:这里不会关闭这个Connection,而是将这个Connection放回数据库连接池。

      * jdbc通常是用DriverManager获得连接的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值