`
wuhaidong
  • 浏览: 360420 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

JavaEE线程池调整优化

阅读更多

线程池:

 

当Web应用服务器接受到一个请求后,它将请求放置到请求队列,让执行线程来处理,这就是Web应用服务器的主要入口途径.在对内存进行调优后,对应用影响较大的调优选项就是执行线程池的尺寸配置.线程池的大小控制着并发处理请求的能力.如果线程池太小,请求将在队列中等待较长时间;如果池的尺寸太大,CPU就会在不同线程的上下文切换上花费过多的时间.

 

每个服务器都有监听的socket.接受到请求后,请求被放置到执行队列中,然后请求被一个执行线程从执行队列中移出并执行.下面显示了服务器中组成请求处理架构的组件

 

 

 

 

线程池过小:

 

当用户数上升应用性能降低或吞吐量下降时,首先检查线程池.应该明确查看以下信息:

线程池利用率

请求等待数量(队列深度)

 

 

如果线程池的利用率达到100%,并且有请求处于等待状态,这时的响应时间就会明显降低.此时,CPU的利用率可能也不高,因为应用服务器没有足够多的工作让CPU持续繁忙.此时应该逐步扩大线程池,监控应用的吞吐量直至响应时间降低。在整个过程中需要保持持续的负荷确保对性能评估的准确性。当观察到吞吐量非常稳定后,就可逐步降低线程池的大小,直至应用刚好能够输出最大吞吐量的尺寸。

 

 

下图显示线程池大小的情况:

 

 

 

java的调优文档中很少建议确切的线程池大小的值。因为该值关系到应用的具体情况,比如简单和复杂类型的应用就不能为一谈.

 

一个应用从内存中检索字符串并转发到jsp页面做展观

另一应用,从数据库中检索1000条记录,并计算平均值,方差.

 

 

第一个应用系统的响应速度较快,例如在0.25秒左右,也不需要耗费大多CPU的时间。第二个应用的响应时间大概在3秒左右,且对CPU敏感(即需要很多CPU的计算能力).因此,在配置线程池时,给第一个应用配置100个线程就可能太低了,因为它能同时处理起码200个以上的并发请求;但100对第二个应用来说可能就太高了,因为CPU可能最大曾受50个并发线程.但是,显示中大部分应用都是相似性很高的,所有可以考虑每个CPU配置50-75个线程。对于不同的应用,这个数字的适应性也不同,可根据对CPU检测的结果来做相应的调整.

 

 

线程池太大:

 

除了可能将线程池配置得太小外,也有可能线程配置得太多了。在这种情况下,当系统负载增加时,CPU利用率持续保持很高,相应时间很长,因为CPU在不同的线程上下文之间切换工作上花费了太多的时间,而在执行工作方面的时间却显得很有限了。

 

 

线程池太大的一个重要表现就是CPU利用率持续走高.很多情况下,CPU的利用率与垃圾收集有关,但垃圾收集造成的CPU利用率高与线程池过大造成的有一个重要的区别在于:垃圾收集造成CPU的徒升徒降,而线程池的过饱和状态则会造成CPU的持续偏高。

 

 

当这种情况发生时,减少线程池大小可能导致请求的等待,但是等待比在CPU饱和状态下的处理要好,因为饱和状态的CPU会表现出极差的性能,最好的情况是请求到来了,就在队列中等待一段时间,然后再利用较优化情况的处理CPU进行处理.

 

 

解决线程池过大的问题,就需要降低线程池的大小直至在通常的负荷状态下,CPU的利用率在75%~85%之间.如果队列的大小不易于管理

则可以:

 

调整代码

 

添加新硬件

 

分享到:
评论

相关推荐

    影响JavaEE性能的十大问题.docx

    在JavaEE应用开发中,性能优化是一个至关重要的环节,...综上所述,优化JavaEE性能需要全面考虑各个层面,包括系统设计、资源配置、代码质量、数据库管理和外部系统交互等,通过持续监控和调整,确保系统高效稳定运行。

    JavaEE:修改

    9. **容器配置**:如Tomcat、WildFly等JavaEE应用服务器的配置文件也需要根据应用修改进行调整,如设置部署路径、调整线程池大小、优化内存配置等。 10. **测试**:修改后必须进行详尽的单元测试、集成测试和系统...

    weblogic调优

    3. **线程池大小**:根据并发请求量调整线程池的大小,既不能过大导致系统资源浪费,也不能过小影响处理能力。 4. **其他配置**:如启用/禁用编译器、设置栈大小等。 #### 四、WLS的核心参数调整 除了JVM层面的...

    JAVAEE利用XFIRE创建WEBSERVICE实例

    考虑到性能,可以调整Xfire的配置以减少内存占用、优化线程池或启用缓存。同时,合理设计数据库查询以减少不必要的数据传输。 总之,通过这个实例,我们可以学习到如何利用Xfire在Java EE环境中快速构建和部署Web...

    Java ee性能调优.rar

    - **合理设置线程池大小**:根据服务器CPU核心数和任务类型设置线程池大小。 - **拒绝策略**:配置适当的拒绝策略,如AbortPolicy、DiscardPolicy或CallerRunsPolicy,应对任务提交过多的情况。 7. **Web容器调优...

    Apache Geronimo Config.zip

    对于开发者来说,了解Geronimo的配置至关重要,因为它可以帮助他们更好地理解和控制应用服务器的行为,比如调整性能、优化资源分配、管理安全性和监控系统状态。 在JavaEE环境中,配置通常涉及到以下方面: 1. **...

    2008JAVA工程师高级培训教程6

    包括synchronized关键字、wait()和notify()方法、ThreadLocal、线程池(ExecutorService)等概念。 3. **图形界面开发**:Java提供了丰富的图形用户界面(GUI)组件库,如Swing和JavaFX。这部分可能会介绍如何构建...

    JBoss in Action

    8. **性能调优**:提供关于内存管理、线程池和连接池等方面的优化建议。 9. **故障排查与日志**:讲解如何利用JBoss的日志系统进行问题诊断,以及常见的错误处理方法。 通过阅读《JBoss in Action》,读者将能够...

    Mirror of Apache Tomcat 5.5.x.zip

    8. **性能优化**: 包括调整JVM参数、设置线程池大小、启用压缩、缓存管理等都是提升Tomcat性能的重要手段。 9. **日志和监控**: Tomcat提供日志功能,通过`logging.properties`配置日志级别和输出。同时,可以使用...

    SpringBoot应用部署到中创AS

    可能需要调整AS的服务器配置以适应SpringBoot应用,如内存分配、线程池大小等。 在部署过程中,可能还会遇到其他适配问题,例如日志框架的冲突、数据库连接池的配置、安全策略的调整等。这些问题需要根据具体情况...

    2008JAVA工程师高级培训教程3

    虚拟机(VM)参数调整是Java性能优化的重要环节。通过调整JVM内存设置(如-Xms, -Xmx, -XX:MaxPermSize等)、垃圾收集策略(如Parallel GC, CMS, G1等)和编译优化选项,可以显著提升应用程序的运行效率。 至于IO...

    Apache Tomcat Training Material.zip

    通过调整线程池大小、设置连接超时、启用压缩、缓存管理和调整JVM参数等,可以优化Tomcat的性能。 八、集群与负载均衡 对于高可用性和可扩展性,Tomcat支持集群配置,通过负载均衡器分发请求到多个实例,实现故障...

    2008JAVA工程师高级培训教程7

    6. **虚拟机(VM)参数**:理解和调整JVM参数对于优化应用程序性能至关重要。这部分可能包含内存配置(如堆大小、栈大小)、垃圾收集策略、类加载和编译器选项等。 7. **输入/输出(IO)**:虽然描述中提到IO讲得较...

    实习或秋招校招-思维导图总结

    - 线程池:认识ExecutorService和ThreadPoolExecutor,合理使用线程池优化资源。 7. **集合.xmind** - 集合框架:包括List、Set、Map接口及其实现类,如ArrayList、LinkedList、HashSet、HashMap等。 - 泛型:...

    J2EE程序设计考试复习资料

    性能优化是J2EE应用开发的关键环节,包括JVM参数调整、内存管理、线程池配置、数据库连接池优化等。 综上所述,"J2EE考试复习试题"文档应涵盖这些关键知识点,通过做题和解答,考生可以全面检查自己的学习情况,...

    Java.Web应用开发.J2EE和Tomcat第2版

    4. 性能优化:如调整线程池大小、开启GZIP压缩、启用连接器优化等。 四、J2EE与Tomcat整合 1. JDBC数据源配置:在Tomcat的context.xml中配置JNDI数据源,供EJB和JSP/Servlet使用。 2. J2EE安全:角色、认证和授权...

    2008JAVA工程师高级培训教程4

    学习内容可能涉及线程的创建与启动(Thread类和Runnable接口)、线程同步(synchronized关键字、wait/notify机制、Lock接口)、线程池(ExecutorService)、死锁预防以及并发工具类如Semaphore和CyclicBarrier。...

    tomcat 服务器 tomcat 服务器

    Tomcat的性能可以通过调整配置参数、使用NIO(非阻塞I/O)连接器、启用压缩、限制并发连接数等方式进行优化。 6. **安全与管理** Tomcat提供了安全管理机制,如用户认证、角色授权和访问控制。管理员可以通过管理...

    my_Tomcat_7042:学习tomcat_7042源码时候的工程

    性能优化包括调整线程池大小、开启压缩、减少连接超时等。 9. **Tomcat扩展性**:通过编写Valve(阀门)组件,开发者可以自定义请求处理流程,实现特定的功能或过滤。 通过深入学习Tomcat源码,开发者不仅可以了解...

    apache-tomcat-7.0.73.tar.gz

    8. **性能优化**: 可以通过调整JVM参数(如内存大小、垃圾收集策略等)来优化Tomcat的性能。这些参数通常在`$CATALINA_HOME/bin/catalina.sh`或`catalina.bat`脚本中设置。 9. **监控与故障排查**: 使用`jmxproxy`...

Global site tag (gtag.js) - Google Analytics