tomcat

tomcat

概念

原理: tomat一个servlet(Java Servlet的简称,小服务程序或服务连接器)容器,来处理http请求。在平时的使用中我们都会再浏览器中输入http地址来访问服务资源,比如格式http://host[":"port][abs_path]。从浏览器到服务端的一次请求都遵循http协议,在网络上其实走仍然是tcp协议,即我们常使用的socket来处理客户端和服务器的交互。根据输入的http地址可以知道服务器的IP地址和端口,根据这两个参数就可以定位到服务器的唯一地址。tomcat根据http地址端口后面的资源路径就可以知道反馈什么样的资源给浏览器。

配置文件详解

  • 目录结构
    /bin:脚本文件目录。
    /common/lib:存放所有web项目都可以访问的公共jar包(使用Common类加载器加载)。
    /conf:存放配置文件,最重要的是server.xml
    /logs:存放日志文件。
    /server/webapps:来管理Tomcat-web服务用的。仅对TOMCAT可见,对所有的WEB APP都不可见(使用Catalina类加载器加载)。
    /shared/lib:仅对所有WEB APP可见,对TOMCAT不可见(使用Shared类加载器加载)。
    /tempTomcat运行时候存放临时文件用的。
    webappsweb应用发布目录。
    /workTomcat把各种由jsp生成的servlet文件放在这个目录下。删除后,启动时会自动创建。

  • 配置文件
    server.xml:主要的配置文件。
    web.xml:缺省的web app配置,WEB-INF/web.xml会覆盖该配置。

    server.xml配置
    server标签
    port:指定一个端口,这个端口负责监听关闭tomcat的请求。
    shutdown:指定向端口发送的命令字符串.

    service标签
    name:指定service的名字。

    Connector(表示客户端和service之间的连接)标签
    port:指定服务器端要创建的端口号,并在这个端口监听来自客户端的请求。
    minProcessors:服务器启动时创建的处理请求的线程数。
    maxProcessors:最大可以创建的处理请求的线程数。
    enableLookups:如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址。
    redirectPort:指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号。
    acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。
    connectionTimeout:指定超时的时间数(以毫秒为单位)。
    Engine(表示指定service中的请求处理机,接收和处理来自Connector的请求)标签
    defaultHost:指定缺省的处理请求的主机名,它至少与其中的一个host元素的name属性值是一样的。
    Context(表示一个web应用程序,通常为WAR文件,关于WAR的具体信息见servlet规范)标签
    docBase:该web应用的文档基准目录(Document Base,也称为Context Root),或者是WAR文件的路径。可以使用绝对路径,也可以使用相对于context所属的Host的appBase路径。
    path:表示此web应用程序的url的前缀,这样请求的urlhttp://localhost:8080/path/****。
    reloadable:这个属性非常重要,如果为true,则tomcat会自动检测应用程序的/WEB-INF/lib/WEB-INF/classes目录的变化,自动装载新的应用程序,我们可以在不重起tomcat的情况下改变应用程序。

    host(表示一个虚拟主机)标签
    name:指定主机名。
    appBase:应用程序基本目录,即存放应用程序的目录。
    unpackWARs:如果为true,则tomcat会自动将WAR文件解压,否则不解压,直接从WAR文件中运行应用程序。

    Logger(表示日志,调试和错误信息)标签
    className:指定logger使用的类名,此类必须实现org.apache.catalina.Logger接口。
    prefix:指定log文件的前缀。
    suffix:指定log文件的后缀。
    timestamp:如果为true,则log文件名中要加入时间,如下例:localhost_log.2001-10-04.txt。

tomcat的优化

  • 内存的优化

优化内存,主要是在bin/catalina.bat或bin/catalina.sh 配置文件中进行。linux上,在catalina.sh中添加:

JAVA_OPTS="-server -Xms1G -Xmx2G -Xss256K -Djava.awt.headless=true -Dfile.encoding=utf-8 -XX:MaxPermSize=256m -XX:PermSize=128M -XX:MaxPermSize=256M"
\\其中:
• -server:启用jdk的server版本。
• -Xms:虚拟机初始化时的最小堆内存。
• -Xmx:虚拟机可使用的最大堆内存。 #-Xms与-Xmx设成一样的值,避免JVM因为频繁的GC导致性能大起大落
• -XX:PermSize:设置非堆内存初始值,默认是物理内存的1/64。
• -XX:MaxNewSize:新生代占整个堆内存的最大值。
• -XX:MaxPermSize:Perm(俗称方法区)占整个堆内存的最大值,也称内存最大永久保留区域。
  • 连接数优化
    • 优化线程数
      找到Connectorport=“8080” protocol=“HTTP/1.1”,增加maxThreads和acceptCount属性(使acceptCount大于等于maxThreads),如下:
<Connectorport="8080" protocol="HTTP/1.1"connectionTimeout="20000" redirectPort="8443"acceptCount="500" maxThreads="400" />
其中:

• maxThreads:tomcat可用于请求处理的最大线程数,默认是200
• minSpareThreads:tomcat初始线程数,即最小空闲线程数
• maxSpareThreads:tomcat最大空闲线程数,超过的会被关闭
• acceptCount:当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理.默认100
    • 使用线程池
      在server.xml中增加executor节点,然后配置connector的executor属性,如下:
<Executorname="tomcatThreadPool" namePrefix="req-exec-"maxThreads="1000" minSpareThreads="50"maxIdleTime="60000"/>
<Connectorport="8080" protocol="HTTP/1.1"executor="tomcatThreadPool"/>
其中:

• namePrefix:线程池中线程的命名前缀
• maxThreads:线程池的最大线程数
• minSpareThreads:线程池的最小空闲线程数
• maxIdleTime:超过最小空闲线程数时,多的线程会等待这个时间长度,然后关闭
• threadPriority:线程优先级

\\注:当tomcat并发用户量大的时候,单个jvm进程确实可能打开过多的文件句柄,这时会报java.net.SocketException:Too many open files错误。可使用下面步骤检查:
• ps -ef |grep tomcat 查看tomcat的进程ID,记录ID号,假设进程ID为10001
• lsof -p 10001|wc -l 查看当前进程id为10001的 文件操作数
• 使用命令:ulimit -a 查看每个用户允许打开的最大文件数
  • Tomcat Connector三种运行模式(BIO, NIO, APR)
三种模式比较:
1)BIO:一个线程处理一个请求。缺点:并发量高时,线程数较多,浪费资源。Tomcat7或以下在Linux系统中默认使用这种方式。

2)NIO:利用Java的异步IO处理,可以通过少量的线程处理大量的请求。Tomcat8在Linux系统中默认使用这种方式。Tomcat7必须修改Connector配置来启动(conf/server.xml配置文件):
<Connectorport="8080"protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000"redirectPort="8443"/>

3)APR(Apache Portable Runtime):从操作系统层面解决io阻塞问题。Linux如果安装了apr和native,Tomcat直接启动就支持apr。

* 参考tomcat优化

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值