jetty安装、配置、优化
)Jetty:
作用:Jetty 是一个开源的servlet容器,它为基于Java的web内容,例如JSP和servlet提供运行环境。
特性:易用性,可扩展性,易嵌入性
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:是Jetty的build文件,该文件不是Ant的build文件,而是mavaen2的build文件。
project-site:包含Jetty的网站的必需的样式文件。
readme.txt:包含最基本的使用信息。
start.jar:启动Jetty的启动文件。
version.txt:Jetty版本更新日志的简单版本。
webapps: 该路径用于存放自动部署的Web 应用,只要将用户的Web应用复制到该路径下,Web应用将自动部署
webapps-plus: 存放一些用于演示Jetty 扩展属性的Web 应用,该路径下的Web应用也可自动部署。
4) Jetty与Tomcat
相同点:
Tomcat和Jetty都是一种Servlet引擎,他们都支持标准的servlet规范和JavaEE的规范。
不同点:
1.架构比较
Jetty的架构比Tomcat的更为简单
Jetty的架构是基于Handler来实现的,主要的扩展功能都可以用Handler来实现,扩展简单。
Tomcat的架构是基于容器设计的,进行扩展是需要了解Tomcat的整体设计结构,不易扩展。
2. 性能比较
Jetty和Tomcat性能方面差异不大
Jetty可以同时处理大量连接而且可以长时间保持连接,适合于web聊天应用等等。
Jetty的架构简单,因此作为服务器,Jetty可以按需加载组件,减少不需要的组件,减少了服务器内存开销,从而提高服务器性能。
Jetty默认采用NIO结束在处理I/O请求上更占优势,在处理静态资源时,性能较高
Tomcat适合处理少数非常繁忙的链接,也就是说链接生命周期短的话,Tomcat的总体性能更高。
Tomcat默认采用BIO处理I/O请求,在处理静态资源时,性能较差。
3.其它比较
Jetty的应用更加快速,修改简单,对新的Servlet规范的支持较好。
Tomcat目前应用比较广泛,对JavaEE和Servlet的支持更加全面,很多特性会直接集成进来。
5) Jetty优化:
一、一般调优的基本过程
1.明了需要调优的系统架构
2.设定性能调优的目标
3.明了目标当前的性能情况
4.找出目前的性能瓶颈的所在
5.解决引起性能瓶颈的根本问题
6.重复以上过程直到达到设定目标性能为止
二、性能指标:
崩溃点:同时多少并发的时候,服务器Down掉?
吞吐量:多少人一起来,都没问题?
并发数:每秒能处理多少人?
响应时间:每人需要等待的时间多长?
三、调优点:
1.硬件配置优化:
虚拟机
物理机
CPU
内存
2、系统优化(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.关键点,找到瓶颈,给瓶颈分配更多的资源,或者减轻其工作量。
四、调优原则
a.每台服务器,所能承载的参数,都会有差异,尤其是内存 CPU的配置不一致。
b.每种服务所需的计算资源各不相同,要根据服务的偏向不同,而去把最好的资源,分配到最需要的地方
c.性能优化,是永恒的话题,没有永久最优解,只能查出目前最优解,是一个不断优化的过程。
五、调优技巧
1.粗狂的扫点与详细的指标相结合,尽量让验证调优的过程更敏捷,让主要的指标稳定下来,在确定指标前,再使用详细的方式去测出各种指标。
2.分轮测试,在测试结果中,找出各个参数的规律。为调优提供指导数据。
3.在程序增加计数器,验证LR的请求次数。
4.在程序每个步骤,增加多一些时间,检查下,到底是卡在哪个步骤,尤其是操作数据库前后。
)Jetty:
作用:Jetty 是一个开源的servlet容器,它为基于Java的web内容,例如JSP和servlet提供运行环境。
特性:易用性,可扩展性,易嵌入性
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:是Jetty的build文件,该文件不是Ant的build文件,而是mavaen2的build文件。
project-site:包含Jetty的网站的必需的样式文件。
readme.txt:包含最基本的使用信息。
start.jar:启动Jetty的启动文件。
version.txt:Jetty版本更新日志的简单版本。
webapps: 该路径用于存放自动部署的Web 应用,只要将用户的Web应用复制到该路径下,Web应用将自动部署
webapps-plus: 存放一些用于演示Jetty 扩展属性的Web 应用,该路径下的Web应用也可自动部署。
4) Jetty与Tomcat
相同点:
Tomcat和Jetty都是一种Servlet引擎,他们都支持标准的servlet规范和JavaEE的规范。
不同点:
1.架构比较
Jetty的架构比Tomcat的更为简单
Jetty的架构是基于Handler来实现的,主要的扩展功能都可以用Handler来实现,扩展简单。
Tomcat的架构是基于容器设计的,进行扩展是需要了解Tomcat的整体设计结构,不易扩展。
2. 性能比较
Jetty和Tomcat性能方面差异不大
Jetty可以同时处理大量连接而且可以长时间保持连接,适合于web聊天应用等等。
Jetty的架构简单,因此作为服务器,Jetty可以按需加载组件,减少不需要的组件,减少了服务器内存开销,从而提高服务器性能。
Jetty默认采用NIO结束在处理I/O请求上更占优势,在处理静态资源时,性能较高
Tomcat适合处理少数非常繁忙的链接,也就是说链接生命周期短的话,Tomcat的总体性能更高。
Tomcat默认采用BIO处理I/O请求,在处理静态资源时,性能较差。
3.其它比较
Jetty的应用更加快速,修改简单,对新的Servlet规范的支持较好。
Tomcat目前应用比较广泛,对JavaEE和Servlet的支持更加全面,很多特性会直接集成进来。
5) Jetty优化:
一、一般调优的基本过程
1.明了需要调优的系统架构
2.设定性能调优的目标
3.明了目标当前的性能情况
4.找出目前的性能瓶颈的所在
5.解决引起性能瓶颈的根本问题
6.重复以上过程直到达到设定目标性能为止
二、性能指标:
崩溃点:同时多少并发的时候,服务器Down掉?
吞吐量:多少人一起来,都没问题?
并发数:每秒能处理多少人?
响应时间:每人需要等待的时间多长?
三、调优点:
1.硬件配置优化:
虚拟机
物理机
CPU
内存
2、系统优化(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.关键点,找到瓶颈,给瓶颈分配更多的资源,或者减轻其工作量。
四、调优原则
a.每台服务器,所能承载的参数,都会有差异,尤其是内存 CPU的配置不一致。
b.每种服务所需的计算资源各不相同,要根据服务的偏向不同,而去把最好的资源,分配到最需要的地方
c.性能优化,是永恒的话题,没有永久最优解,只能查出目前最优解,是一个不断优化的过程。
五、调优技巧
1.粗狂的扫点与详细的指标相结合,尽量让验证调优的过程更敏捷,让主要的指标稳定下来,在确定指标前,再使用详细的方式去测出各种指标。
2.分轮测试,在测试结果中,找出各个参数的规律。为调优提供指导数据。
3.在程序增加计数器,验证LR的请求次数。
4.在程序每个步骤,增加多一些时间,检查下,到底是卡在哪个步骤,尤其是操作数据库前后。
jetty安装、配置、优化的更多相关文章
- Centos7 安装配置优化mysql(mariadb分支)
1.说明 由于在centos7的yum仓库中没有mysql,centos7用mariadb替代了mysql. mariadb是mysql源代码的一个分支, mysql被ORACLE闭源,而mariad ...
- Centos6.8 Jetty 安装配置
ssh root@IP Password------------------------------------------------------------------------------↑登 ...
- Jetty安装配置
1) 从官方网站下载绿色版的jetty 下载地址:http://download.eclipse.org/jetty/ 我下载的是 jetty-distribution-7.5.4.v20111024 ...
- 阿里云服务器Linux CentOS安装配置(五)jetty配置、部署
阿里云服务器Linux CentOS安装配置(五)jetty配置.部署 1.官网下载jetty:wget http://repo1.maven.org/maven2/org/eclipse/jetty ...
- 在Raspberry配置优化安装LNMP环境总结
在Raspberry配置优化安装LNMP环境总结 apt-get update apt-get install nginx apt-get install php5-fpm php5-cli php5 ...
- MySQL学习笔记(一)Ubuntu16.04中MySQL安装配置(5.6优化、错误日志、DNS解决)
目录 第一部分.5.6安装.配置.自动备份 第二部分.5.7源码安装.配置.自动备份 第一部分.5.6安装 1.安装mysql sudo apt-get install mysql-server su ...
- win2008 r2 服务器php+mysql+sqlserver2008运行环境配置(从安装、优化、安全等)
这篇文章主要介绍了win2008 r2 服务器php+mysql+sqlserver2008运行环境配置(从安装.优化.安全等),需要的朋友可以参考下 win2008 r2 安装 http://www ...
- RabbitMQ3 单机及集群安装配置及优化
一.操作系统需求及配置 # 1.1.操作系统推荐配置 4C*8G*40G磁盘 # 1.2.内核参数优化 # 系统参数需要留有swap空间,rabbitmq 启动进程用户打开文件数至少需要5万,yum安 ...
- elasticsearch7.0安装及配置优化
简单讲ES开箱即用,不用任何配置也能玩转搜索引擎:以下内容是根据易企秀线上实际使用场景进行的安装和配置,支持冷热数据分离 1.安装 Linux 环境下载安装包 curl -L -O https://a ...
随机推荐
- Financiers Game CodeForces - 737D (博弈论)
直接暴力区间DP的话是$O(n^3)$, 关键注意到每步走的距离差不超过1, 所以差最大是$O(\sqrt{n})$的, 所以实际上有用的状态是$O(n^2)$的, 可以通过.
- 惊世骇俗的sql语句之连表查询
select `product_skus`.id as skuId, `wname` as sku名称, if(`sku_attributes`.`status`=1,'上架','下架') as 状态 ...
- 338. Counting Bits_比特位计数_简单动态规划
https://leetcode.com/problems/counting-bits/ 这是初步了解动态规划后做的第一道题,体验还不错... 看完题目要求后,写出前10个数的二进制数,发现了以下规律 ...
- zzw原创_LIKE与regexp_like中的_及转义符
1.select table_name from user_tables where table_name like 'MENU%';查出以下表MENUMENUGGG_131MENU_132MENU ...
- NOIP2016玩具谜题
题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业. 有一天, 这些玩具小人把小南的眼镜藏了起来. 小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外.如下图: 这时singersi ...
- Vue 使用 vuelidate 实现表单验证
表单验证的应用场景十分广泛,因为网站对用户输入内容的限制是非常必要的. 在vue中,我们使用vuelidate方便地实现表单验证. 官方文档在这里https://monterail.github.io ...
- EvalAI使用——类似kaggle的开源平台,不过没有kernel fork功能,比较蛋疼
官方的代码 https://github.com/Cloud-CV/EvalAI 我一直没法成功import yaml配置举办比赛(create a challenge on EvalAI 使用htt ...
- 在Linux下面如何查看tomcat已经使用多少线程(Threads)
先用 ps aux |grep tomcat 查看tomcat的 PID 再用 ps -T -p <PID>|wc -l 查看线程
- Qt画笔实现波形区域图
参考文章:https://blog.csdn.net/yuxing55555/article/details/79752978 效果图: void WareArea::paintEvent(QPain ...
- 使用laravel搭建CURD后台页面
配置即一切 一切皆于需求,后台从0开始搭建,但是写了一两个页面后发现太多的是对单表的增删改查操作,于是就想到了,能不能做一个快速搭建的后台.想到一句话,配置即一切.如果一个CURD后台能只进行配置就自 ...