文档章节

多线并发优化(tomcat)

pxk
 pxk
发布于 2017/09/12 13:51
字数 696
阅读 58
收藏 1

先说下问题是怎么来的吧。

项目背景:现在正在做的是一个爬虫项目,爬虫主要爬取各大电商的商品数据,然后清洗进入索引库,为客户提供搜索导购服务(说白了就是导购服务)。爬取这些数据的要求:实时性、准确性。重点是实时性,需要爬虫保证每天至少爬取一遍这些数据,对商品库进行更新。那么问题就来了,爬虫肯定是多线程的,而且要求执行效率要特别高,就是要快。从第一个版本的纯手工方式,到第二个版本的多线程调度和任务分配(主要是方便监控)。

问题表现:项目在本机跑起来100个线程毫无压力,而且cpu利用率也特别好。所以就直接部署到了测试环境的服务器上,跑了一个晚上第二天早上依赖发现内存溢出了,而且这个溢出以前没怎么见过,一般大家场景的内存溢出都是Java heap space或PermGen space ,而我这次遇到的是GC overhead limit exceeded,相信大家也很少遇到。(如果大家遇到前面两种请参考java内存溢出的三种情况和解决方案

解决思路:

    1、首先肯定是百度咯,百度不行翻出去google咯,找一些资料看了下,官方也有说明。问题根本原因是jvm gc行为中超过98%以上的时间去释放小于2%的堆空间时会报这个错误。

    2、为什么本机可以,到了测试服务器上不行了,然后一看服务器内存居然4G,运维的兄弟太坑了,给分那么点,我笔记本都是8g呢。后来先要求加内存到8G,但是还是没解决根本问题。

    3、查看了下内存使用情况,还是溢出了,导致新的线程无法创建,测试服务器使用线程池开了300个线程,不至于啊。所以只有修改tomcat的默认配置了,其实就加了2个参数,(linux就修改catalina.sh,windows当然是修改catalina.bat,加在文件的开头)

HEAP_SIZE="6000M"
NEW_SIZE="4200M"

      另外还多加了两个参数 ,提供jconsole连接的,方便监控jvm,如果再出问题就得靠这玩意儿了。

SERVER_IP="192.168.16.12"
SERVER_PORT="1909"

            下图是连接jconsole后监控的界面,大家会发现GC频率并不高,但是很高效

© 著作权归作者所有

共有 人打赏支持
pxk

pxk

粉丝 86
博文 26
码字总数 26616
作品 0
成都
程序员
私信 提问
加载中

评论(1)

zjg23
zjg23
GC overhead limit exceeded,超过98%的时间用来做GC并且回收了不到2%的堆内存
闲谈Tomcat性能优化

Tomcat在各位JavaWeb从业者常常就是默认的开发环境,但是Tomcat的默认配置作为生产环境,尤其是内存和线程的配置,默认都很低,容易成为性能瓶颈. 幸好Tomcat还有很多的提升空间.下文介绍一下...

ParkJun
2016/02/23
2.3K
13
浅谈Tomcat服务器优化方法

对于JavaWeb开发人员而言,Tomcat已成为默认的web服务器,但是在生产环境下使用Tomcat部署应用,我们如果采用Tomcat默认的配置,尤其是内存和线程的配置,其配置都很低,容易成为性能瓶颈,所...

动力节点
01/03
0
0
Tomcat 7优化前及优化后的性能对比

一、运行环境 CPU: Intel(R) Pentium(R) P6200@2.13GHz ; 内存:4G,装的是32位win7,只认出3G,没有花时间去整ramdisk之类的东西; 操作系统:win7 32位; JDK:1.7.055 Tomcat:7.0.53 ...

宏薯
2014/06/04
0
110
聊下并发和Tomcat线程数

最近一直在解决线上一个问题,表现是:Tomcat每到凌晨会有一个高峰,峰值的并发达到了3000以上,最后的结果是Tomcat线程池满了,日志看很多请求超过了1s。服务器性能很好,Tomcat版本是7.0.5...

jEpac
2016/07/26
21
0
Tomcat性能优化

最近一直在解决线上一个问题,表现是: Tomcat每到凌晨会有一个高峰,峰值的并发达到了3000以上,最后的结果是Tomcat线程池满了,日志看很多请求超过了1s。 服务器性能很好,Tomcat版本是7.0...

voole
2016/08/06
216
0

没有更多内容

加载失败,请刷新页面

加载更多

vue 对对象的属性进行修改时,不能渲染页面 vue.$set()

我在vue里的方法里给一个对象添加某个属性时,我console.log出来的是已经更改的object ,但是页面始终没有变化 原因如下: **受现代 JavaScript 的限制 (而且 Object.observe 也已经被废弃),...

Js_Mei
今天
2
0
开始看《Java学习笔记》

虽然书买了很久,但一直没看。这其中也写过一些Java程序,但都是基于IDE的帮助和对C#的理解来写的,感觉不踏实。 林信良的书写得蛮好的,能够帮助打好基础,看得出作者是比较用心的。 第1章概...

max佩恩
昨天
12
0
Redux 三大原则

1.单一数据源 在传统的MVC架构中,我们可以根据需要创建无数个Model,而Model之间可以互相监听、触发事件甚至循环或嵌套触发事件,这些在Redux中都是不被允许的。 因为在Redux的思想里,一个...

wenxingjun
昨天
8
0
跟我学Spring Cloud(Finchley版)-12-微服务容错三板斧

至此,我们已实现服务发现、负载均衡,同时,使用Feign也实现了良好的远程调用——我们的代码是可读、可维护的。理论上,我们现在已经能构建一个不错的分布式应用了,但微服务之间是通过网络...

周立_ITMuch
昨天
5
0
XML

学习目标  能够说出XML的作用  能够编写XML文档声明  能够编写符合语法的XML  能够通过DTD约束编写XML文档  能够通过Schema约束编写XML文档  能够通过Dom4j解析XML文档 第1章 xm...

stars永恒
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部