tomcat连接数一超大就卡死?
您需要配置一个连接池,并且需要分配足够的内存。
tomcat7默认参数?
套接字参数选项:
_nodelay:表示立即发送数据。
_resuseaddr:表示套接字绑定的本地地址允许重用。
_timeout:表示接受数据时的超时。
_linger:表示执行clos:执行这个方法,然后执行socket的close方法,这个方法也会立即返回,但是底层sock:执行socket的close方法,不会立即返回,而是进入阻塞状态。同时,底层套接字也会尝试发送剩余的数据,close方法只有在满足以下两个条件之一时才会返回:
(1):底部套接字已经发送了所有剩余的数据。
(2):虽然底层套接字还没有发送完所有剩余的数据,但是已经被阻塞了3600秒。如果close()方法的阻塞时间超过3600秒,它将返回,剩余的未发送数据将被丢弃。
_tw_reuse1表示打开重用。允许等待时间套接字重新用于新的tcp连接。默认值为0,这意味着它是关闭的。
_tw_recycle1表示打开tcp连接中时间等待套接字的快速恢复,默认值为0,表示关闭。
_snfbuf:表示发送数据的缓冲区大小。
_rcvbuf:表示接收数据的缓冲区大小。
_keepalive:表示一个长时间空闲的socekt是否会自动关闭。
8.指示是否支持发送一个字节的tcp紧急数据。
默认参数
注意:连接器通常位于home_tomcat/conf/servser.xml文件中。
#正常参数
连接器端口8080协议http/1.1
连接超时20000
重定向端口8443/
配置参数调试
#优化参数
连接器端口8080
协议http/1.1
maxthreads1000
minsparethreads100
接受计数1000
maxconnections1000
连接超时20000
maxhttpheadersize8192
tcpnodelayttrue
压缩
压缩最小化2048
disableuploadtimeouttrue
重定向端口8443
enablelookupsfalse
uriencodingutf-8/
参数的详细说明
1)端口
注意:代表tomcat端口号,默认为8080。
2)协议
注意:有四种可选协议类型,bio(阻塞io)、nio、nio2和apr。
#生物
bio(阻塞i/o)阻塞i/o操作,传统javai/o操作(即包及其子包)。默认情况下,tomcat以bio模式运行,这是三种模式中性能最低的。默认情况下可以使用bio配置。
bio更适合处理简单的流程,如果程序处理得快,结果可以马上返回。bio可以用于简单的项目和应用程序。
#nio
nio(newi/o)是javase1.4及后续版本提供的一种新的i/o操作模式(即包及其子包)。javanio是基于缓冲区和非阻塞i/o操作的javaapi,比传统i/o操作(bio)具有更好的并发性能。
nio更适合需要耗时完成请求的后台操作。如果一个程序收到一个请求,它需要耗时的处理,所以它可以t立即返回结果,所以如果采用bio,会占用一个连接,使用nio后,可以转移到其他请求,直到程序处理后返回。
#四月
apr(apacheportableruntime/apacheportableruntime)是apach:tomcat会以jni的形式调用apachehttpserver的核心动态链接库来处理文件读取或者网络传输,从而大大提高tomcat处理静态文件的性能。
apr可以大大提高tomcat对于静态文件的处理性能,同时如果使用https进行传输,也可以提高ssl的处理性能。
#修改方法
//生物
协议http/1.1
//nio
草案
//nio2
草案
//apr
协议开环(同openloop)
3)maxthreads(线程池的大小默认为200)
注意:连接器创建最大数量的线程来处理请求,并创建最大数量的来自同事的请求。默认值为200。
如果一个执行器与这个连接器相关联,这个属性将被忽略,因为它将被忽略,所以连接器将使用执行器而不是内部线程池来执行任务。maxthreads是一个重要的配置属性,maxthreads的合理配置直接影响到tomcat的相关性能。maxthreads不是越大越好。其实就算你配置成999999也没用,因为这个最大值是受操作系统和相关硬件限制的,最大值不一定是最优值,所以要追求最优值而不是最大值。
qps(每秒查询数):每秒查询率qps是特定查询服务器在指定时间内处理的流量的度量。我们经常用qps值来衡量服务器的性能。
qps并发/平均响应时间
并发qps数*平均响应时间
系统的吞吐量通常由两个因素决定,qps和并发性。每个系统的这两个值都有一个相对的极限。在应用场景接入的压力下,只要有一项达到系统的最高值,系统的吞吐量就上不去。如果压力继续增加,系统的吞吐量就会下降,因为系统已经超负荷了,其他的如上下文切换、内存等消耗都会导致系统性能的下降。所谓吞吐量,在这里可以理解为每秒钟可以处理的请求数。
所以选择一个合理的maxthreads值并不那么容易。因为线程太多只会造成更多的内存开销和更多的cpu开销,而对提高qps没有任何帮助;找到最佳线程数后,通过简单的设置,web系统可以更加稳定,获得最高最稳定的qps输出。
#获得最佳maxthreads的最佳值
(1)通过在线系统的持续使用和用户的持续增长,可以测试性能,观察qps和响应时间。这样系统爆发式增长的时候就会崩溃,比如双12。
(2)根据公式得出的最佳线程数((线程等待时间,线程cpu时间)/线程cpu时间)*服务器端cpu数有时会产生误导,因为有些系统处理环节可能需要较长时间,从而影响公式的结果。
(3)单用户和多用户压力测试,检查cpu消耗,然后直接乘以百分比,再进行压力测试。通常,线程的最佳数量应该接近这个值。这种更适合理想场景,实际情况会比这复杂很多。
(4)根据系统进行调整;;自身情况,如硬件限制、系统限制、程序处理能力限制等。
(5)定期修改到不同的max。threads值,取决于服务器响应结果和用户响应。
#qps和线程数
(1)在最佳线程数之前,qps和线程数是互相递增的。最佳线程数后,qps持平,不上升,甚至略有下降,而对应的时间保持上升。
(2)对于同一个系统,支持的线程越多(优化的线程越多,而不是配置的线程越多),qps越高。
#qps和响应时间
(1)对于一般的web系统,响应时间一般由cpu执行时间和io等待时间组成。
(2)2)cpu执行时间的减少对qps有实质性的提升,而io时间的减少对qps没有明显的提升。如果想要显著提高qps,那么在优化系统的时候,应该把重点放在优化cpu消耗上。
4)最小线程
注意:运行的最小线程数,这些总是保持运行。如果未指定,默认值为10。
5)acceptcount(默认为100,队列的大小,backlog:半队列)。
注意:最大队列长度。一般和maxthreads一样,默认值是100。
当所有可能的请求处理线程都在使用中时,传入连接请求的最大队列长度。如果未指定,默认值为100。一般设置为与maxthreads相同或一半。如果该值设置得太高,排队的请求将会超时而得不到处理。所以这个值要主要根据应用的访问峰值和平均值来权衡配置。
6)maxconnections(nio和nio2的默认值是10000,以及accept的套接字的大小)
注意:服务器在任何给定时间接受和处理的最大连接数。当达到这个数目时,服务器将接受但不处理它,等待进一步的连接。nio和nio2的默认值是10000,apr的默认值是8192。
7)连接超时(设置为(连接超时))
注意:当请求已被接受但未被处理时,就是等待超时。单位是毫秒,默认值是60000。通常设置为30000。
8)maxhttpheadersize
注意:请求和响应的http头的最大大小是以字节为单位指定的。如果未指定,此属性将设置为8192(8kb)。
9)tcpnodelay
注意:如果为true,服务器套接字将设置tcp_no_delay选项,这在大多数情况下可以提高性能。默认情况下,它设置为true。
10)压缩
注意:默认情况下,是否启用gzip压缩是关闭的。这个参数的可接受值是"关闭"(不使用压缩),"on"(压缩文本数据)力与力(在所有情况下强制压缩)。
11)压缩尺寸
注意:如果compressionon打开,则该项被启用。数据压缩前的最小值,即超过该值后被压缩。如果没有指定,这个属性默认为"2048"(2k),单位为字节。
12)禁用上传超时
注意:该标志允许servlet容器在执行servlet时使用不同的更长的连接超时。最终结果是让servlet有更长的时间来完成它的执行,或者在上传数据时有更长的超时时间。如果未指定,则设置为false。
13)启用查找
注意:关闭dns反向查询。
14)尿酸编码
注意:url编码字符集。
原文标题:tomcat如何配置数据库的连接池 tomcat连接数一超大就卡死?,如若转载,请注明出处:https://www.bjtdsx.com/tag/12288.html
免责声明:此资讯系转载自合作媒体或互联网其它网站,「天地水秀」登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,文章内容仅供参考。