精华内容
下载资源
问答
  • Java原生线程池的缺点适用场景 缺点: 1)容易堆积任务,当线程数量大于等于核心线程数量后,就把任务丢到队列,而不是创建空闲线程执行任务,如果队列是无界,可能会造成任务堆积从而发生OOM 适用场景: 1)适

    Java原生线程池的执行流程:
    1)当前线程数量是否小于核心线程数,如果是创建核心线程执行任务,否则2;
    2)尝试通过offer方法不阻塞地把任务丢到阻塞队列,如果成功就返回,否则3;
    3)判断当前线程数量是否小于最大线程数量,如果是创建空闲线程执行任务,否则4;
    4)执行拒绝策略,默认是抛出异常;

    Java原生线程池的缺点与适用场景
    缺点:
    1)容易堆积任务,当线程数量大于等于核心线程数量后,就把任务丢到队列,而不是创建空闲线程执行任务,如果队列是无界,可能会造成任务堆积从而发生OOM
    适用场景:
    1)适合cpu密集型任务,而且任务时间不宜过长,否则会造成队列里面任务的堆积;

    Tomcat线程池
    像Tomcat这样的Web服务器任务一般都是io密集型任务,那么Java原生的线程池就不适合了。Tomcat线程池继承了Java原生的ThreadPoolExecutor,并且自定义任务队列,自定义任务队列实现LinkedBlockingQueue。

    Tomcat线程池执行流程

    public void execute(Runnable command, long timeout, TimeUnit unit) {
            this.submittedCount.incrementAndGet();
    
            try {
                super.execute(command);
            } catch (RejectedExecutionException var9) {
                if (!(super.getQueue() instanceof TaskQueue)) {
                    this.submittedCount.decrementAndGet();
                    throw var9;
                }
    
                TaskQueue queue = (TaskQueue)super.getQueue();
    
                try {
                    if (!queue.force(command, timeout, unit)) {
                        this.submittedCount.decrementAndGet();
                        throw new RejectedExecutionException(sm.getString("threadPoolExecutor.queueFull"));
                    }
                } catch (InterruptedException var8) {
                    this.submittedCount.decrementAndGet();
                    throw new RejectedExecutionException(var8);
                }
            }
    
        }
    

    1)直接调用父类方法;
    2)抛出拒绝异常后,再尝试把任务放到队列;

    父类方法的流程也就是Java原生线程池的执行流程,那Tomcat是怎么设计的呢?核心在于Tomcat自己定义的任务队列。

    TaskQueue#offer(Runnable o)方法

     public boolean offer(Runnable o) {
            if (this.parent == null) {
                return super.offer(o);
            } else if (this.parent.getPoolSize() == this.parent.getMaximumPoolSize()) {
                return super.offer(o);
            } else if (this.parent.getSubmittedCount() <= this.parent.getPoolSize()) {
                return super.offer(o);
            } else {
                return this.parent.getPoolSize() < this.parent.getMaximumPoolSize() ? false : super.offer(o);
            }
        }
    

    1)判断当前是否要创建空闲线程执行任务,而不是一股脑地全放在队列,因为LinkedBlockingQueue默认是无界的,但也可以设计最大数量;
    2)这样设计的好处是使队列无界的情况下,可以创建空闲线程;

    展开全文
  • 查看线程信息标签:线程堆栈信息日志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

    展开全文
  • Tomcat管理器报告的线程数... Tomcat线程和JVM线程之间有区别吗?来自Tomcat Manager的行:最大线程数:200当前线程数:7当前线程忙:3ManagementFactory.getThreadMXBean()。getThreadCount():38参考方案Tomca...

    Tomcat管理器报告的线程数与ThreadMXBean不同。 ThreadMXBean报告的线程数也与YourKit分析器中报告的线程数相同。 Tomcat线程和JVM线程之间有区别吗?

    来自Tomcat Manager的行:

    最大线程数:200当前线程数:7当前线程忙:3

    ManagementFactory.getThreadMXBean()。getThreadCount():

    38

    参考方案

    Tomcat线程是请求处理线程,并且不计算应用程序可能已启动的其他线程。

    为了更好地了解其他线程是什么,请查看 Thread.getAllStackTraces() 。

    Java:正则表达式模式匹配器是否有大小限制? - java

    我的模式类似于OR:“word1 | word2 | word3”我大约有800个字。可能有问题吗? 参考方案 您仅受记忆和理智的限制。 :)Java:线程池如何将线程映射到可运行对象 - java

    试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …Java:我可以在Hashmaps中使用数组吗? - java

    我可以在Hashmaps中使用数组吗?如果是这样,则声明这种哈希图的确切语法是什么?谢谢 参考方案 数组也是对象。甚至像int[]这样的原始数组。Map map = new HashMap();JAVA:字节码和二进制有什么区别? - java

    java字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…java:继承 - java

    有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…

    展开全文
  • 查看线程信息标签:线程堆栈信息日志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

    展开全文
  • Tomcat当前线程

    2021-03-14 21:44:38
    当前线程由apache动态管理。frompache的源代码中的worker.c: 根据需要启动线程。以下是启动工作线程的主要流程。static int worker_run(apr_pool_t *_pconf, apr_pool_t *plog, server_rec *s)startup_children...
  • 我们的生产服务器(apache-tomcat-...在此问题期间,服务器变慢,在一分钟内它变得不响应,活动的Tomcat线程数激增至200(我们使用javamelody观察了这些情况).日志如下所示:2012-04-07 07:53:48,058 DEBUG Authenticatio...
  • 2.1 AMQP 2.2 MQTT 2.3 STOMP 2.4 XMPP 2.5 JMS Part 3RabbitMQ 具体介绍RabbitMQ的特点、主要概念和Java使用示例,接着通过使用RabbitMQ实现异步处理和消息推送的功能,最后给出在工作中使用RabbitMQ时的一些实践...
  • 正常情况下,会优先采用catalina.sh stop来停止Tomcat实例,这样可以让服务有机会处理完请求,并做好善后工作。 但如果通过catalina.sh stop命令无法关闭Tomcat实例,则只能kill -9了。为什么在给Tomcat发出stop命令...
  • 我通过创建固定数量的线程来执行HTTP GET数据检索来使用执行程序服务.executorService = ExecutorServiceFactory.getInstance().getExecutorService(Config.getInstance().getNumberOfThreads(), "ThreadExecutor_"+...
  • 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、...
  • 首先看看springboot内置的tomcat,该如何配置这两个参数# 在配置文件中添加如下内容# tomcat最大线程数,默认为200server.tomcat.max-threads=200# tomcat最大连接数,默认为10000(网上的说法)server.tomcat.max-...
  • 说明:一般线程与虚拟内存JVM设置同步设置,两者存在对应关系。 1.线程概念说明 maxThreads:此连接器将创建的请求处理线程的最大数量, 即可以处理的同时请求的最大数量,默认值为200。 minSpareThreads:终保持...
  • 最近在项目里面引入了ThreadLocal,其实我对这个东西不太熟悉,只是看到在上家公司的项目里面用到了,然后我百度了一下,说是可以将一些数据缓存到线程中,然后先从线程中拿,没有再到redis中或者mysql中拿,可以...
  • 一、前言Tomcat 作为 Java Web 程序比较常用的 Servlet ...在 Tomcat7 及以下 Linux 中默认启用的是 BIO 模式,Tomcat8 及以上使用的是 NIO 模式,利用 Java 的异步 IO 处理,可以通过少量的线程处理大量的连接请求...
  • 每个请求都以不同的线程处理。这不是每个用户的“线程”。请求是客户机(Web浏览器)和服务器之间的任何交互。所以,在你的浏览器中输入一个Url,调用ajax请求,每一个都在一个单独的线程中处理。用户在“登录”期间...
  • 查看服务器(TomcatJAVA应用)中的连接数和线程数查看服务器的状态,大致分为两种方案:(1)使用现成的工具,(2)直接使用Linux的命令查看。现成的工具,如JDK自带的jconsole工具可以方便的查看线程信息(此外还可以...
  • 最近我们的一个生产tomcat服务器没有响应,因为tomcat的繁忙线程高达200.当我们在重新启动之前进行线程转储时,我们在TIMED_WAITING状态下获得了100个线程,就像这3个线程一样:"...
  • tomcat关闭后线程依然运行解决办法,设置线程为守护线程守护线程与非守护线程最近在看多线程的Timer章节,发现运用到了守护线程,感觉Java的基础知识还是需要补充。Java分为两种线程:用户线程和守护线程所谓守护...
  • Java如何获取当前线程

    2021-03-08 20:14:13
    前言Java 中经常会遇到要获取当前线程的情况,这时一般我们就会通过Thread.currentThread()来获取,接下去就看看执行该语句在 JVM 中做了什么吧。简单例子以下是一个简单的例子,获取当前线程并打印线程名称,输出是...
  • 继上一次发现的线程安全问题后,这次来看看如何解决这个问题。 2. 使用ThreadLocal 代码: package thread; import java.util.ArrayList; import java.util.List; public class ThreadSecurity { private static ...
  • tomcat的多线程机制

    2021-10-22 00:11:46
    tomcat的多线程机制 1.tomcat首先启动项目,主线程main会将对象加入ioc容器中,这些都是共享变量 2.每次请求过来,tomcat会开启新的线程然后调用servlet的方法,是多线程的 3.这些main中的共享变量,就可能导致...
  • tomcat 线程池调优

    2021-03-13 13:14:50
    基本常见的几种调优方式:线程,内存,使用Apache+JK+Tomcat配置(负载均衡)等第一:不使用tomcat线程池connectionTimeout="20000"redirectPort="8443"maxThreads="800" acceptCount="1000"/>1:最大连接数:...
  • 但是一个明媚的上午,系统再次卡死,客户心态爆炸,领导严令立即远程排查mysql数据库、tomcat中间件是否进行过优化。屋漏偏逢连雨天啊,那天我起晚了,9点多了 还没到公司…… 一路飞奔到公司。 mysql数据库的优化是...
  • Tomcat每到凌晨会有一个高峰,峰值的并发达到了3000以上,最后的结果是Tomcat线程池满了,日志看很多请求超过了1s。 服务器性能很好,Tomcat版本是7.0.54,配置如下: <Executor name="tomcatThreadPool" name...
  • 我们服务器的配置情况如下P4 3.6内存 1G硬盘 SCSI 140 G 分区情况 /boot(500M) /SWAP (2048M) /(剩余全部磁盘空间)服务器是新的HP全新配置服务器的WEB配置情况:红旗LINUX5.0服务亚洲版+TOMCAT5.5.17+MYSQL5.0.22+...
  • 在给出错误tomcat退出(关闭)之后,我的tomcat中的一个我的应用程序被部署的连续内存错误.我拿了日志文件,发现了这个SEVERE: Error allocating socket processorjava.lang.OutOfMemoryError: unable to create new ...
  • 摘要: JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有...现实企业级Java开发中,有时候我们会碰到下面这些问题:OutOfMemoryError,内存不足内存泄露线程死锁锁争用(Lock C...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 124,973
精华内容 49,989
关键字:

tomcat线程与java线程关系

java 订阅