jetty安装、配置、优化

)Jettycss

做用:Jetty 是一个开源的servlet容器,它为基于Javaweb内容,例如JSPservlet提供运行环境。java

特性:易用性,可扩展性,易嵌入性web

2) Jetty安装:算法

 tar zxf jetty.tar.gz -C /usr/local/jetty/ #解压
 Java -jar stat.jar #启动jetty
 export JETTY_HOME=/usr/java/jetty #将Jetty路径添加到环境变量

3) Jetty配置:数据库

etc:该路径用于存放Jetty的配置文件浏览器

examples:该路径用于存放Jetty的示例。缓存

legal:该路径用于存放该项目的Lisence信息。性能优化

lib:该路径用于存放运行Jetty必需的静态库文件。服务器

modules:该路径用于存放Jetty的模块,包括API文档。架构

patches:包含一些补丁说明。

pom.xm1:Jettybuild文件,该文件不是Antbuild文件,而是mavaen2build文件。

project-site:包含Jetty的网站的必需的样式文件。

readme.txt:包含最基本的使用信息。

start.jar:启动Jetty的启动文件。

version.txt:Jetty版本更新日志的简单版本。

webapps: 该路径用于存放自动部署的Web 应用,只要将用户的Web应用复制到该路径下Web应用将自动部署

webapps-plus: 存放一些用于演示Jetty 扩展属性的Web 应用,该路径下的Web应用也可自动部署。

4) JettyTomcat 

 相同点:

TomcatJetty都是一种Servlet引擎,他们都支持标准的servlet规范和JavaEE的规范。

 不一样点:

1.架构比较

Jetty的架构比Tomcat的更为简单

Jetty的架构是基于Handler来实现的,主要的扩展功能均可以用Handler来实现,扩展简单。

Tomcat的架构是基于容器设计的,进行扩展是须要了解Tomcat的总体设计结构,不易扩展。

2. 性能比较

JettyTomcat性能方面差别不大

Jetty能够同时处理大量链接并且能够长时间保持链接,适合于web聊天应用等等。

Jetty的架构简单,所以做为服务器,Jetty能够按需加载组件,减小不须要的组件,减小了服务器内存开销,从而提升服务器性能。

Jetty默认采用NIO结束在处理I/O请求上更占优点,在处理静态资源时,性能较高

Tomcat适合处理少数很是繁忙的连接,也就是说连接生命周期短的话,Tomcat的整体性能更高。

Tomcat默认采用BIO处理I/O请求,在处理静态资源时,性能较差。

3.其它比较

Jetty的应用更加快速,修改简单,对新的Servlet规范的支持较好。

Tomcat目前应用比较普遍,对JavaEEServlet的支持更加全面,不少特性会直接集成进来。

5) Jetty优化

1、通常调优的基本过程

1.明了须要调优的系统架构

2.设定性能调优的目标

3.明了目标当前的性能状况

4.找出目前的性能瓶颈的所在

5.解决引发性能瓶颈的根本问题

6.重复以上过程直到达到设定目标性能为止

2、性能指标:

崩溃点:同时多少并发的时候,服务器Down掉?

吞吐量:多少人一块儿来,都没问题?

并发数:每秒能处理多少人?

响应时间:每人须要等待的时间多长?

3、调优势:

1.硬件配置优化:

虚拟机

物理机

CPU 

内存 

 

二、系统优化(Linux)

已经根据门户的方式去优化。

 

3.JVM参数优化:

-Xms:设置jvm内存的初始大小

-Xmx:设置jvm内存的最大值

-Xmn:设置新域的大小(这个彷佛只对 jdk1.4来讲是有效的,后来就废弃了)

-Xss:设置每一个线程的堆栈大小(也就是说,在相同物理内存下,减少这个值能生成更多的线程)

-XX:NewRatio :设置新域与旧域之比,如-XX:NewRatio = 4就表示新域与旧域之比为1:4

-XX:NewSize:设置新域的初始值

-XX:MaxNewSize :设置新域的最大值

-XX:PermSize:设置永久域的初始值

-XX:MaxPermSize:设置永久域的最大值

-XX:SurvivorRatio=n:设置新域中Eden区与两个Survivor区的比值。(Eden区主要是用来存放新生的对象,而两个 Survivor区则用来存放每次垃圾回收后存活下来的对象)

监控内存 CPU

常见的错误 :

java.lang.OutOfMemoryError相信不少开发人员都用到过,这个主要就是JVM参数没有配好引发的,可是这种错误又分两种:java.lang.OutOfMemoryError: Java heap space和

java.lang.OutOfMemoryError: PermGen space,其中前者是有关堆内存的内存溢出,能够同过配置-Xms和-Xmx参数来设置,然后者是有关永久域的内存溢出,能够经过配置-XX:MaxPermSize来设置。

 

4.容器优化:

a.线程池

 

线程池线程资源大小肯定了服务器的服务能力

默认大小不必定能知足生产环境

线程分配方式决定了服务器的资源利用效率

固定线程数处理多任务,表明:JDK的ThreadPoolExecutor

以最大线程数为限处理多任务,表明:Jetty自带QueuedThreadPool

Work-stealing 分配,Jetty目前没有这个实现 Jetty中配置实例:

 

 

maxThreads:表示最多同时处理的链接数。应该将线程数(最大线程数)设置比最大预期负载(同时并发的点击)多25%(经验规则)(低配置用户可经过下降maxThreads并同时增大

acceptCount值来保证系统的稳定)。

acceptCount:当同时链接的人数达到maxThreads时,还能够接收排队的链接。

minSpareThread:指“启动之后,老是保持该数量的线程空闲等待”;设置比预期负载多25%。

maxSpareThread:指“若是超过了minSpareThread,而后老是保持该数量的线程空闲等待”;设置比预期负载多25%。

其中主要修改两个参数maxThreads和acceptCount值。增长maxThreads,减小acceptCount值有利缩短系统的响应时间。可是maxThreads和acceptCount的总和最高值不能超过6000,并且

maxThreads过大会增长CPU和内存消耗,故低配置用户可经过下降maxThreads并同时增大acceptCount值来保证系统的稳定。

connectionTimeout:链接超时,最大超时时间,当响应速度慢的时候,经过调整该参数,来平衡正确率和服务器资源的回收。

 

b.Connectors

选择Connector时,须要考虑应用自身的特色,例如股票、聊天室.

TCP 链接数 Keep-Alive Java BIO Connectors SocketConnector (HTTP) 

Ajp13SocketConnector (AJP) SslSocketConnector(SSL)

Java NIO Connectors electChannelConnector(HTTP) SslSelectChannelConnector(SSL)

 

Acceptors 表示同时在监听read事件的线程数

默认值是 1 典型值范围 1~(处理器内核数+1) 

对于NIO 来讲,设置为(处理器内核数+1)比较合适

maxIdleTime 表示链接最大空闲时间 默认值是 200000,通常这个值都太大了

典型值 3000 左右足够 

对AJP来讲通常设置为-1,表示链接须要一直保持

 

LowResourcesMaxIdleTime 表示线程资源稀少时的maxIdleTime 默认值是 -1,表示没有设置 

通常设置值应该<=maxIdleTime

lowResourcesConnections 只有NIO才有这个设置,表示链接空闲时的链接数,大于这个数将被shutdown 

默认值是 0,表示该设置没有生效 每一个acceptor的链接数=(lowResourcesConnections+acceptors-1)/acceptors

 

AcceptQueueSize 链接被 accept 前容许等待的链接数即Socket的Backlog ,默认 50

SoLingerTime 具备指定逗留时间(以毫秒为单位) 即socket的setSoLinger,默认关闭

ResolveNames 是否反查 getRemoteHost() 默认false

 

c.JVM

Jetty性能调优势-JVM

JVM参数调整主要涉及两个方面 

堆/栈内存大小调整 

Xmx/xms 最大/最小堆大小 

xmn 新生代大小 

-XX:MaxPermSize 持久代堆大小 

垃圾分配回收算法考虑暂停时间、吞吐量选择不一样算法 

串行/并行/并发收集

 

d.Content Cache

动态内容不会被cache 静态内容才会被cache

maxCacheSize 256,000,000

maxCachedFileSize 200,000,000

maxCachedFiles ?2,048

useFileMappedBuffer ?true

能够经过etc/webdefault.xml配置

 

e.冗余组件去除

去除多余的Connector 去除不须要的构建Handler 例如SessionHandler,ServletHandler

关闭没必要要的服务 例如 jmx-console。(JBoss)

 

5.代码优化:

在高峰期,减去日志记录的操做,或者把日志暂时先缓存起来,使用异步处理的方式。

减小一些数据库操做。

减小NC 身份证等匹配方式。

 

6.数据库优化:

索引

视图

 

7.其余:

压缩css,js,图片

使用浏览器缓存

CDN加速

分布式缓存服务器

集群、负载均衡

 

三.调优策略:

a.关键点,找到瓶颈,给瓶颈分配更多的资源,或者减轻其工做量。

 

4、调优原则

a.每台服务器,所能承载的参数,都会有差别,尤为是内存 CPU的配置不一致。

b.每种服务所需的计算资源各不相同,要根据服务的偏向不一样,而去把最好的资源,分配到最须要的地方

c.性能优化,是永恒的话题,没有永久最优解,只能查出目前最优解,是一个不断优化的过程。

 

5、调优技巧

1.粗狂的扫点与详细的指标相结合,尽可能让验证调优的过程更敏捷,让主要的指标稳定下来,在肯定指标前,再使用详细的方式去测出各类指标。

2.分轮测试,在测试结果中,找出各个参数的规律。为调优提供指导数据。

3.在程序增长计数器,验证LR的请求次数。

4.在程序每一个步骤,增长多一些时间,检查下,究竟是卡在哪一个步骤,尤为是操做数据库先后。

)Jetty

做用:Jetty 是一个开源的servlet容器,它为基于Javaweb内容,例如JSPservlet提供运行环境。

特性:易用性,可扩展性,易嵌入性

2) Jetty安装:

 tar zxf jetty.tar.gz -C /usr/local/jetty/ #解压
 Java -jar stat.jar #启动jetty
 export JETTY_HOME=/usr/java/jetty #将Jetty路径添加到环境变量

3) Jetty配置:

etc:该路径用于存放Jetty的配置文件

examples:该路径用于存放Jetty的示例。

legal:该路径用于存放该项目的Lisence信息。

lib:该路径用于存放运行Jetty必需的静态库文件。

modules:该路径用于存放Jetty的模块,包括API文档。

patches:包含一些补丁说明。

pom.xm1:Jettybuild文件,该文件不是Antbuild文件,而是mavaen2build文件。

project-site:包含Jetty的网站的必需的样式文件。

readme.txt:包含最基本的使用信息。

start.jar:启动Jetty的启动文件。

version.txt:Jetty版本更新日志的简单版本。

webapps: 该路径用于存放自动部署的Web 应用,只要将用户的Web应用复制到该路径下Web应用将自动部署

webapps-plus: 存放一些用于演示Jetty 扩展属性的Web 应用,该路径下的Web应用也可自动部署。

4) JettyTomcat 

 相同点:

TomcatJetty都是一种Servlet引擎,他们都支持标准的servlet规范和JavaEE的规范。

 不一样点:

1.架构比较

Jetty的架构比Tomcat的更为简单

Jetty的架构是基于Handler来实现的,主要的扩展功能均可以用Handler来实现,扩展简单。

Tomcat的架构是基于容器设计的,进行扩展是须要了解Tomcat的总体设计结构,不易扩展。

2. 性能比较

JettyTomcat性能方面差别不大

Jetty能够同时处理大量链接并且能够长时间保持链接,适合于web聊天应用等等。

Jetty的架构简单,所以做为服务器,Jetty能够按需加载组件,减小不须要的组件,减小了服务器内存开销,从而提升服务器性能。

Jetty默认采用NIO结束在处理I/O请求上更占优点,在处理静态资源时,性能较高

Tomcat适合处理少数很是繁忙的连接,也就是说连接生命周期短的话,Tomcat的整体性能更高。

Tomcat默认采用BIO处理I/O请求,在处理静态资源时,性能较差。

3.其它比较

Jetty的应用更加快速,修改简单,对新的Servlet规范的支持较好。

Tomcat目前应用比较普遍,对JavaEEServlet的支持更加全面,不少特性会直接集成进来。

5) Jetty优化

1、通常调优的基本过程

1.明了须要调优的系统架构

2.设定性能调优的目标

3.明了目标当前的性能状况

4.找出目前的性能瓶颈的所在

5.解决引发性能瓶颈的根本问题

6.重复以上过程直到达到设定目标性能为止

2、性能指标:

崩溃点:同时多少并发的时候,服务器Down掉?

吞吐量:多少人一块儿来,都没问题?

并发数:每秒能处理多少人?

响应时间:每人须要等待的时间多长?

3、调优势:

1.硬件配置优化:

虚拟机

物理机

CPU 

内存 

 

二、系统优化(Linux)

已经根据门户的方式去优化。

 

3.JVM参数优化:

-Xms:设置jvm内存的初始大小

-Xmx:设置jvm内存的最大值

-Xmn:设置新域的大小(这个彷佛只对 jdk1.4来讲是有效的,后来就废弃了)

-Xss:设置每一个线程的堆栈大小(也就是说,在相同物理内存下,减少这个值能生成更多的线程)

-XX:NewRatio :设置新域与旧域之比,如-XX:NewRatio = 4就表示新域与旧域之比为1:4

-XX:NewSize:设置新域的初始值

-XX:MaxNewSize :设置新域的最大值

-XX:PermSize:设置永久域的初始值

-XX:MaxPermSize:设置永久域的最大值

-XX:SurvivorRatio=n:设置新域中Eden区与两个Survivor区的比值。(Eden区主要是用来存放新生的对象,而两个 Survivor区则用来存放每次垃圾回收后存活下来的对象)

监控内存 CPU

常见的错误 :

java.lang.OutOfMemoryError相信不少开发人员都用到过,这个主要就是JVM参数没有配好引发的,可是这种错误又分两种:java.lang.OutOfMemoryError: Java heap space和

java.lang.OutOfMemoryError: PermGen space,其中前者是有关堆内存的内存溢出,能够同过配置-Xms和-Xmx参数来设置,然后者是有关永久域的内存溢出,能够经过配置-XX:MaxPermSize来设置。

 

4.容器优化:

a.线程池

 

线程池线程资源大小肯定了服务器的服务能力

默认大小不必定能知足生产环境

线程分配方式决定了服务器的资源利用效率

固定线程数处理多任务,表明:JDK的ThreadPoolExecutor

以最大线程数为限处理多任务,表明:Jetty自带QueuedThreadPool

Work-stealing 分配,Jetty目前没有这个实现 Jetty中配置实例:

 

 

maxThreads:表示最多同时处理的链接数。应该将线程数(最大线程数)设置比最大预期负载(同时并发的点击)多25%(经验规则)(低配置用户可经过下降maxThreads并同时增大

acceptCount值来保证系统的稳定)。

acceptCount:当同时链接的人数达到maxThreads时,还能够接收排队的链接。

minSpareThread:指“启动之后,老是保持该数量的线程空闲等待”;设置比预期负载多25%。

maxSpareThread:指“若是超过了minSpareThread,而后老是保持该数量的线程空闲等待”;设置比预期负载多25%。

其中主要修改两个参数maxThreads和acceptCount值。增长maxThreads,减小acceptCount值有利缩短系统的响应时间。可是maxThreads和acceptCount的总和最高值不能超过6000,并且

maxThreads过大会增长CPU和内存消耗,故低配置用户可经过下降maxThreads并同时增大acceptCount值来保证系统的稳定。

connectionTimeout:链接超时,最大超时时间,当响应速度慢的时候,经过调整该参数,来平衡正确率和服务器资源的回收。

 

b.Connectors

选择Connector时,须要考虑应用自身的特色,例如股票、聊天室.

TCP 链接数 Keep-Alive Java BIO Connectors SocketConnector (HTTP) 

Ajp13SocketConnector (AJP) SslSocketConnector(SSL)

Java NIO Connectors electChannelConnector(HTTP) SslSelectChannelConnector(SSL)

 

Acceptors 表示同时在监听read事件的线程数

默认值是 1 典型值范围 1~(处理器内核数+1) 

对于NIO 来讲,设置为(处理器内核数+1)比较合适

maxIdleTime 表示链接最大空闲时间 默认值是 200000,通常这个值都太大了

典型值 3000 左右足够 

对AJP来讲通常设置为-1,表示链接须要一直保持

 

LowResourcesMaxIdleTime 表示线程资源稀少时的maxIdleTime 默认值是 -1,表示没有设置 

通常设置值应该<=maxIdleTime

lowResourcesConnections 只有NIO才有这个设置,表示链接空闲时的链接数,大于这个数将被shutdown 

默认值是 0,表示该设置没有生效 每一个acceptor的链接数=(lowResourcesConnections+acceptors-1)/acceptors

 

AcceptQueueSize 链接被 accept 前容许等待的链接数即Socket的Backlog ,默认 50

SoLingerTime 具备指定逗留时间(以毫秒为单位) 即socket的setSoLinger,默认关闭

ResolveNames 是否反查 getRemoteHost() 默认false

 

c.JVM

Jetty性能调优势-JVM

JVM参数调整主要涉及两个方面 

堆/栈内存大小调整 

Xmx/xms 最大/最小堆大小 

xmn 新生代大小 

-XX:MaxPermSize 持久代堆大小 

垃圾分配回收算法考虑暂停时间、吞吐量选择不一样算法 

串行/并行/并发收集

 

d.Content Cache

动态内容不会被cache 静态内容才会被cache

maxCacheSize 256,000,000

maxCachedFileSize 200,000,000

maxCachedFiles ?2,048

useFileMappedBuffer ?true

能够经过etc/webdefault.xml配置

 

e.冗余组件去除

去除多余的Connector 去除不须要的构建Handler 例如SessionHandler,ServletHandler

关闭没必要要的服务 例如 jmx-console。(JBoss)

 

5.代码优化:

在高峰期,减去日志记录的操做,或者把日志暂时先缓存起来,使用异步处理的方式。

减小一些数据库操做。

减小NC 身份证等匹配方式。

 

6.数据库优化:

索引

视图

 

7.其余:

压缩css,js,图片

使用浏览器缓存

CDN加速

分布式缓存服务器

集群、负载均衡

 

三.调优策略:

a.关键点,找到瓶颈,给瓶颈分配更多的资源,或者减轻其工做量。

 

4、调优原则

a.每台服务器,所能承载的参数,都会有差别,尤为是内存 CPU的配置不一致。

b.每种服务所需的计算资源各不相同,要根据服务的偏向不一样,而去把最好的资源,分配到最须要的地方

c.性能优化,是永恒的话题,没有永久最优解,只能查出目前最优解,是一个不断优化的过程。

 

5、调优技巧

1.粗狂的扫点与详细的指标相结合,尽可能让验证调优的过程更敏捷,让主要的指标稳定下来,在肯定指标前,再使用详细的方式去测出各类指标。

2.分轮测试,在测试结果中,找出各个参数的规律。为调优提供指导数据。

3.在程序增长计数器,验证LR的请求次数。

4.在程序每一个步骤,增长多一些时间,检查下,究竟是卡在哪一个步骤,尤为是操做数据库先后。

相关文章
相关标签/搜索