合肥商城网站开发,嘉兴个人建站,买链接,深圳市龙华区教育局官网tomcat作为Web服务器#xff0c;它的处理性能直接关系到用户体验#xff0c;下面是几种常见的优化措施#xff1a;
对web.xml的监视#xff0c;把jsp提前编辑成Servlet。有富余物理内存的情况#xff0c;加大tomcat使用的jvm的内存
服务器所能提供CPU、内存、硬盘的性能…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来协同工作。可以参考之前写的《利用nginxtomcatmemcached组建web服务器负载均衡》。
优化线程数优化 找到Connector port“8080” protocol“HTTP/1.1”增加maxThreads和acceptCount属性使acceptCount大于等于maxThreads如下
Connector port8080 protocolHTTP/1.1connectionTimeout20000 redirectPort8443acceptCount500 maxThreads400 /其中
• maxThreadstomcat可用于请求处理的最大线程数默认是200
• minSpareThreadstomcat初始线程数即最小空闲线程数
• maxSpareThreadstomcat最大空闲线程数超过的会被关闭
• acceptCount当所有可以使用的处理请求的线程数都被使用时可以放到处理队列中的请求数超过这个数的请求将不予处理.默认100使用线程池优化 在server.xml中增加executor节点然后配置connector的executor属性如下
Executor nametomcatThreadPool namePrefixreq-exec-maxThreads1000 minSpareThreads50maxIdleTime60000/
Connector port8080 protocolHTTP/1.1executortomcatThreadPool/其中
• 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.egdfile:/dev/./urandom 。
内存优化 因为tomcat启动起来后就是一个java进程所以这块可以参照JVM部分的优化思路。堆内存相关参数比如说
Xms虚拟机初始化时的最小堆内存。-Xmx虚拟机可使用的最大堆内存。-Xms与-Xmx设成一样的值避免JVM因为频繁的GC导致性能大起大落-XX:MaxNewSize新生代占整个堆内存的最大值。另外还有方法区参数调整注意JDK版本、垃圾收集器等优化。