设为首页 收藏本站
查看: 1182|回复: 0

[经验分享] tomcat并发量和内存的关系

[复制链接]

尚未签到

发表于 2018-12-2 12:26:08 | 显示全部楼层 |阅读模式
近期在进行一个项目的性能调优, 目标是支撑 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呢?


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-642372-1-1.html 上篇帖子: JDK+Tomcat环境配置 下篇帖子: tomcat 服务器 和 servlet 容器
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表