在实际使用apache+mod_jk+tomcat(jboss) 架构的过程中,时常碰到对各处连接池数设置含义不清楚,设置错误,导致故障。本文集中讲述连接池相关内容:
一、apache
在 apache 2.0 中,引入了影响性能的最核心模块:MPM(multi‐processing‐modules), MPM包含多种工作模式,MPM={beos|worker|prefork|mpmt_os2| perchild|leader|threadpool} 。最常使用的 worker 模型为例。它支持多线程和多进程混合工作。
在httpd.conf中时常有如下配置:
<IfModule worker.c> ServerLimit 3000 ThreadLimit 128 MaxClients 2048 StartServers 7 ThreadsPerChild 128 MinSpareThreads 75 MaxSpareThreads 250 MaxRequestsPerChild 10000 </IfModule>
指令说明:
- ServerLimit:服务器允许配置的进程数上限。
- ThreadLimit:每个子进程可配置的线程数上限。
- MaxClients:客户端最大请求数量(最大线程数)。
- StartServers:服务器启动时建立的子进程数量。
- ThreadsPerChild:每个子进程建立的线程数。
- MinSpareThreads:最小空闲线程数,默认值是"75"。
- MaxSpareThreads:设置最大空闲线程数。默认值是"250"。
- MaxRequestsPerChild:设置每个子进程在其生存期内允许伺服的最大请求数量。到MaxRequestsPerChild的限制后,子进程将会结束。
配置原则:
- ServerLimit:
- 只有当MaxClients和ThreadsPerChild > 16 (默认值16) ,需要配置该值。
- Apache在编译时内部有一个硬限制"ServerLimit 20000"(对于preforkMPM为"ServerLimit 200000")。你不能超越这个限制
- ServerLimit<=MaxClients 并且MaxClients<=ThreadsPerChild.
- restart方式重启动将不会生效
- ThreadLimit:
- 该指令的值应当和ThreadsPerChild可能达到的最大值保持一致。(如果将ThreadLimit设置成一个高出ThreadsPerChild实际需要很多的值,将会有过多的共享内存被分配)
- 对于mpm_winnt,ThreadLimit的默认值是1920;对于其他MPM这个值是64。
- Apache在编译时内部有一个硬性的限制"ThreadLimit 20000"(对于mpm_winnt是"ThreadLimit 15000"),你不能超越这个限制。
- restart方式重启动将不会生效。
- MaxClients:
- 默认值 是"400",16 (ServerLimit)乘以25(ThreadsPerChild)的结果
- 增加MaxClients的时候,必须同时增加 ServerLimit或则ThreadsPerChild的值
- MaxClients <= ServerLimit * ThreadsPerChild,并且MaxClients必须是ThreadsPerChild的倍数
- StartServers:
worker默认值是"3"
- StartServers<ServerLimit
- ThreadsPerChild:
- 对于mpm_winnt,ThreadsPerChild的默认值是64;对于其他MPM是25。
- ThreadLimit >= ThreadsPerChild
- MaxClients <= ServerLimit * ThreadsPerChild,
- MinSpareThreads:
- 这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数太少,子进程将产生新的空闲线程。
- MinSpareThreads<ThreadsPerChild.
- MaxSpareThreads:
- 这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数太多,子进程将杀死多余的空闲线程
- MaxSpareThreads>=MinSpareThreads+ThreadsPerChild.
- MaxRequestsPerChild:
- 如果MaxRequestsPerChild为"0",子进程将永远不会结束
- 将MaxRequestsPerChild设置成非零值有两个好处:可以防止(偶然的)内存泄漏无限进行而耗尽内存;
给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。
二、 Mod_Jk
worker.localnode.connection_pool_size=128 worker.localnode.connection_pool_minsize=25 worker.localnode.connection_pool_timeout=600
它实际上是创建了一个连接到 AJP 后端的连接池。通常情况下,这个值和 apache 连接池的
ThreadsPerChild 一致就可以了。如果这个值不设置,JK 将自动读取配置,设置为和ThreadsPerChild 一致。
当大并发量存在时,即便Apache的JK组件与tomcat保持足够多数量的连接,也不能有效避免HTTP 503错误,因为在大量的请求被转发到tomcat时,tomcat无法相应那么多请求,于是抛出了503。需要在Connector的地方配置maxThreads参数,将最大线程数调大。
三、TOMCAT
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" maxThreads="1000" URIEncoding="UTF-8" /> <Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="99" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8" />说明:
相关推荐
8. **性能优化**:根据系统负载和需求,可以进一步调整mod_jk和应用服务器的设置,如连接池大小、超时时间等,以优化性能和稳定性。 9. **安全性考虑**:集成后,务必关注安全问题。确保AJP连接是加密的,避免中间...
根据性能需求,可能需要调整mod_jk和JBoss的配置参数,例如连接池大小、超时设置等。 通过以上步骤,Apache和JBoss将协同工作,Apache处理静态资源,而动态内容和服务调用将由JBoss处理。这种集成方案提供了良好的...
下面将详细解释如何配置和使用Apache Tomcat以及相关的开发知识。 1. **安装与配置Apache Tomcat** - 首先,下载对应版本的Apache Tomcat,例如这里给出的是5.5.26版本。解压缩到本地文件夹,通常选择一个不会频繁...
- 修改`conf/server.xml`配置文件,可以设置端口号、连接池、虚拟主机等参数。 3. **启动与管理**: - 使用`bin/startup.sh`脚本启动Tomcat服务,`bin/shutdown.sh`则用于停止服务。 - 通过`bin/catalina.sh`...
- Tomcat作为一个轻量级应用服务器,相比完整的Java EE应用服务器(如JBoss、WebLogic),它的体积小、启动快速、易于配置和管理。 2. **版本8.5.x**: - Tomcat 8.5.x系列是在Java Servlet 3.1和JSP 2.3规范下...
另外,还可以使用连接池来管理数据库连接,减少资源消耗。 9. **故障排查**: 当遇到问题时,查看`logs/catalina.out`和其他日志文件可以帮助诊断错误。Tomcat还提供了详细的错误页面和堆栈跟踪信息,帮助开发者定位...
通过mod_jk或mod_proxy模块,实现Apache和Tomcat之间的负载均衡和反向代理。 5.2 与JBoss、WebLogic等应用服务器比较 Tomcat轻量级、易于部署,而JBoss、WebLogic等提供更完整的Java EE服务,适合大型企业级应用。 ...
8. **扩展性**:通过插件系统,如JK(Apache mod_jk)或mod_proxy_ajp,可以将Tomcat与Apache HTTP Server进行负载均衡和反向代理。 9. **错误处理**:404、500等错误页面可以通过定制error_pages目录下的错误页面...
- 数据库连接池、会话复制等配置可能需要调整。 10. **最佳实践**: - 将生产环境和开发环境的Tomcat配置分开管理。 - 使用安全的默认值,并定期更新到最新安全补丁。 以上就是关于Tomcat 6.0.18的一些关键知识...
此外,还可以通过使用连接池、启用压缩和缓存等方式提升性能。 9. **日志和错误处理**:Tomcat的日志信息存储在logs目录下,包括catalina.out、host-manager、manager和localhost_access_log.*.txt等文件,帮助...
【正文】 Tomcat总结文档 一、Tomcat介绍 Tomcat是Apache软件基金会下的Jakarta项目中的一...在实际开发中,Tomcat还涉及更多的高级配置,如集群、连接池、安全设置等,这些都需要根据具体需求进行深入研究和配置。
- 支持多种后端组件和服务,如EJB(Enterprise JavaBeans)、数据库连接池、事务管理等。 - 主要通过组件(如EJB)提供业务逻辑给客户端程序。 - 具备管理和配置自身资源的能力,例如安全管理、配置管理等。 ###...