有关服务器源代码知识解读 服务器源代码什么意思( 二 )


LauncherHelper3: 线程模型Tomcat对IO模型支持
IO模型描述BIO (JIoEndpoint)同步阻塞式IO,即Tomcat使用传统的java.io进行操作 。该模式下每个请求都会创建一个线程,对性能开销大,不适合高并发场景 。优点是稳定,适合连接数目小且固定架构 。NIO(NioEndpoint)同步非阻塞式IO,jdk1.4 之后实现的新IO 。该模式基于多路复用选择器监测连接状态再同步通知线程处理,从而达到非阻塞的目的 。比传统BIO能更好的支持并发性能 。Tomcat 8.0之后默认采用该模式AIO (Nio2Endpoint)异步非阻塞式IO,jdk1.7后之支持。与nio不同在于不需要多路复用选择器,而是请求处理线程执行完成进行回调调知,继续执行后续操作 。Tomcat 8之后支持 。APR(AprEndpoint)全称是 Apache Portable Runtime/Apache可移植运行库),是Apache HTTP服务器的支持库 。可以简单地理解为,Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作 。使用需要编译安装APR 库
通过修改server.xml中protocol配置来指定IO模型
<Connectorprotocol="HTTP/1.1"> Tomcat7连接器比较
Tomcat8连接器比较
JIOEndpoint原理
NioEndpoint原理
4: 性能调优Tomcat启动参数
一般生产环境中Tomcat 程序目录和部署目录分开的,只需要在启动时指定CATALINA_HOME 与 CATALINA_BASE 参数即可 。
启动参数描述说明JAVA_OPTSjvm 启动参数 , 设置内存 编码等 -Xms100m -Xmx200m -Dfile.encoding=UTF-8JAVA_HOME指定jdk 目录,如果未设置从java 环境变量当中去找 。CATALINA_HOMETomcat 程序根目录CATALINA_BASE应用部署目录,默认为$CATALINA_HOMECATALINA_OUT应用日志输出目录:默认$CATALINA_BASE/logCATALINA_TMPDIR应用临时目录:默认:$CATALINA_BASE/temp
并发相关参数
Connector属性:
名称描述address对于具有多个IP地址的服务器,此属性指定将用于监听指定端口的地址 。默认情况下,连接器将侦听所有本地地址compression是否使用HTTP/1.1 GZIP压缩来节省服务器带宽,默认offconnectionTimeout客户端发起连接到服务端接收为止,中间最大的等待时间connectionUploadTimeout指定数据上传过程中使用的超时时间(以毫秒为单位) 。只有将disableUploadTimeout设置为false时才会生效 。disableUploadTimeouttrue 则使用connectionTimeoutenableLookups如果需要调用request.getRemoteHost()来执行DNS查找以返回远程客户端的实际主机名,则将其设置为true 。设置为false可以跳过DNS查找并以字符串形式返回IP地址(从而提高性能) 。默认情况下,DNS查找是禁用的executorTerminationTimeoutMillis私有内部执行程序在继续停止连接器之前等待请求处理线程终止的时间 。如果没有设置,默认值为5000(5秒) 。acceptCount使用所有可能的请求处理线程时传入连接请求的最大队列长度 。队列满时接收到的任何请求都将被拒绝 。默认值是100 。maxConnections服务器在任何给定时间将接受和处理的最大连接数 。当到达此数值时,服务器将接受(但不处理)另一个连接 。此附加连接将被阻塞,直到正在处理的连接数量低于maxConnections,此时服务器将再次开始接受和处理新连接 。注意,一旦达到了限制,操作系统仍然可以基于acceptCount设置接受连接 。默认值因连接器类型而异 。对于NIO和NIO2,缺省值是10000 。maxHttpHeaderSize请求和响应HTTP头的最大大小,默认8kmaxThreads可以处理的并发请求的最大数量,默认200,如果使用了executor,将被忽略minSpareThreads始终保持运行的最小线程数,默认10,如果使用了executor,将被忽略
Executor属性:
名称描述daemon是否是守护线程,默认truenamePrefix由执行程序创建的每个线程的名称前缀 。单个线程的线程名将是namePrefix+threadNumbermaxThreads池中活动线程的最大数量,默认为200minSpareThreads保持活动的线程的最小数量(空闲和活动),默认为25maxIdleTime一个空闲线程关闭前的毫秒数,除非活动线程数小于或等于minSpareThreads 。默认值为60000(1分钟)maxQueueSize在拒绝可运行任务之前,可以排队等待执行的最大可运行任务数 。默认值是Integer.MAX_VALUEprestartminSpareThreadsminSpareThreads是否应该在启动执行程序时启动,默认值都是false


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: