精华内容
下载资源
问答
  • 这个调度方法就是在tomcat的web.xml文件里做设置,每隔几分钟就执行一个java类。这个java类里有个进程。我在这个进程里初始化数据库,然后做查询,再关闭连接。...请问为啥连接数不断增加呢? 期待高手啊!!!
  • 服务器环境8核 32G内存问题:在5000个连接的时候Tomcat内存基本吃满Tomcat 压测:连接数内存消耗CPU10006.9G100%200012G100%300019G100%400025G100%446830G100%更多连接已经无法建立检查下JVM内存使用情况,其中老...

    服务器环境8核 32G内存

    问题:

    在5000个连接的时候Tomcat内存基本吃满

    Tomcat 压测:

    连接数

    内存消耗

    CPU

    1000

    6.9G

    100%

    2000

    12G

    100%

    3000

    19G

    100%

    4000

    25G

    100%

    4468

    30G

    100%

    更多连接已经无法建立

    检查下JVM内存使用情况,其中老年代被占用了98.4%,有大量不能释放的对象在heap。

    老年代内存大小31.5G,老年代使用31G

    JETTY压测

    连接数

    内存消耗

    CPU

    1000

    1G

    25%

    3000

    1G

    25%

    5000

    1.1G

    25%

    10000

    1.2G

    25%

    20000

    1.4G

    50%

    内存情况老年代被使用了79.4%,老年代总大小3.5G占用0.5G

    通过现象我们可以看到jetty占用内存非常小,而TOMCAT暂用却非常多,但是国外论坛有人Tomcat却可以压到4万的连接,是什么东西占用了这么多heap空间呢?

    分析TOMCAT内存占满原因:

    一,由于测试方便在本地启动程序建立了501个连接,并且用jmap生成了快照

    二,我们用mat来分析下内存的情况(也可以用jhat,但是太low了很多还需要人工肉眼看和计算)

    我们可以看到WsFrameServer占用了2.9的heap空间对象个数恰好是我们建立的连接数

    三,现在我们来分析WsFrameServer对象,到底什么东西可以占用这么大

    我们可以看到WsFrameServer对象直接引用对象的heap空间HeapCharBuffer和HeapByteBuffer非常大

    我们再来看看这个大对象什么引用在引用,通过分析我们知道了原来是WsFrameServer的messageBufferText成员变量

    下面我们来看下源代码

    我们在WsFrameServer的父类中发现了这两个大对象的引用

    那么问题来了,是什么原因导致这个对象很大的呢?我们继续看源代码什么地方用来它,特别是初始化的时候

    我们检查到,这个地方初始化的,初始化大小是wsSession.getMaxBinaryMessageBufferSize()

    和wsSession.getMaxTextMessageBufferSize(),那么问题又来了,这两个值有是从哪里来的呢?

    我们查看源码

    有一个默认值是8K,如果是8K的话内存不至于溢出,看什么地方做了赋值

    原来是这个地方做的赋值,那么webSocketContainer又是从哪里来的呢?

    我们点进去

    这里要么是默认值,要么是什么地方做了设置我们打断点调试,而且这个默认值是8K,肯定是什么地方修改了,那么我们在set方法打断点

    断点来了,我们通过线程栈来分析下什么地方调到这里来的,跟着往上点

    最后我们发现是这个类ServletServerContainerFactoryBean,这个类是spring提供的,我们是在这儿用到了,原来如此,内存之所以这么大就是这里的设置导致的,这个设置的目的是让websocket可以传输更大的消息

    其实我们看到的Tomcat的webSocketContainer是实现了javax.websocket.webSocketContainer的,很明显这个是J2EE的规范我们可以查下这个规范

    其实这个类就是在初始化的时候可以让你设置websocket相关的一些参数

    但是它设置了之后对所有session都生效了所以导致我们的连接数上不去,有什么办法可以解决吗,我们查到有另外的J2EE规范可以在运行过程中动态的修改而且是针对特定session的

    那么问题来了,为什么jetty没有出现这个问题,如果是J2EE的规范那么我们设置这个值JETTY也应该出现这个问题,可是没有!

    我们再来对jetty进行调试,发现这个配置对jetty不起作用

    为什么不起作用呢?这又是另外的问题了~

    后来通过源码分析得知JETTY和TOMCAT的实现不一样,不知道算不算BUG,个人认为是JETTY的BUG~

    什么代码实现导致他们不一样呢?

    Tomcat每次请求过来时在创建session时都会把这个webSocketContainer作为参数传进去所以对所有的session都生效了

    我们来看看jetty

    启动初始化时jetty把webSocketContainer的参数值设置给了这个过滤器,我们看看这个过滤器它的dofilter方法

    其实在这个过滤器我们没有注册任何的访问URL,因为我们是通过spring提供的方式实现的websocket,如果我们在这个过滤器注册了访问URL那么所有过来的请求都会生效~可以继续跟后面的代码,其实就是调用的其他处理器来处理,这些处理器是在这里初始化的

    每个url都有一个单独的处理器,这个实现是springboot提供的

    spring给每一个websocket URL单独new 了一个处理器,jetty里面这个类是WebSocketServerFactory

    其实jetty的处理方式是事件驱动模式设计,把所有的请求当做一个事件,不同的事件有自己对应的eventdriver来处理

    重点是jetty在实例化这个对象的时候并没有把webSocketContainer所带的参数设置进去

    这就导致了Tomcat生效jetty没有生效,其实你还会发现虽然jetty的buffer默认大小是64K,Tomcat是8K,可是jetty压测的时候CPU和内存都比Tomcat少,这是为什么呢?

    原因是jetty用了对象池,不像tomcat来一次请求就new一个buffer,下面是jetty使用对象池的地方

    后面简单做了netty的压测10000个连接消耗内存190M,吊炸天的存在

    展开全文
  • 数据库连接池可能很多人一直不明白真正的作,也...数据库服务器被连接占,同时连接池因设定了最大连接数,而可能使得超过了连接时 数据库无法使用。有可能很多开发者因为以前用asp,php,vb等的原因,好像不关闭...
    数据库连接池可能很多人一直不明白真正的作,也无法真实的体会其明显的作用,
    很多初级开发者可能大我都是用完就close了,要用时就打开,这是否对小的应用来说
    用不用连接池效果不是很明显,还有一点就是初级开发者常常不记得关闭连接,使得
    数据库服务器被连接占满,同时连接池因设定了最大连接数,而可能使得超过了连接时
    数据库无法使用。有可能很多开发者因为以前用asp,php,vb等的原因,好像不关闭连接也没什么影响
    但在J2EE中,数据库连接不关闭后果很严重。
    我们来看看数据连接耗时操作。
    1)分析URL连接参数,包括协议、IP地址、端口等的分析与验证。并分板URL成为参数,如把协议,DATABSE,userName,passWord等从中分出来放入Hashtable中
    2)注删及加载驱动
    3)在注册的驱动列表中查找能使用的驱动,一般驱动管理员会一个个驱动去试,驱动通过分析URL是否为自己URL。如果是返回true
    4)驱动用传入的参数实例化继承自Connection的对象,产生Connection实例。
    5)和URL指定的数据库服务器进行SOCKET连接,进行网络数据传输握手。
    6)登录数据库服务器,创建statement及resultSet,并设置语言环境及数据格式.
    7)完成初台化工作,返回Connection对象。

    很显然一次连接要做上面主要的7个部分的操作,部分操作还比较耗时。当然测试中发现一段建立一个连接的耗时为几百毫秒,快时也有几十毫秒。
    频率比较少的访问问题不大,但是访问量很大时,耗时就非常明显,大测试发现用连接池去执行sql语句几乎不耗时间的。

    连接是不是必需的,只是在访问量比较大时确实能省很多的时间,提高效率,但在访问题很少的情况下,也能提高数据的操作效率,同时节省数据库
    的连接开销。

    那么连接池怎么实现的呢?连接池的最少应实现那些功能。
    1)连接在使用后不应马上关闭,可能后面其它程式还要使用。
    2)保留一个最小活动连接,使其程式不需要在建立连接时消耗时间,活动连接,可以在初始化时首先建立,也可以在连接中回收。
    3)最大连接数,连接池中的连接最大不超过这个数,这样做也是避免把数据连接耗完,通常这样的问题是因为程式没有写好的原因。
    4)处理超时连接,也就是连接超过多长时间被认为过期,然后从连接池中清除。
    5)重写Connection的close方法,因为哪不重写,将会使用户使用close方法时真正关闭连接,而不是放入连接池。

    其实连接池也比较简单,主要是实现上面几个需求。如tomcat的连接池实现类就是为:
    org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper

    因此连接池的逻辑为:
    1)取连接时,先到连接池中找,如果没有空闭的连接,而又没有超过最大连接数,建一个新的连接。
    如果超过了抛出异常。
    2)得到连接后,连接池减少1
    3)使用完后如果连接池没有超过最大连接数放入连接池,超过直接关闭。
    4)如果加入连接池的连接,连接池计数+1
    5)时间监听连接是否超时,如果超时将关闭,从连接池中-1,直到最后只有最少的活动连接数。

    这里我们有一个问题,连接池是怎么知道连接是否超过最大连接呢,有些连接在使用,他们在连接池中并没有计数,也就是说他们取出后计数器
    就-1了。,事实上我们可以用另一个记录正在使用的连接,如果用完就从中-1,也可以不去管在使用的连接,我们只用去管空闭的连接就行。
    应该我们设置连接池的最大连接数应是指空闭的最大连接数,而并非空闭连接数+正在使用的连接数。

    还要注意的一点是,连接池的列表应常驻内存,不然用完了就退出内存了,那前池子又要重建立,因此存入连接的对象应是static类型的。
    展开全文
  • 出现以上ORA错误是因为连接数和会话数满导致的。这样的情况下连sqlplus都登录不进去了。由于超过连接最大值导致无法登录,首先需要先断开占用的procress,即停掉所有tomcat释放连接,接下来就可以登录了。如果还是...

    出现以上ORA错误是因为连接数和会话数满导致的。这样的情况下连sqlplus都登录不进去了。由于超过连接最大值导致无法登录,首先需要先断开占用的procress,即停掉所有tomcat释放连接,接下来就可以登录了。如果还是不行,我这里是直接把数据库主机断网,再通过system用户登录sqlplus看一下procress和session的参数值和占用值: 

    sqlplus;
    SQL> show parameter processes;
    
    SQL> select count(*) from v$process;
    
    SQL>select count(*) from v$session;
    
    SQL> alter system set processes=500 scope=spfile;
    
    SQL> alter system set sessions=500 scope=spfile;

    根据需要修改完记得重启ORACLE两个服务才生效。

    展开全文
  • 线上的tomcat服务,昨天用户说无法访问,重启过一次,今天客户又...经过一番查找后,最后通过netstat -an | more 查看,某个IP有大量的绑定到tomcat服务端口的连接,原因就是这些连接tomcat服务线程给占满了,继...
    线上的tomcat服务,昨天用户说无法访问,重启过一次,今天客户又反馈说不能访问,登录到服务器上观察,tomcat内存占用不高,看日志输出tomcat里面跑的java程序并没有死掉,故障现象就是简单的客户端浏览器无法访问服务端口,经过一番查找后,最后通过netstat -an | more 查看,某个IP有大量的绑定到tomcat服务端口的连接,原因就是这些连接把tomcat服务线程数给占满了,继续分析故障原因,是客户端程序里面的apache httpclient 连接程序用完了以后没有关闭连接造成的。
    展开全文
  • 今天一大早来到公司就发现一台远程服务器的进程满了,无法连接上远程服务器,如下图所示:    出现这种情况,主要是因为进程跑满了,memory被消耗光了,无法为其他的操作,包括vnc操作命令和SSH连接分配内存,...
  • 问题现象: 应用跑在tomcat上,近期遇到个问题,运行一段时间后就拒绝服务, 其他程序连接不上应用, 出...第一次出现问题时, 根据经验判断是tomcat的线程数满了, 在服务器上查看链接数的确很多, 就修改了tomca...
  • acceptorThreadCount用于接受连接的线程。增加了多CPU的机器上这个值,虽然你永远不会真正需要超过2。此外,有很多非保持活动连接,你可能想增加这个值。默认值是1。acceptorThreadPriority接受者线程的优先级...
  • 一般来说,按照网上提供的一些方法,将... 今天亲身经历了这样一个过程,apache的最大连接数调到了4500,但都还不够用,一会就跑满了。而Tomcat这边压力却不大,同时,发现mod_jk.log里面有很多这样的错误记录: ...
  • 一般来说,按照网上提供的一些方法,将... 今天亲身经历了这样一个过程,apache的最大连接数调到了4500,但都还不够用,一会就跑满了。而Tomcat这边压力却不大,同时,发现mod_jk.log里面有很多这样的错误记录:  
  • #每次检测时,需要检测多少个数据连接,一般设置为与最大连接数一样,这样就可以检测完所有的连接 numTestsPerEvictionRun: 8 #一个数据库连接连接多少时间之外,我们认为其应该不再适用了(可能下一次就会失效...
  • 运维同事 找我说网站打不开了 ,打开tomcat 日志显示的问题 是这样的 我小组的组长说是,数据库的连接池满了,把最大连接数调大就可以。 在配置数据源的地方,将数据库的最大连接数增大 ps:以后再补充吧。 ...
  • 自从应用系统开始使用连接池以后,Connection pool就开始流行起来。 一直有这么一种说法,...使用oc4j、Tomcat和weblogic的同志可能会发现,只要访问量大,无论在连接池中设置多少上限连接数,总会占,总会抛异...
  • 前言: 最近生产上出现一个问题,描述如下: springcloud分布式环境下,服务...1.首先查看tomcat连接是不是满了,通过netstat -nat|grep -i “服务B端口号”|grep ESTABLISHED|wc -l,连接数为300多,tomcat默认最...
  • jconsole的巨大作用

    2013-10-11 18:29:44
    要命的一个礼拜终于要过去了,这...==================================================处理过程:1、查看日志,输出信息为tomcat连接数,线程阻塞,之后将tomcat-ajp的maxthreads为600,并做量为750的等待队列...
  • 同事说是我这台机的连接数满了,数据库不让我连接了。 可是我并没有什么连接操作,只是开一个tomcat,同事又提醒数据库的url改了,叫我更改proxool里面的url配置,改了,也不行。后来有人说改下机器上的mysql客户端...
  • 方案1 很多服务都需要调用图片微服务获得图片,导致图片微服务的连接数被沾,导致雪崩. 排查思路: 微服务配置 # 最大线程数 server.tomat.max-threads=5000 # 最大连接数 server.tomcat.max-connections=20000 #...
  • 服务追查问题

    2019-11-25 21:27:55
    1、Cannot allocate memory问题,进程数满了的解决办法 今天一大早来到公司就发现一台远程服务器的进程满了,无法连接上远程服务器,如下图所示:    出现这种情况,主要是因为进程跑满了,memory被消耗光了,...
  • solr4中HttpSolrServer使用的问题

    千次阅读 2015-04-07 17:17:53
    前段时间,偶尔看到前端tomcat报异常,提示httpclient连接满了,后来查阅了solrj源码,不自行定义httpclient的话,默认最大链接是20,单主机最大是2,确实有点少。
  • 开始上线的时候因为人数不多感觉没太多问题,随着正式环境的发布,开人有人反映服务器页面无法打开,连入tomcat查看时发现连接数且CPU也用到了极限,初始的架构如下图所示,其使用1台tomcat和一台数据库服务器。...
  • 20.2. Session

    2017-12-18 13:28:00
    firewall (nat session) - switch (Forwarding bandwidth) - os (ulimit,sysctl) - application (httpd,vsftpd,tomcat ...) ...当你的带宽没有,但tcp不能建立连接,这时你就要考虑会话了。 20.2.1.fire...
  • 作用: 作为保护机制,在服务宕机,网络等原因引起的服务不可用时,触发服务降级或者熔断以保证其他服务的可用。...逐渐占所谓连接数,从而导致整个微服务无连接可用也就导致整个系统不可用了...
  • 在某次工作的环境中发生接口调用一段时间之后出现 gateway timeout 504 问题,并随着大量的请求数量增大导致所有的接口都无法进行访问,第一时间怀疑是 tomcat 的请求连接数或线程池被压,后来利用本篇提到的方法...
  • sentinel 简单使用

    2021-04-06 22:09:54
    sentinel1. springboot 整合 Sentinel1.1 sentinel-...  答:对于服务端来说,当请求量达到了 tomcat 设置的最大连接数,请求任务会加入任务队列中等待被执行,但如果任务队列也满了,则会直接拒绝其它请求。
  • 面试题2021-2-24

    2021-02-24 16:38:30
    给某CentOs6虑拟机添加了新的数据盘,... 如何查看与RabbtMQ服务器之间的establish状态连接数? netstat-an|grep'ESTABLISHED'|grep'tcp'|wc-l 如何实现omcat在操作系统重启后自动重启?Tomcat部署在/opt/a...
  • df 命令: linux中df命令的功能是用来检查linux服务器的文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。...服务器tomcat启动起不来,而且连接到服务器上开启服务

空空如也

空空如也

1 2
收藏数 38
精华内容 15
关键字:

tomcat连接数满了