精华内容
下载资源
问答
  • Tomcat当前线程

    2021-03-14 21:44:38
    当前线程由apache动态管理。...以下是启动工作线程的主要流程。static int worker_run(apr_pool_t *_pconf, apr_pool_t *plog, server_rec *s)startup_children(remaining_children_to_start); //server/mpm/w...

    当前线程由apache动态管理。

    frompache的源代码中的worker.c: 根据需要启动线程。以下是启动工作线程的主要流程。

    static int worker_run(apr_pool_t *_pconf, apr_pool_t *plog, server_rec *s)

    startup_children(remaining_children_to_start); //server/mpm/worker/worker.c

    if (make_child(ap_server_conf, i) < 0) { //server/mpm/worker/worker.c

    child_main(slot); //server/mpm/worker/worker.c

    rv = apr_thread_create(&start_thread_id, thread_attr, start_threads

    rv = apr_thread_create(&threads[i], thread_attr, worker_thread, my_info, pchild);

    当空闲线程> max_spare_threads,Apache会尽量减少孩子杀死进程/线程的线程备用,以减少空闲线程数。

    if (idle_thread_count > max_spare_threads) {

    /* Kill off one child */

    ap_worker_pod_signal(pod, TRUE);

    retained->idle_spawn_rate = 1;

    }

    内部apache管理这些子进程,并使用信号与子进程通信以根据需要调整线程。 所有线程管理ap_scoreboard_image->servers[i][j];

    apache将监视线程数,并使用套接字发出让infoCollector知道。 大致由下面的代码(无关行被删除)

    ./httpd/modules/cluster/mod_heartbeat.c

    for (i = 0; i < ctx->server_limit; i++) {

    ....

    for (j = 0; j < ctx->thread_limit; j++) {

    ws = &ap_scoreboard_image->servers[i][j];

    if (res == SERVER_READY && ps->generation == mpm_generation) {

    ready++;

    }

    }

    }

    len = apr_snprintf(buf, sizeof(buf), "v=%u&ready=%u&busy=%u", MSG_VERSION, ready, busy);

    ...

    rv = apr_socket_sendto(sock, ctx->mcast_addr, 0, buf, &len);

    在Tomcat中: ./tomcat/java/org/apache/catalina/ha/backend/CollectedInfo: 这些线程信息被接收。 java的 并显示: /Users/twer/lab/tomcat/java/org/apache/catalina/manager/StatusTransformer.java

    writer.write(" currentThreadCount=\"" + mBeanServer.getAttribute(tpName, "currentThreadCount") + "\"");

    展开全文
  • 并发和Tomcat线程

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

    转自

    最近一直在解决线上一个问题,表现是:

    Tomcat每到凌晨会有一个高峰,峰值的并发达到了3000以上,最后的结果是Tomcat线程池满了,日志看很多请求超过了1s。

    服务器性能很好,Tomcat版本是7.0.54,配置如下:

    maxThreads="3000" minSpareThreads="800"/>

    connectionTimeout="60000"

    keepAliveTimeout="30000"

    maxKeepAliveRequests="8000"

    maxHttpHeaderSize="8192"

    URIEncoding="UTF-8"

    enableLookups="false"

    acceptCount="1000"

    disableUploadTimeout="true"

    redirectPort="8443" />

    事后thread dump看其实真正处于RUNNABLE状态的线程很少,绝大部分线程都处于TIMED_WAITING状态:

    于是大伙都开始纠结为什么线程会涨到3000,而且发现即使峰值过了线程数并不会降下来。

    我们首先想到的是:

    后端应用的处理瞬间比较慢,“堵住了”导致前端线程数涨了起来。

    但是优化一个版本上线后发现虽然涨的情况有所好转,但是最终线程池还是会达到3000这个最大值。

    ==================================分割线=========================================

    以上是大背景,中间的过程省略,直接跟各位说下目前我得到的结论:

    1、首先是为什么线程不释放的问题?

    简单说下我验证的Tomcat(7.0.54)线程池大概的工作机制

    Tomcat启动时如果没有请求过来,那么线程数(都是指线程池的)为0;

    一旦有请求,Tomcat会初始化minSapreThreads设置的线程数;

    Tomcat不会主动对线程池进行收缩,除非确定没有任何请求的时候,Tomcat才会将线程池收缩到minSpareThreads设置的大小;

    Tomcat6之前的版本有一个maxSpareThreads参数,但是在7中已经移除了,所以只要前面哪怕只有一个请求,Tomcat也不会释放多于空闲的线程。

    至于Tomcat为什么移除maxSpareThreads这个参数,我想也是出于性能的考虑,不停的收缩线程池性能肯定不高,而多余的线程处于等待状态的好处是一有新请求过来立刻可以处理。

    而且大量的Tomcat线程处于等待状态不会消耗CPU,但是会消耗一些JVM存储。

    补充:上面标红的一句有点问题,进一步验证发现只有使用Keep-Alive(客户端和服务端都支持)时才是这种表现,如果客户端没有使用Keep-Alive那么线程会随着TCP连接的释放而回收。

    Tomcat中Keep-Alive相关的参数:

    maxKeepAliveRequests:

    The maximum number of HTTP requests which can be pipelined until the connection is closed by the server. Setting this attribute to 1 will disable HTTP/1.0 keep-alive, as well as HTTP/1.1 keep-alive and pipelining. Setting this to -1 will allow an unlimited amount of pipelined or keep-alive HTTP requests. If not specified, this attribute is set to 100.

    keepAliveTimeout:

    The number of milliseconds this Connector will wait for another HTTP request before closing the connection. The default value is to use the value that has been set for the connectionTimeout attribute. Use a value of -1 to indicate no (i.e. infinite) timeout.

    2、为什么线程池会满?

    这是我现在纠结的核心。到底是不是应用的性能慢导致的,我现在的结论是有关系,但关键是并发。

    Tomcat的线程池的线程数跟你的瞬间并发有关系,比如maxThreads设置为1000,当瞬间并发达到1000那么Tomcat就会起1000个线程来处理,这时候跟你应用的快慢关系不大。

    那么是不是并发多少Tomcat就会起多少个线程呢?这里还跟Tomcat的这几个参数设置有关系,看官方的解释是最靠谱的:

    maxThreads:

    The maximum number of request processing threads to be created by this Connector, which therefore determines the maximum number of simultaneous requests that can be handled. If not specified, this attribute is set to 200. If an executor is associated with this connector, this attribute is ignored as the connector will execute tasks using the executor rather than an internal thread pool.

    maxConnections:

    The maximum number of connections that the server will accept and process at any given time. When this number has been reached, the server will accept, but not process, one further connection. This additional connection be blocked until the number of connections being processed falls below maxConnections at which point the server will start accepting and processing new connections again. Note that once the limit has been reached, the operating system may still accept connections based on the acceptCount setting. The default value varies by connector type. For BIO the default is the value of maxThreads unless an Executor is used in which case the default will be the value of maxThreads from the executor. For NIO the default is 10000. For APR/native, the default is 8192.

    ……

    acceptCount:

    The maximum queue length for incoming connection requests when all possible request processing threads are in use. Any requests received when the queue is full will be refused. The default value is 100.

    minSpareThreads:

    The minimum number of threads always kept running. If not specified, the default of 10 is used.

    我简单理解就是:

    maxThreads:Tomcat线程池最多能起的线程数;

    maxConnections:Tomcat最多能并发处理的请求(连接);

    acceptCount:Tomcat维护最大的对列数;

    minSpareThreads:Tomcat初始化的线程池大小或者说Tomcat线程池最少会有这么多线程。

    比较容易弄混的是maxThreads和maxConnections这两个参数:

    maxThreads是指Tomcat线程池做多能起的线程数,而maxConnections则是Tomcat一瞬间做多能够处理的并发连接数。比如maxThreads=1000,maxConnections=800,假设某一瞬间的并发时1000,那么最终Tomcat的线程数将会是800,即同时处理800个请求,剩余200进入队列“排队”,如果acceptCount=100,那么有100个请求会被拒掉。

    注意:根据前面所说,只是并发那一瞬间Tomcat会起800个线程处理请求,但是稳定后,某一瞬间可能只有很少的线程处于RUNNABLE状态,大部分线程是TIMED_WAITING,如果你的应用处理时间够快的话。所以真正决定Tomcat最大可能达到的线程数是maxConnections这个参数和并发数,当并发数超过这个参数则请求会排队,这时响应的快慢就看你的程序性能了。

    以上的结论都是我个人验证和总结,如有不对,跪求指正!!!

    ==========================更新(2015-1-20)===========================

    以上的得出结论有严重的问题,特此更正下,如果误导了某些同学十分抱歉。

    主要错误的结论是:

    Tomcat不会主动对线程池进行收缩,除非确定没有任何请求的时候,Tomcat才会将线程池收缩到minSpareThreads设置的大小;

    Tomcat6之前的版本有一个maxSpareThreads参数,但是在7中已经移除了,所以只要前面哪怕只有一个请求,Tomcat也不会释放多于空闲的线程。

    Tomcat会停止长时间闲置的线程。Tomcat还有一个参数叫maxIdleTime:

    (int) The number of milliseconds before an idle thread shutsdown, unless the number of active threads are less or equal to minSpareThreads. Default value is 60000(1 minute)

    其实从这个参数解释也能看出来Tomcat会停止闲置了超过一定时间的线程的,这个时间就是maxIdleTime。但我之前的测试中确实没有发现线程释放的现象,这是为什么呢?我发现除了这个参数线程池线程是否释放?释放多少?还跟当前Tomcat每秒处理的请求数(从Jmeter或LoadRunner来看可以理解为TPS)有关系。通过下表可以清晰的看出来线程数,TPS和maxIdleTime之间的关系:

    TPS

    maxIdleTime(ms)

    Thread Count

    10

    60,000

    600

    5

    60,000

    300

    1

    60,000

    60

    依次类推,当然Thread Count这一列是一个大约数,上下相差几个,但基本符合这样一个规则:

    Thread Count = min(max((TPS * maxIdleTime)/1000,minSpareThreads),maxThreads)

    当然这个Thread Count不会小于minSpareThreads,这个跟之前的结论还是一样的。我现在大胆猜测下(回头看源码验证下,或者哪位同学知道告诉我下,谢谢):

    Tomcat线程池每次从队列头部取线程去处理请求,请求完结束后再放到队列尾部,也就是说前后两次请求处理不会用同一个线程。某个线程闲置超过maxIdleTime就释放掉。

    假设首先线程池在高峰时期暴涨到1000,高峰过后Tomcat处理一次请求需要1s(从Jmeter看TPS大约就为1),那么在maxIdleTime默认的60s内会用到线程池中60个线程,那么最后理论上线程池会收缩到60(假设minSpareThreads大于60)。另外:这个跟用不用Keep-Alive没关系(之前测试结论是因为用了Keep-Alive导致程序性能下降,TPS降低了很多导致的)

    这就是为什么我之前的测试中、还有我们生产环境中线程数只增不减的原因,因为就算峰值过后我们的业务每秒请求次数仍然有100多,100*60=6000,也就是3000个线程每个线程在被回收之前肯定会被重用。

    那么现在有另外一个问题,那么正常情况下为什么每秒100次的请求不会导致线程数暴增呢?也就是说线程暴增到3000的瓶颈到底在哪?这个我上面的结论其实也不是很准确。

    真正决定Tomcat最大可能达到的线程数是maxConnections这个参数和并发数,当并发数超过这个参数则请求会排队,这时响应的快慢就看你的程序性能了。

    这里没说清楚的是并发的概念,不管什么并发肯定是有一个时间单位的(一般是1s),准确的来讲应该是当时Tomcat处理一个请求的时间内并发数,比如当时Tomcat处理某一个请求花费了1s,那么如果这1s过来的请求数达到了3000,那么Tomcat的线程数就会为3000,maxConnections只是Tomcat做的一个限制。

    欢迎斧正!

    补充:

    使用Jmeter可以很容易的控制请求的频率。

    展开全文
  • 查看线程信息标签:线程堆栈信息日志tomcat响应tomcat有时候会遇到所有操作都响应很慢,或者一直没有响应的情况。如果这个时候通过日志无法看到错误信息。可能就不好分析问题出处。这种情况可以看一下tomcat线程...

    查看线程信息

    标签: 线程 堆栈 信息 日志 tomcat 响应

    tomcat有时候会遇到所有操作都响应很慢,或者一直没有响应的情况。如果这个时候通过日志无法看到错误信息。可能就不好分析问题出处。

    这种情况可以看一下tomcat的线程信息,看看都是在进行什么操作。

    参考网址https://www.cnblogs.com/shengulong/p/8513652.html

    jstack 线程ID 可以查看某个线程的堆栈情况,特别对于hung挂死的线程,可以使用选项-F强制打印dump信息jstack -F pid

    jstack定义: jstack是java虚拟机自带的一种堆栈跟踪工具。用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。

    PS : 在实际运行中,往往一次 dump的信息,还不足以确认问题。建议产生三次 dump信息,如果每次 dump都指向同一个问题,我们才确定问题的典型性。也就是多进行几次线程快照,观察变化,查看问题所在。

    参考命令 jstack pid >run.log   然后把run.log文件用附件“查看线程日志”工具打开。

    主要观察几种状态

    死锁,Deadlock(重点关注)

    执行中,Runnable

    等待资源,Waiting on condition(重点关注)

    等待获取监视器,Waiting on monitor entry(重点关注)

    暂停,Suspended

    对象等待中,Object.wait() 或 TIMED_WAITING

    阻塞,Blocked(重点关注)

    停止,Parked

    然后查看每种状态定位到哪段代码信息。

    查看Deadlock

    1529489117EBAuH5J0_s.jpg

    查看monitors

    1529489232DAa0CkOq_s.jpg

    找到Threads最对的代码

    1529489288AxPUWeJ2_s.jpg

    日志文件中搜索一共出现多少次

    1529489320gTmxArjt_s.png

    展开全文
  • 我们的生产服务器(apache-tomcat-...在此问题期间,服务器变慢,在一分钟内它变得不响应,活动的Tomcat线程数激增至200(我们使用javamelody观察了这些情况).日志如下所示:2012-04-07 07:53:48,058 DEBUG Authenticatio...

    我们的生产服务器(apache-tomcat-7.0.6)遇到了这个问题,该服务器正在运行使用MySQL作为数据库的Spring-JPA-Hibernate应用程序.在此问题期间,服务器变慢,在一分钟内它变得不响应,活动的Tomcat线程数激增至200(我们使用javamelody观察了这些情况).

    日志如下所示:

    2012-04-07 07:53:48,058 DEBUG AuthenticationHandler:("http-bio-7006"-exec-304):35 - Authentication handler : ~

    2012-04-07 07:53:48,059 DEBUG AuthenticationHandler:("http-bio-7006"-exec-304):45 - Service Id : 1333765428059-/xxx-framework-service/platform/items/search/

    2012-04-07 07:53:48,060 DEBUG DefaultListableBeanFactory:("http-bio-7006"-exec-304):242 - Returning cached instance of singleton bean 'transactionManager'

    2012-04-07 07:53:48,060 DEBUG JpaTransactionManager:("http-bio-7006"-exec-304):365 - Creating new transaction with name [com.xxx.framework.manager.ItemManager.search]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT,readOnly; ''

    2012-04-07 07:53:48,060 DEBUG JpaTransactionManager:("http-bio-7006"-exec-304):323 - Opened new EntityManager [org.hibernate.ejb.EntityManagerImpl@6aee43a9] for JPA transaction

    2012-04-07 07:53:53,583 DEBUG AuthenticationHandler:("http-bio-7006"-exec-217):35 - Authentication handler : System~System

    2012-04-07 07:53:53,584 DEBUG AuthenticationHandler:("http-bio-7006"-exec-217):45 - Service Id : 1333765433584-/xxx-framework-service/platform/skus/get_sku_details

    2012-04-07 07:53:53,585 DEBUG DefaultListableBeanFactory:("http-bio-7006"-exec-217):242 - Returning cached instance of singleton bean 'transactionManager'

    2012-04-07 07:53:53,586 DEBUG JpaTransactionManager:("http-bio-7006"-exec-217):365 - Creating new transaction with name [com.xxx.framework.manager.SkuServiceManager.getSkuDetails]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; ''

    2012-04-07 07:53:53,586 DEBUG JpaTransactionManager:("http-bio-7006"-exec-217):323 - Opened new EntityManager [org.hibernate.ejb.EntityManagerImpl@7cb3b78] for JPA transaction

    2012-04-07 07:54:04,297 DEBUG AuthenticationHandler:("http-bio-7006"-exec-311):35 - Authentication handler : System~System

    2012-04-07 07:54:04,298 DEBUG AuthenticationHandler:("http-bio-7006"-exec-311):45 - Service Id : 1333765444298-/xxx-framework-service/platform/skus/get_sku_details

    2012-04-07 07:54:04,299 DEBUG DefaultListableBeanFactory:("http-bio-7006"-exec-311):242 - Returning cached instance of singleton bean 'transactionManager'

    2012-04-07 07:54:04,299 DEBUG JpaTransactionManager:("http-bio-7006"-exec-311):365 - Creating new transaction with name [com.xxx.framework.manager.SkuServiceManager.getSkuDetails]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; ''

    2012-04-07 07:54:04,299 DEBUG JpaTransactionManager:("http-bio-7006"-exec-311):323 - Opened new EntityManager [org.hibernate.ejb.EntityManagerImpl@d8c7ec2] for JPA transaction

    2012-04-07 07:54:05,713 DEBUG AuthenticationHandler:("http-bio-7006"-exec-252):35 - Authentication handler : System~System

    2012-04-07 07:54:05,714 DEBUG AuthenticationHandler:("http-bio-7006"-exec-252):45 - Service Id : 1333765445714-/xxx-framework-service/platform/skus/get_sku_details

    2012-04-07 07:54:05,715 DEBUG DefaultListableBeanFactory:("http-bio-7006"-exec-252):242 - Returning cached instance of singleton bean 'transactionManager'

    2012-04-07 07:54:05,715 DEBUG JpaTransactionManager:("http-bio-7006"-exec-252):365 - Creating new transaction with name [com.xxx.framework.manager.SkuServiceManager.getSkuDetails]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; ''

    2012-04-07 07:54:05,715 DEBUG JpaTransactionManager:("http-bio-7006"-exec-252):323 - Opened new EntityManager [org.hibernate.ejb.EntityManagerImpl@685eb738] for JPA transaction

    2012-04-07 07:54:16,293 DEBUG AuthenticationHandler:("http-bio-7006"-exec-282):35 - Authentication handler : System~System

    2012-04-07 07:54:16,294 DEBUG AuthenticationHandler:("http-bio-7006"-exec-282):45 - Service Id : 1333765456294-/xxx-framework-service/platform/skus/get_sku_details

    2012-04-07 07:54:16,295 DEBUG DefaultListableBeanFactory:("http-bio-7006"-exec-282):242 - Returning cached instance of singleton bean 'transactionManager'

    2012-04-07 07:54:16,295 DEBUG JpaTransactionManager:("http-bio-7006"-exec-282):365 - Creating new transaction with name [com.xxx.framework.manager.SkuServiceManager.getSkuDetails]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; ''

    2012-04-07 07:54:16,296 DEBUG JpaTransactionManager:("http-bio-7006"-exec-282):323 - Opened new EntityManager [org.hibernate.ejb.EntityManagerImpl@6d37b108] for JPA transaction

    2012-04-07 07:54:16,541 DEBUG AuthenticationHandler:("http-bio-7006"-exec-302):35 - Authentication handler : Heartbeat User~dummy_heartbeat

    2012-04-07 07:54:16,542 DEBUG AuthenticationHandler:("http-bio-7006"-exec-302):45 - Service Id : 1333765456542-/xxx-framework-service/platform/skus/5500

    2012-04-07 07:54:16,543 DEBUG DefaultListableBeanFactory:("http-bio-7006"-exec-302):242 - Returning cached instance of singleton bean 'transactionManager'

    2012-04-07 07:54:16,543 DEBUG JpaTransactionManager:("http-bio-7006"-exec-302):365 - Creating new transaction with name [com.xxx.framework.manager.SkuServiceManager.findById]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT,readOnly; ''

    2012-04-07 07:54:16,543 DEBUG JpaTransactionManager:("http-bio-7006"-exec-302):323 - Opened new EntityManager [org.hibernate.ejb.EntityManagerImpl@7a973a0f] for JPA transaction

    2012-04-07 07:54:19,708 DEBUG AuthenticationHandler:("http-bio-7006"-exec-236):35 - Authentication handler : System~System

    2012-04-07 07:54:19,709 DEBUG AuthenticationHandler:("http-bio-7006"-exec-236):45 - Service Id : 1333765459709-/xxx-framework-service/platform/skus/get_sku_details

    2012-04-07 07:54:19,710 DEBUG DefaultListableBeanFactory:("http-bio-7006"-exec-236):242 - Returning cached instance of singleton bean 'transactionManager'

    2012-04-07 07:54:19,710 DEBUG JpaTransactionManager:("http-bio-7006"-exec-236):365 - Creating new transaction with name [com.xxx.framework.manager.SkuServiceManager.getSkuDetails]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; ''

    2012-04-07 07:54:19,711 DEBUG JpaTransactionManager:("http-bio-7006"-exec-236):323 - Opened new EntityManager [org.hibernate.ejb.EntityManagerImpl@342f22a9] for JPA transaction

    2012-04-07 07:54:22,648 DEBUG AuthenticationHandler:("http-bio-7006"-exec-292):35 - Authentication handler : System~System

    2012-04-07 07:54:22,649 DEBUG AuthenticationHandler:("http-bio-7006"-exec-292):45 - Service Id : 1333765462649-/xxx-framework-service/platform/skus/get_avaliable_count

    2012-04-07 07:54:22,650 DEBUG DefaultListableBeanFactory:("http-bio-7006"-exec-292):242 - Returning cached instance of singleton bean 'transactionManager'

    2012-04-07 07:54:22,650 DEBUG JpaTransactionManager:("http-bio-7006"-exec-292):365 - Creating new transaction with name [com.xxx.framework.manager.SkuServiceManager.getAvaliableCountOpt]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; ''

    2012-04-07 07:54:22,650 DEBUG JpaTransactionManager:("http-bio-7006"-exec-292):323 - Opened new EntityManager [org.hibernate.ejb.EntityManagerImpl@5e5d2643] for JPA transaction

    2012-04-07 07:54:25,751 DEBUG AuthenticationHandler:("http-bio-7006"-exec-291):35 - Authentication handler : System~System

    2012-04-07 07:54:25,752 DEBUG AuthenticationHandler:("http-bio-7006"-exec-291):45 - Service Id : 1333765465752-/xxx-framework-service/platform/skus/get_sku_details

    2012-04-07 07:54:25,753 DEBUG DefaultListableBeanFactory:("http-bio-7006"-exec-291):242 - Returning cached instance of singleton bean 'transactionManager'

    2012-04-07 07:54:25,753 DEBUG JpaTransactionManager:("http-bio-7006"-exec-291):365 - Creating new transaction with name [com.xxx.framework.manager.SkuServiceManager.getSkuDetails]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; ''

    2012-04-07 07:54:25,754 DEBUG JpaTransactionManager:("http-bio-7006"-exec-291):323 - Opened new EntityManager [org.hibernate.ejb.EntityManagerImpl@28c7c70b] for JPA transaction

    2012-04-07 07:54:30,811 DEBUG AuthenticationHandler:("http-bio-7006"-exec-234):35 - Authentication handler : System~System

    2012-04-07 07:54:30,812 DEBUG AuthenticationHandler:("http-bio-7006"-exec-234):45 - Service Id : 1333765470812-/xxx-framework-service/platform/skus/get_avaliable_count

    2012-04-07 07:54:30,813 DEBUG DefaultListableBeanFactory:("http-bio-7006"-exec-234):242 - Returning cached instance of singleton bean 'transactionManager'

    2012-04-07 07:54:30,814 DEBUG JpaTransactionManager:("http-bio-7006"-exec-234):365 - Creating new transaction with name [com.xxx.framework.manager.SkuServiceManager.getAvaliableCountOpt]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; ''

    2012-04-07 07:54:30,814 DEBUG JpaTransactionManager:("http-bio-7006"-exec-234):323 - Opened new EntityManager [org.hibernate.ejb.EntityManagerImpl@140768d6] for JPA transaction

    2012-04-07 07:54:33,790 DEBUG AuthenticationHandler:("http-bio-7006"-exec-301):35 - Authentication handler : System~System

    2012-04-07 07:54:33,790 DEBUG AuthenticationHandler:("http-bio-7006"-exec-301):45 - Service Id : 1333765473790-/xxx-framework-service/platform/skus/get_sku_details

    2012-04-07 07:54:33,792 DEBUG DefaultListableBeanFactory:("http-bio-7006"-exec-301):242 - Returning cached instance of singleton bean 'transactionManager'

    直到服务器达到200个线程(需要1-2分钟)并且没有响应之前,这种事务的创建一直持续进行.在此期间,我检查了MySQL连接,其数量远小于最大连接限制.

    我们也进行了线程转储,但是我不确定到底是什么指向这种堆积或线程.

    我们欢迎任何进一步调试此问题的想法.

    展开全文
  • 编辑server.xml文件,找到Connector文段进行修改,每行的...普通配置如下(可以按自己的实际情况来配置):最大线程数maxThreads配 1000,最低minSpareThreads配100,最大连接数maxConnections配500,acceptCount配250
  • 首先看看springboot内置的tomcat,该如何配置这两个参数# 在配置文件中添加如下内容# tomcat最大线程数,默认为200server.tomcat.max-threads=200# tomcat最大连接数,默认为10000(网上的说法)server.tomcat.max-...
  • tomcat设置线程

    2020-12-24 10:53:15
    查看Tomcat线程数 修改server.xml文件,增加maxThreads、minSpareThreads、maxSpareThreads、acceptCount vi /tomcat/conf/server.xml 增加 maxThreads="150" minSpareThreads="25" maxSpareThreads="100" ...
  • tomcat在关闭时,有时会看到类似下面的警告信息:2014-7-10 13:44:02 org.apache.catalina.loader.WebappClassLoader clearReferencesThreadsSEVERE: The web application [] appears to have started a thread ...
  • 这包括活动线程和空闲线程。 如果未指定,则使用默认值10。 maxConnections: 服务器在任何给定时间将接受处理的最大连接数。 对于BIO,除非使用执行程序,否则默认值为maxThreads的值,在这种情况下,默认值为...
  • Tomcat管理器报告的线程数与... Tomcat线程和JVM线程之间有区别吗?来自Tomcat Manager的行:最大线程数:200当前线程数:7当前线程忙:3ManagementFactory.getThreadMXBean()。getThreadCount():38参考方案Tomca...
  • Tomcat中Poller线程run方法工作流程1. Poller线程什么时候启动?2. Poller.run()方法调用链源码跟踪2.1 NioEndpoint$Poller.run()2.2.12.2 NioEndpoint$Poller.processKey()2.3 AbstractEndpoint.processSocket() 1....
  • 1、看看tomcat进程pidps -ef|grep tomcatroot 14635 1 2 12:34 pts/0 00:01:21 /usr/bin/java -Djava.util.logging.config.file=获的到pid为146352、查看当前线程个数[root@localhost ~]# ps -Lf 14635|wc -l353、...
  • tomcat的多线程机制

    2021-10-22 00:11:46
    tomcat的多线程机制 1.tomcat首先启动项目,主线程main会将对象加入ioc容器中,这些都是共享变量 2.每次请求过来,tomcat会开启新的线程然后调用servlet的方法,是多线程的 3.这些main中的共享变量,就可能导致...
  • 查看线程信息标签:线程堆栈信息日志tomcat响应tomcat有时候会遇到所有操作都响应很慢,或者一直没有响应的情况。如果这个时候通过日志无法看到错误信息。可能就不好分析问题出处。这种情况可以看一下tomcat线程...
  • tomcat最大线程数,单台tomcat最大并发量,tomcat最大线程数的设置Connectorport="8080"maxThreads="150"minSpareThreads="25"maxSpareThreads="75"enableLookups="false"redirectPort="8443"acceptCount="100"debug=...
  • 1G硬盘 SCSI 140 G 分区情况 /boot(500M) /SWAP (2048M) /(剩余全部磁盘空间)服务器是新的HP全新配置服务器的WEB配置情况:红旗LINUX5.0服务亚洲版+TOMCAT5.5.17+MYSQL5.0.22+JDK1.5.0.6TOMCAT和 MYSQL以及JD的安...
  • 一、前言Tomcat 作为 Java Web 程序比较常用的 Servlet ...在 Tomcat7 及以下 Linux 中默认启用的是 BIO 模式,Tomcat8 及以上使用的是 NIO 模式,利用 Java 的异步 IO 处理,可以通过少量的线程处理大量的连接请求...
  • Tomcat每到凌晨会有一个高峰,峰值的并发达到了3000以上,最后的结果是Tomcat线程池满了,日志看很多请求超过了1s。 服务器性能很好,Tomcat版本是7.0.54,配置如下: <Executor name="tomcatThreadPool" name...
  • Tomcat中Acceptor线程run方法工作流程1.Acceptor线程启动时间点2.Acceptor.run()方法调用链源码跟踪1). Acceptor.run()2). NioEndpoint.setSocketOptions(SocketChannel socket)NioEndpoint$Poller.register(final ...
  • tomcat配置文件server.xml的配置中,连接数相关的参数有: minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为10 maxProcessors:最大连接线程数,即:并发处理的最大请求数,默认值为75 ...
  • tomcat如何利用多线程实现同时处理多个请求-简化版说明以下内容以《how tomcat works》第四章为原型整体流程,交互过程以及源码可参考[https://blog.csdn.net/qq_29025955/article/details/120196616]...
  • tomcat关闭后线程依然运行解决办法,设置线程为守护线程守护线程与非守护线程最近在看多线程的Timer章节,发现运用到了守护线程,感觉Java的基础知识还是需要补充。Java分为两种线程:用户线程和守护线程所谓守护...
  • 调整Tomcat的并发线程数到5000+1. 调整server.xml的配置先调整maxThreads的数值,在未调整任何参数之前,默认的并发线程可以达到40。调整此项后可以达到1800左右。maxThreads="32000"/>再试试使用非阻塞的库。...
  • 匿名用户1级2017-07-18 回答展开全部tomcat最大线程数的设置Tomcat的server.xml中连接器设置如下maxThreads="150" minSpareThreads="25" maxSpareThreads="75"enableLookups="false" redirectPort="8443" ...
  • 正常情况下,会优先采用catalina.sh stop来停止Tomcat实例,这样可以让服务有机会处理完请求,并做好善后工作。 但如果通过catalina.sh stop命令无法关闭Tomcat实例,则只能kill -9了。为什么在给Tomcat发出stop命令...
  • 我通过创建固定数量的线程来执行HTTP GET数据检索来使用执行程序服务.executorService = ExecutorServiceFactory.getInstance().getExecutorService(Config.getInstance().getNumberOfThreads(), "ThreadExecutor_"+...
  • 本文前半部分结论存在严重错误,请看最后2015-1-20更新部分。...服务器性能很好,Tomcat版本是7.0.54,配置如下:事后thread dump看其实真正处于RUNNABLE状态的线程很少,绝大部分线程都处于TIMED_WAITIN...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 143,601
精华内容 57,440
关键字:

tomcat工作线程和业务线程

友情链接: Reflector6.zip