Loading

Linux之(tomcat)服务之服务调优

Tomcat调优原则:

● 增加连接数
● 调整工作模式
● 启用gzip压缩
● 调整JVM内存大小
● 作为web服务器时,与Apache或者Nginx整合
● 合理选择垃圾回收算法
● 尽量使用较新的jdk

代码

<Connectorport="8080"protocol="org.apache.coyote.http11.Http11NioProtocol"
        maxThreads="1000"
        minSpareThreads="100"
        maxSpareThreads="200"
        acceptCount="900"
        disableUploadTimeout="true"
        connectionTimeout="20000"
        URIEncoding="UTF-8"
        enableLookups="false"
        redirectPort="8443"
        compression="on"
        compressionMinSize="1024"
        compressableMimeType="text/html,text/xml,text/css,text/javascript"/>

● org.apache.coyote.http11.Http11NioProtocol:调整工作模式为Nio
● maxThreads:最大线程数,默认150。增大值避免队列请求过多,导致响应缓慢。
● minSpareThreads:最小空闲线程数。
● maxSpareThreads:最大空闲线程数,如果超过这个值,会关闭无用的线程。
● acceptCount:当处理请求超过此值时,将后来请求放到队列中等待。
● disableUploadTimeout:禁用上传超时时间
● connectionTimeout:连接超时,单位毫秒,0代表不限制
● URIEncoding:URI地址编码使用UTF-8
● enableLookups:关闭dns解析,提高响应时间
● compression:启用压缩功能
● compressionMinSize:最小压缩大小,单位Byte
● compressableMimeType:压缩的文件类型
● redirectPort:服务器的重定向端口

三种工作模式和工作原理:

Tomcat的工作模式分为3种:Bio、Nio、Apr
1、Bio(Blocking I/O):默认的工作模式,阻塞式I/O 操作,没有任何优化技术处理,性能比较低。
2、Nio(New I/O或者Non-Blocking):非阻塞式I/O操作,比Bio有更好的处理并发的性能。
3、Apr(Apache Portable Runtime,Apache可移植运行库):首选工作模式,主要为上层的应用程序提供一个可跨越多操作系统平台使用的底层支持接口库
注意:在Linux系统中Tomcat8版本使用的是Nio工作模式,Linux 系统中Tomcat7版本(包含)以下的是默认为Bio工作模式;需要修改Connector(server.xml文件)配置来启动:示例:

<Connector port=”8080” protocol=”org.apache.coyote.http11.Http11NioProtocol”
            connectionTimeout=”20000” redirectPort=”8443” />

工作模式和网络I/O模型拓展:

阻塞式I/O模型:应用进程调用recv函数系统调用时,如果等待要操作的数据没有发送到内核缓冲区,应用进程将阻塞,不能接收其他请求。反之,内核recv端缓冲区有数据,内核会把数据复制到用户空间解除阻塞,继续处理下一个请求。(内核空间(缓冲区)→→用户空间(系统调用))
非阻塞式I/O模型:应用进程设置成非阻塞模式,如果要操作的数据没有发送到内核缓冲区,recv系统调用返回一个错误,应用进程利用轮询方式不断检查此操作是否就绪,如果缓冲区中有数据则返回,I/O操作同时不会阻塞应用进程,期间会继续处理新请求。
I/O复用模型:阻塞发生在select/poll的系统调用上,而不是阻塞在实际的I/O系统调用上。能同时处理多个操作,并检查操作是否就绪,select/epoll函数发现有数据就绪后,就通过实际的I/O操作将数据复制到应用进程的缓冲区中。
异步I/O模型:应用进程通知内核开始一个异步I/O操作,并让内核在整个操作(包括数据复制缓冲区)完成后通知应用进程,期间会继续处理新请求。
I/O操作分为两个阶段:第一个阶段等待数据可用,第二个阶段将数据从内核复制到用户空间。
前三种模型的区别:第一阶段阻塞式I/O阻塞在I/O操作上,非阻塞式I/O轮询,I/O复用阻塞在select/poll或epoll上。第二阶段都是一样的。而异步I/O的两个阶段都不会阻塞进程。

 

posted @ 2016-11-22 10:37  宋某人  阅读(257)  评论(0编辑  收藏  举报