堆栈溢出java Tomcat调优

1、在配置的tomcate的JDk 的Otptions java VM agurment中配置参数 -Xmx1024M  -Xms512M,更换tomcat目录下的Bin下面的包

2、在环境变量中加:JAVA_OPTS=-Xms64m -Xmx512m(最小内存,最大内存)

Tomcat调优

一、 控制线程数server.xml

       >>web server允许的最大连接数还受制于操作系统的内核参数设置,

通常Windows是2000个左右,Linux是1000个左右。

       线程数参数含义

minProcessors    服务器启动时创建的处理请求的线程数

maxProcessors     最大可以创建的处理请求的线程数

acceptCount       指定当所有可以使用的处理请求的线程数都被使用时,

                 可以放到处理队列中的请求数,超过这个数的请求将不予处理

connnectionTimeout 网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。

 

Tomcat 5的线程数目参数修改为:

minSpareThreads  Tomcat初始化时创建的线程数。

maxSpareThreads  一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。

 

调整该参数为最优Processors,在限制的情况下会发挥不了最大连接数目

本机TOMCAT4.1测试的时候,50个用户,在100个线程的情况是最优的,在点击数\响应时间\并发用户数都为最好

maxProcessors为50,情况会出现连接不够用的情况,为200出现内存溢出

 

Tomcat4中可以通过修改minProcessors和maxProcessors的值来控制线程数。这些值在安装后就已经设定为默认值并且是足够使用的,但是随着站点的扩容而改大这些值。

minProcessors服务器启动时创建的处理请求的线程数应该足够处理一个小量的负载。也就是说,如果一天内每秒仅发生5次单击事件,并且每个请求任务处理需要1秒钟,那么预先设置线程数为5就足够了。但在你的站点访问量较大时就需要设置更大的线程数,指定为参数maxProcessors的值。

maxProcessors的值也是有上限的,应防止流量不可控制(或者恶意的服务攻击),

从而导致超出了虚拟机使用内存的大小。如果要加大并发连接数,应同时加大这两个参数。

web server允许的最大连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个左右。

 二、设置TOMCAT启动内存

       启动JAVA启动内存参数

-Xms JVM初始化堆的大小

-Xmx  JVM堆的最大值

       Tomcat修改启动内存的地方

catalina.bat中修改变量,JAVA_OPTS=-Xms500m-Xmx500m

       一般把-Xms和-Xmx设为一样大

       一般建议堆的最大值设置为可用内存的最大值的80%,1024M一般够了

       堆大小必须合适

如果堆设置较大,则GC次数变少,但每次花费较长时间,从而导致系统处理能力抖动较大;如果堆设置较小,则GC变得频繁,虽然对系统性能影响较小,但频繁的GC也会耗费系统资源

 

这两个值的大小一般根据需要进行设置。

初始化堆的大小执行了虚拟机在启动时向系统申请的内存的大小。

一般而言,这个参数不重要。但是有的应用程序在大负载的情况下会急剧地占用更多的内存,

此时这个参数就是显得非常重要,如果虚拟机启动时设置使用的内存比较小而在这种情况下有许多对象进行初始化,

虚拟机就必须重复地增加内存来满足使用。由于这种原因,我们一般把-Xms和-Xmx设为一样大,而堆的最大值受限于系统使用的物理内存。

一般使用数据量较大的应用程序会使用持久对象,内存使用有可能迅速地增长。

当应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃。因此一般建议堆的最大值设置为可用内存的最大值的80%。

由于Jvm系统垃圾收集机制的存在,在高负载情况下如果能根据系统的具体要求有效的调整最优化堆的大小,也可以起到一定优化作用。如果堆设置较大,则GC次数变少,但每次花费较长时间,从而导致系统处理能力抖动较大;如果堆设置较小,则GC变得频繁,虽然对系统性能影响较小,但频繁的GC也会耗费系统资源。

三、负载均衡

 

负载均衡实现的方式大概有四种:

第一是通过DNS,但只能实现简单的轮流分配,不能处理故障,

第二如果是基于MS IIS,Windows 2003 server本身就带了负载均衡服务,

第三是硬件方式,通过交换机的功能或专门的负载均衡设备可以实现,

第四种是软件方式,通过一台负载均衡服务器进行,上面安装软件

  使用Apache Httpd Server做负载平衡器,Tomcat集群节点使用Tomcat就可以做到以上第四种方式。

 这种方式比较灵活,成本相对也较低。另外一个很大的优点就是可以根据应用的情况和服务器的情况采取一些策略。

 

四、 预编译

       使用Jikes

Jikes是性能优良的Java编译器,在jsp容器中使用Jikes替代Sun的编译器能够有效提高jsp文件的编译速度。对于Tomcat 5.5,可以参考Jasper-Howto。要注意的是Windows版本的Jikes是不支持-encoding选项的,你需要自己编译。可以参考这里。

 

       用Ant进行预编译

Tomcat官方推荐的部署方式是使用Ant对jsp进行预编译。直接在部署时将jsp编译为servlet类,能够在运行初期时显著提高响应速度

 

java 内存管理及性能调优

调优总的思想:
2、内存不是越大越好,太小会频繁GC,太大GC一次的时间非常长
3、调整总体堆的内存,-Xms1024m   -Xmx1024m好多情况表现很好
4、可以用visualGC观察,内存各个区的情况,old eden s0 s1 per区
   一般per 64M够了,但是在Sping框架中,加载的类非常多,所以可适当加大
   一般old区是young的两倍
 可以配置JAVA启动参数,设置输出gc日志,比如tomcat配置catalina.bat文件l
5、可以使用工具对输出的日志进行分析,检查full gc的时间
6、检测线程死锁,可以用jconsole,检测死锁,查看死的原因和死锁的代码具体位置
   一般建议写线程代码的时候,最后给线程起名,这样容易识别线程
7、调整操作系统的文件句柄,因为每个连接在UNIX中是当作一个文件句柄来的,如果
太少了,会出现连接拒绝的情况。ulimit –n 可以查看文件句柄数目,一般机器可以设为1024,

机器好的可以设置大一点。在xp中,则有可能限制了线程数目,所以一般用win server版的系统

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值