tomcat 基本配置

tomcat

目录结构

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

优化配置参数

1. 优化内存

主要是在bin/catalina.bat/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(俗称方法区)占整个堆内存的最大值,也称内存最大永久保留区域。
1. 错误提示:java.lang.OutOfMemoryError:Java heap space

Tomcat默认可以使用的内存为128MB,在较大型的应用项目中,这点内存是不够的,有可能导致系统无法运行。常见的问题是报Tomcat内存溢出错误,Outof Memory(系统内存不足)的异常,从而导致客户端显示500错误,一般调整Tomcat的-Xms和-Xmx即可解决问题,通常将-Xms和-Xmx设置成一样,堆的最大值设置为物理可用内存的最大值的80%。

set JAVA_OPTS=-Xms512m-Xmx512m

2. 错误提示:java.lang.OutOfMemoryError: PermGenspace

PermGenspace的全称是Permanent Generationspace,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGenspace中,它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGenspace进行清理,所以如果你的应用中有很CLASS的话,就很可能出现PermGen space错误,这种错误常见在web服务器对JSP进行precompile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。解决方法:

setJAVA_OPTS=-XX:PermSize=128M

3. 在使用-Xms和-Xmx调整tomcat的堆大小时,要考虑垃圾回收机制

如果系统花费很多的时间收集垃圾,请减小堆大小。一次完全的垃圾收集应该不超过3-5 秒。如果垃圾收集成为瓶颈,那么需要指定代的大小,检查垃圾收集的详细输出,研究垃圾收集参数对性能的影响。一般说来,你应该使用物理内存的 80% 作为堆大小。当增加处理器时,记得增加内存,因为分配可以并行进行,而垃圾收集不是并行的。

2. 连接数优化

优化连接数,主要是在conf/server.xml配置文件中进行修改。

2.1 优化线程数
找到Connector port="8080" protocol="HTTP/1.1",增加maxThreads和acceptCount属性(使acceptCount大于等于maxThreads),如下:

<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000" redirectPort="8443"acceptCount="500" maxThreads="400" />

其中:

  • maxThreads:tomcat可用于请求处理的最大线程数,默认是200
  • minSpareThreads:tomcat初始线程数,即最小空闲线程数
  • maxSpareThreads:tomcat最大空闲线程数,超过的会被关闭
  • acceptCount:当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理.默认100
2.2 使用线程池
在server.xml中增加executor节点,然后配置connector的executor属性,如下:

<Executor name="tomcatThreadPool" namePrefix="req-exec-"maxThreads="1000" minSpareThreads="50"maxIdleTime="60000"/>
<Connector port="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 查看每个用户允许打开的最大文件数
3.Tomcat Connector三种运行模式(BIO, NIO, APR)
3.1 三种模式比较
  • 1)BIO:一个线程处理一个请求。缺点:并发量高时,线程数较多,浪费资源。Tomcat7或以下在Linux系统中默认使用这种方式。

  • 2)NIO:利用Java的异步IO处理,可以通过少量的线程处理大量的请求。Tomcat8在Linux系统中默认使用这种方式。Tomcat7必须修改Connector配置来启动(conf/server.xml配置文件):

<Connector port="8080"protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000"redirectPort="8443"/>
  • 3)APR(Apache Portable Runtime):从操作系统层面解决io阻塞问题。Linux如果安装了apr和native,Tomcat直接启动就支持apr。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值