`
bevis.cn
  • 浏览: 153989 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Tomcat对于流量稍大网站的设定改进

阅读更多
前段时间一个项目,因为网站架构设计不合理,用户也用了快两年了,可是今年开始他们和其它网站合作,比如yahoo,这样的话,流量可能比较大,所以常常当机。
前几天有对程式进行少量的修改,然后调整tomcat的一些设定,性能方面,也比原来好很多,但是还是有一些吃力:
后来在正常我网络环境下压力测试,最高峰的时候,38,337次/小时请求首页
但是反应时间有些长,
后来我用软件看一下jvm的情况:
liveThreads :1228
demoThreads:1229
Heap都还有很多空白,没有怎么用完。
PermGen只有60M,且完全用完!
线程已经达到我开的值,所以反应时间长,可能是因为tomcat请求数已经满了,再来的请求就要排队。

下面把这个系统的运行环境给大家看一下,大家帮我看一下,还有没有哪里需要改善的

1.软件硬件环境
Intel(R) Xeon(R) cpu 5130 2.00GHz,2.00GHz
3.12GB RAM
server 2003 sp2
Tomcat6.0.13免安装版
JDK 1.5

2.Tomcat 下server.xml的一些设定
<Connector port="80"
maxHttpHeaderSize="8192"
maxThreads="1200"
minSpareThreads="80"
maxSpareThreads="300"
maxKeepAliveRequests="200"
enableLookups="false"
redirectPort="8443"
acceptCount="800"
connectionTimeout="20000"
disableUploadTimeout="true"
URIEncoding="UTF-8"/>

3. 内存是在catalina.bat里设定
set JAVA_OPTS=-Xms628m -Xmx1028m
在系统进行压力测试的情况下:
cpu占用在18%--70%(这是从任务管理器里看到的)
内存:1.18G(这是从任务管理器里看到的)
liveThreads :1228 (这是从visualvm里看到的)
demoThreads:1229(这是从visualvm里看到的)
Heap都还有很多空白,没有怎么用完。
PermGen只有60M,且完全用完!
这里我有一点奇怪,我明明设的maxThreads="1200" ,为什么这里会达到1228

附件中有个图片,是我在visualvm中看到的结果,
从16:00开始测试的,所以各种数据都是从16:00开始陡增
  • 大小: 176.4 KB
分享到:
评论
32 楼 fancuixia 2009-11-20  
改装64位操作系统,把Tomcat的内存调到2g,降低最大等待时间……
31 楼 diddyrock 2009-11-16  
maxKeepAliveRequests="200"
这个不能改小点么?
前端用nginx的keep alive好了,把这个值设置为1看看,perm加到256m吧,你daemon进程那么多当然会perm耗尽了,daemon进程一直都在。试着吧maxThreads调小点,什么应用要这么多进程啊,200个还不够用么???
30 楼 srdrm 2009-11-13  
线程这么高,说明线程还是顶不住,实在不行用nginx 吧。

但之前可以再观察一下,据我的经验,请观察线程请求的是什么资源,如果是下载的资源,大文件,可能就会一直占用很多线程,但内存占用并不大。

同时请观察是否有一些客户端开了多线程下载工具,这些都会导致你的网站慢,但内存并不见涨,CPU也占用不多。我们做应用如果同时还放一些文件做下载就完了,特别是放在互联网上的被多线程下载你就郁闷吧

connection timeout 是可以设小一点

关于 visualvm中观察的 1229 的线程属正常,这另外的29是系统的其他线程,1200 只是处理http线程

像其他几位讲的,如果流量实在大,还是考虑用个专门的webserver做前端好一些。

29 楼 java_zhanghui 2009-11-13  
connectionTimeout="20000",可以设置相对小一些。
http代理端能负责一些请求相应,其它就小下去了。
28 楼 java_zhanghui 2009-11-13  
用http代理+tomcat tomcat只负责动态处理jsp,servlet等。图片缓存都用代理静态解析,首页最好静态化,或缓存读取。
27 楼 teclogid 2009-11-13  
线程开的太多了把?
tomcat6 是nio,不需要开那么大,开的越大,性能反而下降。
我之前测试过 tomcat6 开20个线程,性能要比开200个线程好。
tomcat5开200线程性能接近tomcat6开20个线程。
性能调整,以实际环境,实际压力测试结果为准。环境不一样,没有太大的参考性。
当然貌似用apr性能最好一点。
处理静态资源tomcat未必比apache慢,至少我之前测试过的结果是这样的。
使用apache主要是考虑到安全性,和利用apache已有的一些模块,比如说缓存等等之类。
如果只是处理静态资源,不配apache也可以。配了性能也不会有多少提高。
26 楼 nelapsi 2009-11-13  
高并发请求下,处理请求时间过长,导致线程突增,再加上请求超时时间设置过大。线程图已经很清晰呈现问题所在。
25 楼 whaosoft 2009-11-13  
换个服务器估计会好点
24 楼 xiebiao110 2009-11-13  
个人经验,tomcat默认的设置基本上是最优的,不需要把相关参数调整的过大,你看看tomcat源码就知道了,你们很多默认值都比较低,如果调整的太大,不合适。
你面临的这个问题的解决思路有几点

1.先查一下代码问题,是不是代码,或者数据库的瓶颈导致,最好跟踪一下。
2.如果应用与session无关,只需要nginx + 多个tomcat负载均衡一下就ok了。
3.与session有关,则tomcat集群
第一点很重要
23 楼 niyunjiu 2009-11-13  
toney_kissinger 写道
1、linux+java6+nginx+tomcat6,可多配几个Tomcat
2、把你应用中是静态文件与动态文件分离开,尽可能做页面做成静态文件,由nginx转发,Tomcat只做动态请求部分。
3、将有规律性变动的数据做成静态文件,由后台引擎定时生成静态文件。

其实你类似的问题以前我也遇到过,很是头疼。改造之后系统平稳许多。希望对你有帮助



这位仁兄说的很对,在下补充几点:
1、如果是前端连几个tomcat,要注意session sticky
2、tomcat加上apr支持,这样的话,不用前端性能也会大大提高
3、thread不要设的太高,一般一个cpu200个,多了的话,线程切换反而导致性能下降。
4、记下每个请求的处理时间,找到时间最长的几个url,找出问题,解决之。具体方法可以写个filter即可。
5、关注下数据库的性能情况吧

22 楼 pantiansheng 2009-11-13  
bevis.cn 写道
toney_kissinger 写道
1、linux+java6+nginx+tomcat6,可多配几个Tomcat
2、把你应用中是静态文件与动态文件分离开,尽可能做页面做成静态文件,由nginx转发,Tomcat只做动态请求部分。
3、将有规律性变动的数据做成静态文件,由后台引擎定时生成静态文件。

其实你类似的问题以前我也遇到过,很是头疼。改造之后系统平稳许多。希望对你有帮助


我之前也有试过把动态的jsp转为静态的,
记得当时是在网上copy段java代码,也就是加一个过滤器,当第一次请求的时候生成html,可是好像第一次有一些问题,也还有其它一些因素,比如有些要记录日志,做成静态页面的话,写日志有一些麻烦。
不知道你们用什么引擎做静态页面的?



如果这样,你可以考虑将需要记录日志的页面缓存起来,定期清理缓存
21 楼 bevis.cn 2009-11-13  
toney_kissinger 写道
1、linux+java6+nginx+tomcat6,可多配几个Tomcat
2、把你应用中是静态文件与动态文件分离开,尽可能做页面做成静态文件,由nginx转发,Tomcat只做动态请求部分。
3、将有规律性变动的数据做成静态文件,由后台引擎定时生成静态文件。

其实你类似的问题以前我也遇到过,很是头疼。改造之后系统平稳许多。希望对你有帮助


我之前也有试过把动态的jsp转为静态的,
记得当时是在网上copy段java代码,也就是加一个过滤器,当第一次请求的时候生成html,可是好像第一次有一些问题,也还有其它一些因素,比如有些要记录日志,做成静态页面的话,写日志有一些麻烦。
不知道你们用什么引擎做静态页面的?
20 楼 toney_kissinger 2009-11-13  
1、linux+java6+nginx+tomcat6,可多配几个Tomcat
2、把你应用中是静态文件与动态文件分离开,尽可能做页面做成静态文件,由nginx转发,Tomcat只做动态请求部分。
3、将有规律性变动的数据做成静态文件,由后台引擎定时生成静态文件。

其实你类似的问题以前我也遇到过,很是头疼。改造之后系统平稳许多。希望对你有帮助
19 楼 lnaigg 2009-11-12  
PermGen要优化
apache前置是肯定要做的
18 楼 leejon 2009-11-12  
hellolaojiang 写道
如果是网站的话,静态流量应该占很大比例.使用 Apache httpd + Tomcat 的组合要好过只用Tomcat的情况.让Apache http server处理静态文件,Tomcat只负责处理动态页面.

问一下,这是不是就是常说的服务器的集群?
17 楼 forchenyun 2009-11-12  
单tomcat吞吐率必然上不去,大方向可以从集群及组件分离的考虑着手,细节上用内存监视工具看看瓶颈吧
16 楼 akandfxs 2009-11-12  
貌似平均每秒也不到20个请求。这个时候说小时访问不太好,应该用tomcat的access日志分析每秒的最大访问量,看看每秒访问量的变化吧。感觉这个访问量应该可以承受。
15 楼 sacii 2009-11-12  
JRockit可以回收PermGen
多开几个tomcat,用Apache或者nginx做负载均衡
14 楼 xifo 2009-11-12  
Windows通常也是一个瓶颈,我在Linux(32位Ubuntu9.10)和Windows(XP sp2)环境下,使用同一个Tomcat(6.0.20),相似的虚拟机(1.6),通过Apache的AB测试同一个页面,均未连接数据库,Linux环境下每秒处理的请求数超过1000个,Windows环境下不到350个。
13 楼 linzy410 2009-11-12  
建议做动静分离

相关推荐

    各种版本tomcat压缩包

    对于大型或高流量网站,可能还需要考虑负载均衡和集群配置。 8. **日志与监控**: Tomcat的日志系统可以帮助开发者调试和诊断问题,通过调整logging.properties文件可以定制日志级别和输出格式。JMX(Java ...

    Tomcat7 64位机运行问题处理

    在提供的文件“解决64位系统运行tomcat问题”和“tomcat-users设定问题”中,可能包含了更多具体问题的解决方案和示例配置。阅读并按照其中的指南操作,有助于解决特定的故障。记住,始终保持Tomcat和JDK的更新,以...

    Tomcat优化相关问题.pdf

    Tomcat作为一款广泛使用的Java应用服务器,其性能优化对于提升Web应用的响应速度和稳定性至关重要。以下是一些针对Tomcat的调优策略: 1. **JVM参数调优**: - `-Xms&lt;size&gt;`:设置JVM初始堆内存大小。这决定了JVM...

    java websocket

    这种客户端是主动方,服务端是被动方的传统Web模式 对于信息变化不频繁的Web应用来说造成的麻烦较小,而对于涉及实时信息的Web应用却带来了很大的不便,如带有即时通信、实时数据、订阅推送等功能的应 用。...

    第三讲-压力测试实战、性能瓶颈分析及服务优化实战.pdf

    前端系统设计为一个模拟唯品会秒杀场景的应用,所有商品都设定为秒杀商品,具有库存限制和时间限制,以模拟真实的抢购环境。这一部分强调了前端对于用户体验和系统稳定性的关键作用。 【阿里云环境】 课程中介绍了...

    UrlRewriter Java v2.0 RC1

    UrlRewriter Java v2.0 RC1 是一个用于Java应用程序的URL重写库,它主要用于改进网站的SEO(搜索引擎优化)以及实现灵活的URL映射规则。这个版本是Release Candidate 1,意味着它是即将正式发布的稳定版本前的一个...

    程序员简历模板3.docx

    在工作经验方面,该程序员从2016年9月至今在XX简历信息科技有限公司担任JAVA开发工程师,主要贡献包括改进模拟退火算法在MATLAB平台上的实现,提高了算法精确度至99%,并成功申请了一项专利——基于多相位模拟退火...

    ipqtraffic web statistics-开源

    总之,IPQtraffic Web统计提供了一种开源且灵活的方式来管理和理解网络流量,对于任何需要监控网络性能的组织来说,都是一个有价值的工具。通过深入学习和使用,你可以更有效地管理和优化你的网络环境。

    《网络营销与策划》试题及答案.docx

    - **重要性**: 反映网站流量和用户兴趣度。 #### 二、问答题知识点解析 11. **电子支付** - **定义**: 电子交易中的货币支付或资金流转。 - **特点**: 安全、高效、便捷。 - **应用**: 在线购物、缴费等。 ...

    JAVA上百实例源码以及开源项目源代码

    设定字符串为“张三,你好,我是李四” 产生张三的密钥对(keyPairZhang) 张三生成公钥(publicKeyZhang)并发送给李四,这里发送的是公钥的数组字节 通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到张三编码后...

Global site tag (gtag.js) - Google Analytics