当前位置: 首页 > news >正文

Tomcat并发数优化的方法总结

web应用的并发提升,除了负载均衡。在小企业中也可以通过一些软件的上的设置来进行一些优化。下面是一些在服务器上修改tomcat参数的优化方法,非常简单实用!(这些方法通过网络整理的) 

1,让Tomcat6 中支持Java语言的特性 NIO( New I/O) 

引用
使用NIO在服务器端会有更好的性能,加强服务器端对并发处理的性能。  请注意:很抱歉,在tomcat6在默认的配置选项中是没有把NIO功能打开。所以很多正在使用Tomcat6的朋友们本以为能快活的使用上NIO。 
而NIO则是使用单线程(单个CPU)或者只使用少量的多线程(多CPU)来接受Socket,而由线程池来处理堵塞在pipe或者队列里的请求.这样的话,只要OS可以接受TCP的连接,web服务器就可以处理该请求。大大提高了web服务器的可伸缩性。


可以在控制台的启动信息里看见,默认状态下没有被打开nio配置,启动时的信息,如下: 
2010-2-1 12:59:40 org.apache.coyote.http11.Http11Protocol init 
信息: Initializing Coyote HTTP/1.1 on http-8080 
2010-2-1 12:59:40 org.apache.catalina.startup.Catalina load 

修改成支持NIO的类型,配置如下: 

Java代码   收藏代码
  1. <Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"  
  2.                connectionTimeout="20000"  
  3.                redirectPort="8443" />  



进行测试,被打开nio配置,启动时的信息,如下: 
2010-2-1 13:01:01 org.apache.tomcat.util.net.NioSelectorPool getSharedSelector 
信息: Using a shared selector for servlet write/read 
2010-2-1 13:01:01 org.apache.coyote.http11.Http11NioProtocol init 
信息: Initializing Coyote HTTP/1.1 on http-8080 
这样才能让你真正体验到Tomcat6下NIO给你的系统带来的快感。 

2,修改Tomcat 6默认的maxThread 

引用
打开server.xml可以看到如下配置: 
<Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" /> 
官方文档默认说支持200但似乎超过40就不行了 


修改方法 : 

Java代码   收藏代码
  1. <Connector port="8080" protocol="HTTP/1.1"   
  2.                connectionTimeout="20000"   
  3.                redirectPort="8443" maxThreads="150"/>  

 

引用

在tomcat配置文件server.xml中的<Connector ... />配置中,和连接数相关的参数有: 
minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为10 
maxProcessors:最大连接线程数,即:并发处理的最大请求数,默认值为75 
acceptCount:允许的最大连接数,应大于等于maxProcessors,默认值为100 
enableLookups:是否反查域名,取值为:true或false。为了提高处理能力,应设置为false 
connectionTimeout:网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。 

其中和最大连接数相关的参数为maxProcessors和acceptCount。如果要加大并发连接数,应同时加大这两个参数。 



3,大量的并发也意味着大量的服务器资源,所以修改一下tomcat的JVM参数也是必要的 

错误提示:java.lang.OutOfMemoryError: Java heap space 

引用
Windows环境下修改“%TOMCAT_HOME%\bin\catalina.bat”文件,在文件开头增加如下设置:set JAVA_OPTS=-Xms256m -Xmx512m 

Linux环境下修改“%TOMCAT_HOME%\bin\catalina.sh”文件,在文件开头增加如下设置:JAVA_OPTS=’-Xms256m -Xmx512m’



引用

JVM设置 
堆的尺寸 
-Xmssize in bytes 
    设定Java堆的初始尺寸,缺省尺寸是2097152 (2MB)。这个值必须是1024个字节(1KB)的倍数,且比它大。(-server选项把缺省尺寸增加到32M。) 
-Xmnsize in bytes 
    为Eden对象设定初始Java堆的大小,缺省值为640K。(-server选项把缺省尺寸增加到2M。) 
-Xmxsize in bytes 
    设定Java堆的最大尺寸,缺省值为64M,(-server选项把缺省尺寸增加到128M。) 最大的堆尺寸达到将近2GB(2048MB)。 

请注意:很多垃圾收集器的选项依赖于堆大小的设定。请在微调垃圾收集器使用内存空间的方式之前,确认是否已经正确设定了堆的尺寸。 

垃圾收集:内存的使用 
-XX:MinHeapFreeRatio=percentage as a whole number 
    修改垃圾回收之后堆中可用内存的最小百分比,缺省值是40。如果垃圾回收后至少还有40%的堆内存没有被释放,则系统将增加堆的尺寸。 
-XX:MaxHeapFreeRatio=percentage as a whole number 
    改变垃圾回收之后和堆内存缩小之前可用堆内存的最大百分比,缺省值为70。这意味着如果在垃圾回收之后还有大于70%的堆内存,则系统就会减少堆的尺寸。 
-XX:NewSize=size in bytes 
    为已分配内存的对象中的Eden代设置缺省的内存尺寸。它的缺省值是640K。(-server选项把缺省尺寸增加到2M。) 
-XX:MaxNewSize=size in bytes 
    允许您改变初期对象空间的上限,新建对象所需的内存就是从这个空间中分配来的,这个选项的缺省值是640K。(-server选项把缺省尺寸增加到2M。) 
-XX:NewRatio=value 
    改变新旧空间的尺寸比例,这个比例的缺省值是8,意思是新空间的尺寸是旧空间的1/8。 
-XX:SurvivorRatio=number 
    改变Eden对象空间和残存空间的尺寸比例,这个比例的缺省值是10,意思是Eden对象空间的尺寸比残存空间大survivorRatio+2倍。 
-XX:TargetSurvivorRatio=percentage 
    设定您所期望的空间提取后被使用的残存空间的百分比,缺省值是50。 
-XX:MaxPermSize=size in MB 
    长久代(permanent generation)的尺寸,缺省值为32(32MB)。 


有关JVM的参数设置可参考这个地址:http://daichangfu.iteye.com/blog/893844 


web server允许的最大连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个左右。Unix中如何设置这些参数,请参阅Unix常用监控和管理命令 

转载于:https://www.cnblogs.com/dazhaxie/archive/2012/08/06/2624800.html

相关文章:

  • C和lua的互相调用
  • Win8 RTM 安装到 UEFI PC
  • 做好一个team leader的几点看法
  • 招聘信息NO.5
  • 基于maven和hudson打造持续集成环境
  • 网络字节流数据解析组件的设计与实现--Circular Buffer(Ring Buffer)
  • 小工具 cl-launch , 创建 lisp 执行脚本
  • 从“青年创业基金”说起
  • 云服务系列:Windows Azure SDK for .NET(2012 年 6 月发布的版本)的最新消息
  • vim 键盘图
  • VC++实现感染文件式加载DLL文件
  • pthread_join函数及linux线程
  • hdu 3535 AreYouBusy(三种背包)
  • Linux下的多线程编程
  • yum 删除已安装的软件
  • 【译】JS基础算法脚本:字符串结尾
  • docker-consul
  • Docker入门(二) - Dockerfile
  • IndexedDB
  • Js基础知识(四) - js运行原理与机制
  • Python利用正则抓取网页内容保存到本地
  • Vim 折腾记
  • vue自定义指令实现v-tap插件
  • Web设计流程优化:网页效果图设计新思路
  • 不上全站https的网站你们就等着被恶心死吧
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 如何优雅地使用 Sublime Text
  • 设计模式走一遍---观察者模式
  • 微信小程序实战练习(仿五洲到家微信版)
  • 怎么将电脑中的声音录制成WAV格式
  • ​ubuntu下安装kvm虚拟机
  • # 计算机视觉入门
  • (3)STL算法之搜索
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (k8s中)docker netty OOM问题记录
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (二)WCF的Binding模型
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (未解决)macOS matplotlib 中文是方框
  • .NET Core中Emit的使用
  • .net 提取注释生成API文档 帮助文档
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • @ModelAttribute 注解
  • @基于大模型的旅游路线推荐方案
  • [20150629]简单的加密连接.txt
  • [Android] Implementation vs API dependency
  • [C++] 默认构造函数、参数化构造函数、拷贝构造函数、移动构造函数及其使用案例
  • [Docker]三.Docker 部署nginx,以及映射端口,挂载数据卷
  • [GDOUCTF 2023]<ez_ze> SSTI 过滤数字 大括号{等
  • [Gradle] 在 Eclipse 下利用 gradle 构建系统
  • [Kubernetes]9. K8s ingress讲解借助ingress配置http,https访问k8s集群应用
  • [LeetCode]-225. 用队列实现栈-232. 用栈实现队列