tomcat 如何优化?

tomcat作为Web服务器,它的处理性能直接关系到用户体验,下面是几种常见的优化措施:
掉对web.xml的监视,把jsp提前编辑成Servlet。有富余物理内存的情况,加大tomcat使用的jvm的
内存
服务器所能提供CPU、内存、硬盘的性能对处理能力有决定性影响。
对于高并发情况下会有大量的运算,那么CPU的速度会直接影响到处理速度。
内存在大量数据处理的情况下,将会有较大的内存容量需求,可以用-Xmx -Xms -
XX:MaxPermSize等参数对内存不同功能块进行划分。我们之前就遇到过内存分配不足,导致
虚拟机一直处于full GC,从而导致处理能力严重下降。
硬盘主要问题就是读写性能,当大量文件进行读写时,磁盘极容易成为性能瓶颈。最好的办法
还是利用下面提到的缓存。
利用缓存和压缩
对于静态页面最好是能够缓存起来,这样就不必每次从磁盘上读。这里我们采用了Nginx作为
缓存服务器,将图片、css、js文件都进行了缓存,有效的减少了后端tomcat的访问。
另外,为了能加快网络传输速度,开启gzip压缩也是必不可少的。但考虑到tomcat已经需要处
理很多东西了,所以把这个压缩的工作就交给前端的Nginx来完成。
除了文本可以用gzip压缩,其实很多图片也可以用图像处理工具预先进行压缩,找到一个平衡
点可以让画质损失很小而文件可以减小很多。曾经我就见过一个图片从300多kb压缩到几十
kb,自己几乎看不出来区别。
采用集群
单个服务器性能总是有限的,最好的办法自然是实现横向扩展,那么组建tomcat集群是有效提升性
能的手段。我们还是采用了Nginx来作为请求分流的服务器,后端多个tomcat共享session来协同工
作。可以参考之前写的《利用nginx+tomcat+memcached组建web服务器负载均衡》。
优化线程数优化
找到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
使用线程池优化
在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 查看每个用户允许打开的最大文件数
启动速度优化
删除没用的web应用:因为tomcat启动每次都会部署这些应用。
关闭WebSocket: websocket-api.jar和tomcat-websocket.jar 。
随机数优化:设置JVM参数: -Djava.security.egd=file:/dev/./urandom 。
内存优化
因为tomcat启动起来后就是一个java进程,所以这块可以参照JVM部分的优化思路。堆内存相关参
数,比如说:
• -Xms:虚拟机初始化时的最小堆内存。
• -Xmx:虚拟机可使用的最大堆内存。-Xms与-Xmx设成一样的值,避免JVM因为频繁的GC导致性
能大起大落
• -XX:MaxNewSize:新生代占整个堆内存的最大值。
另外还有方法区参数调整(注意:JDK版本)、垃圾收集器等优化。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nifengzhuizhao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值