性能优化专栏-tomcat性能优化整理

性能优化专栏

1.tomcat性能优化整理
2.JVM性能优化整理
3.MYSQL性能优化整理



tomcat性能优化整理

1、你怎样给tomcat调优

  1. JMM参数调优:
      -Xms 表示JVM初始化堆的大小,-Xmx表示JVM堆的最大值。这两个值的大小一般根据需要进行设置。当应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃。因此-般建议堆的最大值设置为可用内存的最大值的80%。在catalina.bat 中,设置JAVA OPTS=’ -Xms256m-Xmx512m’,表示初始化内存为256MB,可以使的最大内存为512MB。

  2. 禁用DNS查询
      当web应用程序向要记录客户端的信息时,它也会记录客户端的P地址或者通过域名服务器查找机器名转换为IP地址。DNS查 询需要占用网络,并且包括可能从很多很远的服务器或者不起作用的服务器上去获取对应的IP的过程,这样会消耗一定的时间。 为了消除DNS查询对性能的影响我们可以关闭DNS查询,方式是修改server. xml文件中的enableLookups参数值:

Tomcat4

<Connector
className="org.apache.coyote.tomcat4.CoyoteConnector"port="80"
minProcessors="5"maxProcessors="75"enableLookups="false"redire
ctPort="8443"
acceptCount="100"debug="0"connectionTimeout="20000"
useURIValidationHack="false"disableUploadTimeout="true"/>
Tomcat5
<Connectorport="80"maxThreads="150"minSpareThreads="25"
maxSpareThreads="75"enableLookups="false"redirectPort="8443"
acceptCount="100"debug="0"connectionTimeout="20000"
disableUploadTimeout="true"/>
  1. 调整线程数

  通过应用程序的连接器(Con nector) 进行性能控制的的参数是创建的处理请求的线程数。Tomcat 使用线程池加速响应速度来处理请求。在Java中线程是程序运行时的路径,是在一个程序中与 其它控制线程无关的、能够独立运行的代码段。它们共享相同的地址空间。多线程帮助程序员写出CPU最大利用率的高效程序,使空闲时间保持最低,从而接更多的
请求。

  Tomcat4 中可以通过修改minProcessors和maxProcessors的值来控制线程数。这些值在安装后就已经设定为默认值并且是足够使用的,但是随着站点的扩容而改大这些值。minProcessors 服务器启动时创建的处理请求的线程数应该足够处理-个小量的负载。也就是说,如果-天内每秒仅发生5次单击事件,并且每个请求任务处理需要1秒钟,那么预先设置线程数为5就足够了。但在你的站点访问量较大时就需要设置更大的线程数,指定为参数maxProcessors的值。maxP rocessors的值也是有上限的,应防止流量不可控制(或者恶意的服务攻击), 从而导致超出了虚拟机使用内存的大小。如果要加大并发连接数,应同时加大这两个参数。web server 允许的最大连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是 1000个左右。在Tomcat5对这些参数进行了调整,请看下面属性:maxThreads Tomcat 使用线程来处理接收的每个请求。这个值表示
Tomcat可创建的最大的线程数。acceptCount指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。connnect ion Timeout 网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。minSpareThreadsTomcat初始化时创建的线程数。maxSpareThreads一旦创建的线程超过这个值,T omcat就会关闭不再需要的socket线程。最好的方式是多设置几次并且进行测试,观察响应时间和内存使用情况。在不同的机器、操作系统或虚拟机组合的情况下可能会不同,而且并不是所有人的web站点的流量都是一样的, 因此没有一刀切的方案 来确定线程数的值。

2、如何加大comcat连接数

  在tomcat配置文件server .xml中的配置中,和连接数相关的参数有:minProcessors :最小空闲连接线程数,用于提高系统处理性能,默认值为10maxProcessors :最大连接线程数,即:并发处理的最大请求数,默认值为75acceptCount :允许的最大连接数,应大于等于maxProcessors,默认值为100 enableLookups :是否反查域名,取值为: true或talse。为了提高处理能力,应设置为false connectionTimeout :网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。其中和最大连接数相关的参数为maxProcessors和acceptCount.如果要加大并发连接数,应同时加大这两个参数。web server 允许的最大连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个 左右。tomcat5中的配置示例:

<Connectorport="8080"
maxThreads="150"minSpareThreads="25"maxSpareThreads="75"
enableLookups="false"redirectPort="8443"acceptCount="100"
debug="0"connectionTimeout="20000"
disableUploadTimeout="true"/>

对于其他端口的侦听配置,以此类推。

3、怎样加大tomcat的内存

首先检查程序有没有限入死循环这个问题主要还是由这个问题java. lang. OutOfMemoryError:Java heap space 引起的。第一次出现这样的的问题以后,引发了其他的问题。在网上- -查可能是JAVA的堆栈设置太小的原因。
跟据网_上的答案大致有这两种解决方法:

1、设置环境变量

解决方法:手动设置Heap size
修改TOMCAT_ HOME/bin/catalina. sh
setJAVA_ OPTS= -Xms32m-Xmx512m
可以根据自己机器的内存进行更改。

2、java -Xms32m- -Xmx800m className
就是在执行JAVA类文件时加,上这个参数,其中className
是需要执行的确类名。(包括包名) 这个解决问题了。而且执行的速度比没有设置的时候快很多。如果在测试的时候可能会用Eclispe这时候就需要在Eclipse->run-arguments中的VM arguments 中输入-Xms32m-Xmx800m这个参数就可以了。
后来在Eclpse中修改了启动参数,在VMarguments加入了-Xms32m-Xmx800m,问题解决。

  一、java. lang. OutOfMemoryError:PermGen space
PermGen space的全称是Permanent Generation space ,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的,Class在被L.oader时就会被放到PermGen space 中,它和存放类实例Instance)的Heap区域不同,GC(Garbage Collection) 不会在主程序运行期对PermGen space 进行清理,所以如果你的应用中有很多CL ASS的话,
就很可能出现PermGen space 错误,这种错误常见在web服务器对JSP进行preco mpile的时候。如果你的WEB APP下都用了大量的第三方jar,其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了.
解决方法:手动设置MaxPermSize大小修
改TOMCAT_H0ME/bin/catalina.sh
在"echo"Using CATALINA_ BASE: $CATALINA_BASE"" 上面加入以下行: JAVA_0PTS="-server- -XX: PermSize=64M- XX:MaxPermSize=128m
建议:将相同的第三方jar文件移置到tomcat/shared/lib目录下,这样可以达到减少jar文档重复占用内存的目的。

二、java. lang .0utOfMemoryError:Java heap space
  Heap size设置
  JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size 的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。Heap size的大小是Young Generation 和TenuredGeneraion之和。
提示:在JVM中如果98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出此异常信息。
提示: Heap Size 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。
解决方法:手动设置Heap size
修改TOMCAT_ HOME/bin/catalina.sh
在"echo"Using CATALINA BASE: $CATALINA BASE"" 上面加入以下行:
JAVA_ _0PTS="-server-Xms800m-Xmx800m- XX:MaxNewSize=256m"

三、实例,以下给出1G内存环境下java jvm 的参数设置参考:

JAVA_0PTS="-server-Xms800m- -Xmx800m- -XX: PermSize=64M-
XX:MaxNewSize=256m- -XX:MaxPermSize=128m-
Dj ava. awt. headless=true"
很大的web工程,用tomcat默认分配的内存空间无法启动,如果不是在myeclipse中启动tomcat可以对tomcat
这样设置:
set JAVA_OPTS=-server-Xms2048m-Xmx4096m-XX:PermSize=512M- XX:MaxPermSize=1024M-Duser.timezone=GMT+08
或者
set JAVA_OPTS=-Xmx1024M-Xms512M-XX:MaxPermSize=256m
如果要在myeclipse中启动,上述的修改就不起作用了, 可如下设置:
Myeclipse->preferences->myeclipse->servers->tomcat->tomcat×.×->JDK面板中Optional Java VM arguments添加Xmx1024M- -Xms512M- -XX:MaxPe rmSize=256m
以上是转贴,但本人遇见的问题是:在myelipse中 启动Tomcat时,提示 “ava. lang. 0ut0fMemoryError:Java heap space” , 解决办法就是
: Myeclipse->preferences->myeclipse>servers-tomcat>tomcatx.x->JDK面板中的
Optional Java VM arguments 添加: -Xmx1024M-Xms512M- XX:MaxPermSize=256m

4、tomcat中如何禁止列目录下的文件

  在{tomcat_ home}/conf/web.xml中,把listings参 数设置成false即可,
如下:

<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>

5、Tomcat有几种部署方式

  tomcat中四种部署项目方法

第一种方法:
  在tomcat中的conf目录中,在server.xml中的, 节点中
添加:

<Context path="/hello" 
docBase="D:/eclipse3.2.2/forwebtoolsworkspacehello/WebRoot"deb
ug="0"
privileged="true">
</Context>

至于Context节点属性,可详细见相关文档。

第二种方法:
  将web项目文件件拷贝到webapps目录中。

第三种方法:
  很灵活,在conf目录中,新建Catalina (注意大小写)\ localhost 目录,在该目录中新建一个xml文件,名字可以随意取,只要和当前文件中的文件名不重复就行了,该xml文件的内容为:

<Context path="/hello"docBase="D:eclipse3.2.2forwebtoolsworksp
aceheloWebRoot"
debug="0"privileged="true">
</Context>

第3个方法有个优点,可以定义别名。服务器端运行的项目名称为path,外部访问的URL则使用XML的文件名。这个方法很方便的隐藏了项目的名称,对一些项目名称被固定不能更换,但外部访问时又想换个路径,非常有效。第2、3还有优点,可以定义一些个性配置,如数据源的配置等。

第四种办法:
  可以用tomcat 在线后台管理器,一般tomcat都打开了,直接上传war就可以

6、Tomcat的优化经验

  Tomcat作为web 服务器,它的处理性能直接关系到用户体验,下面是种
常见的优化措施:

  • 去掉对web. xml的监视,把jsp提前编辑成Servlet。有富余物理内 存的情况,加大tomcat使用的jvm的内存。

  • 服务器资源 服务器所能提供CPU、内存、硬盘的性能对处理能力有决定性影响。

  • 对于高并发情况下会有大量的运算,那么CPU的速度会直接影响到处理 速度。

  • 内存在大量数据处理的情况下,将会有较大的内存容量需求,可以用
    -Xmx- -Xms- -XX:MaxPermSize等参数对内存不同功能块进行划分。我们之 前就遇到过内存分配不足,导致虚拟机- -直处于full GC,从而导致处 理能力严重下降。

  • 硬盘主要问题就是读写性能,当大量文件进行读写时,磁盘极容易成为 性能瓶颈。最好的办法还是利用下面提到的缓存。

  • 利用缓存和压缩 对于静态页面最好是能够缓存起来,这样就不必每次从磁盘上读。这里我 们采用了Nginx作为缓存服务器,将图片、css、js文件都进行了缓存,有 效的减少了后端tomcat的访问。另外,为了能加快网络传输速度,开启 gzip压缩也是必不可少的。但考虑到tomcat已经需要处理很多东西了,所 以把这个压缩的工作就交给前端的Nginx来完成。除了文本可以用gzip压缩,其实很多图片也可以用图像处理工具预先进行 压缩,找到一个平衡点可以让画质损失很小而文件可以减小很多。曾经我就见过一个图片从300多kb压缩到几+kb,自己几乎看不出来区别。

  • 采用集群 单个服务器性能总是有限的,最好的办法自然是实现横向扩展,那么组建tomcat集群:是有效提升性能的手段。我们还是采用了Nginx来作为请求分流的服务器,后端多个tomcat共享session来协同工作。可以参考之前写的 《利用nginx+ tomcat+memcached组建web服务器负载均衡》。

  • 优化tomcat参数 这里以tomcat7的参数配置为例,需要修改conf/server.xml文件,主要是优
    化连接配置,关闭客户端dns查询。

<Connector port="8080"
protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443"
maxThreads="500"
minSpareThreads="20"
acceptCount="100"
disableUploadTimeout="true"
enableLookups="false"
URIEncoding="UTF-8"/>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值