zoukankan      html  css  js  c++  java
  • tomcat并发量和内存的关系

    近期在进行一个项目的性能调优, 目标是支撑 1000 的并发数;
    web容器:apache2+tomcat6
    jvm:jdk6 linux x64
    程序:status2+spring+ibatis
    缓存:memcache
    服务器:4颗双核cup 8G内存

    由于本项目是网站项目只做展示用, 对时时性没要求, 做了几乎所有对象的缓存, memcache也在本机

    测试一:
    设置tomcat内存 CATALINA_OPTS="-Xms1024m -Xmx1024m -Xmn256m",然后使用apache ab 测试;
    ab -c 500 -n 5000 url
    使用 Jprofiler6 查看运行状况;主要看了内存, jvm线程, cpu 和 CG这几项
    注:对 Jprofiler 使用不熟悉,初次使用, 有些数据记不太清了
    内存:增长非常快, 主要是char[ ]非常高, 300-500M
    jvm线程:运行线程(runnable) 在 460-500之间,  锁定线程(blocking)在 10 和 500左右跳动 , Net I/O 在 200左右, waiting 在几十左右
    cpu:占用率最高的是 ognl 的getValue
    cg:年轻代非常的频繁, 老年代几乎占满, cg非常频繁, cpu消耗80%左右
    在使用ab压力的时候, 同时使用ie打开页面,不能访问,出现 502 错误, tomcat控制台频繁报(org.apache.jk.common.ChannelSocket   processConnection  
    WARNING:   processCallbacks   status   2  



    测试二:
    设置tomcat内存 CATALINA_OPTS="-Xms3000m -Xmx3000m -Xmn768m -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:CMSInitiatingOccupancyFraction=70",然后使用apache ab 测试;
    ab -c 1000 -n 10000 url
    同样使用 Jprofiler6 查看运行状况;主要看了 jvm线程, cup 和 CG
    jvm线程:运行线程(runnable) 在 10以下,  锁定线程(blocking)在 1000左右 , Net I/O 在 300-500左右, waiting 在几十左右
    cpu:占用率最高的是 ognl 的getValue
    cg:年轻代同样非常的频繁, 由于增加了内存, 调整了gc参数,老年代在70%的时候gc, 没有出现占满的情况对老年的gc减少很多,gc的 cpu消耗20%-30%左右
    在使用ab压力的时候, 同时使用ie打开页面,速度稍慢一点,但在5-10秒内可以正常访问页面, tomcat控制台只出现过一次
    (org.apache.jk.common.ChannelSocket   processConnection  
    WARNING:   processCallbacks   status   2  




    总结:
    经过上诉两次测试, 发现加大内存后老年代gc次数减少,占有cpu资源明显减少, tomcat 的效率提升非常的明显, 轻松应对了1000的并发测试, tomcat和web程序都是使用jvm, 看来不仅是web程序对内存有需求, 还得考虑 tomcat 自身对内存的需求。有不对的地方欢迎大家指出


    疑惑:
    对于tomcat线程有点疑惑, 加大内存后,运行线程怎么会一下这么少了呢, 锁定线程猛增; 在Jprofiler thread views 中找了个线程来查看状态, 发现首先是运行状态, 然后进入锁定状态, 会在锁定状态保持很久, 然后又可能变为运行状态, 或等待状态, 直到消亡,对tomcat的线程处理没研究过不熟悉, 对两次测试的 Jprofiler 的vm线程数据差别这么大, 没能理解, 在完成对高并发的支持 运行线程反而会减少。。。

    的确测试不够专业, 系统问题出来了, 运行段时间后, 1天 2天不等, tomcat的线程会满, 我设置的最大线程是2000, 停掉apache后tomcat线程就会下来, 然后再启动apache, 用ie访问速度还行, 不一会tomcat线程又堆积上去了, 最终重启tomcat就恢复正常了。 apache日志分析, 大概每秒访问量在30-40之间, 至今还未找到原因, 唯一的线索 Jprofiler 查看 cup 发现 ognl 消耗很高。
    请直接从程序找原因,都是内存里的操作,还每秒 30-40,性能很一般嘛!Memcache的使用方式对否,是不是可以直接使用Java的Map呢?
  • 相关阅读:
    CentOS6.4安装OpenSSL
    Linux下设置Tomcat开机启动
    Linux下Tomcat8.0.44配置使用Apr
    CentOS6.4将MySQL5.1升级至5.5.36
    Linux下实现MySQL数据库自动备份
    Linux将MySQL数据库目录挂载至新数据盘
    MySQL创建数据库与创建用户以及授权
    Node.js Mongoose数据库连接失败 提示:Authentication failed
    JBoss7.1.1远程无法访问
    mongodb3.4 远程连接认证失败
  • 原文地址:https://www.cnblogs.com/danghuijian/p/4400356.html
Copyright © 2011-2022 走看看