为了确保服务不会被过多的http长连接压垮,我们需要对tomcat设定个最大连接数,超过这个连接数的请求会拒绝,让其负载到其它机器。达到保护自己的同时起到连接数负载均衡的作用。
一、解决方案:修改tomcat配置文件,修改最大连接数(增大)
修改server.xml配置文件,Connector节点中增加acceptCount和maxThreads这两个属性的值,并且使acceptCount大于等于maxThreads:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"
maxConnections="800" acceptCount="500" maxThreads="400" />
二、实验验证:
maxThreads:tomcat起动的最大线程数,即同时处理的任务个数,默认值为200
acceptCount:当tomcat起动的线程数达到最大时,接受排队的请求个数,默认值为100
这两个值(acceptCount+maxThreads)如何起作用,请看下面三种情况
情况1:接受一个请求,此时tomcat起动的线程数没有到达maxThreads,tomcat会起动一个线程来处理此请求。
情况2:接受一个请求,此时tomcat起动的线程数已经到达maxThreads,tomcat会把此请求放入等待队列,等待空闲线程。
情况3:接受一个请求,此时tomcat起动的线程数已经到达maxThreads,等待队列中的请求个数也达到了acceptCount,此时tomcat会直接拒绝此次请求,返回connection refused
同时加上maxConnections
原来tomcat最大连接数取决于maxConnections这个值加上acceptCount这个值,在连接数达到了maxConenctions之后,tomcat仍会保持住连接,但是不处理,等待其它请求处理完毕之后才会处理这个请求。
三、总结:
tomcat能支持最大连接数由maxConnections加上acceptCount来决定。同时maxThreads如何设定?
一般的服务器操作都包括两方面:1计算(主要消耗cpu),2等待(io、数据库等)
第一种极端情况,如果我们的操作是纯粹的计算,那么系统响应时间的主要限制就是cpu的运算能力,此时maxThreads应该尽量设的小,降低同一时间内争抢cpu的线程个数,可以提高计算效率,提高系统的整体处理能力。
第二种极端情况,如果我们的操作纯粹是IO或者数据库,那么响应时间的主要限制就变为等待外部资源,此时maxThreads应该尽量设的大,这样 才能提高同时处理请求的个数,从而提高系统整体的处理能力。此情况下因为tomcat同时处理的请求量会比较大,所以需要关注一下tomcat的虚拟机内存设置和linux的open file限制。
现实应用中,我们的操作都会包含以上两种类型(计算、等待),所以maxThreads的配置并没有一个最优值,一定要根据具体情况来配置。
最好的做法是:在不断测试的基础上,不断调整、优化,才能得到最合理的配置。
acceptCount的配置,我一般是设置的跟maxThreads一样大,这个值应该是主要根据应用的访问峰值与平均值来权衡配置的。
如果设的较小,可以保证接受的请求较快响应,但是超出的请求可能就直接被拒绝
如果设的较大,可能就会出现大量的请求超时的情况,因为我们系统的处理能力是一定的。
为了确保服务不会被过多的http长连接压垮,我们需要对tomcat设定个最大连接数,超过这个连接数的请求会拒绝,让其负载到其它机器。达到保护自己的同时起到连接数负载均衡的作用。一、解决方案:修改tomcat配置文件,修改最大连接数(增大)修改server.xml配置文件,Connector节点中增加acceptCount和maxThreads这两个属性的值,并且使acceptCount大于等于maxThreads:<Connector port="8080" protocol="HTTP/
线程中止、CPU缓存优化、内存屏障线程中止不正确的线程中止-Stop正确的线程中止-interrupt正确的线程中止-标志位内存屏障和CPU缓存CPU性能优化手段-缓存多级缓存MESI协议CPU性能优化手段-运行时指令重排两个问题内存屏障(Memory Barrier)读内存屏障(Load Memory Barrier)写内存屏障(Store Memory Barrier)
不正确的线程中止-Stop
Stop:中止线程,并且清除监控器锁的信息,但是可能导致线程安全问题,JDK不建议用。
Tomcat
默认配置的
最大
请求
数
是 150,也就是说同时支持 150 个并发,当然了,也可以将其改大。
当某个应用拥有 250 个以上并发的时候,应考虑应用
服务
器的集群。
具体能承载多少并发,需要看硬件的配置,CPU 越多性能越高,分配给 JVM 的内存越多性能也就越高,但也会加重 GC 的负担。
操作系统对于进程中的线程
数
有一定的
限制
:
Windows 每个进程中的线程
上半年接手离职同事留下的项目现在出现问题了,需要解决一下。这个项目呢 现在基本就不在开发了平时出现问题了我就解决维护一下,不会再做较大拓展开发。所以对这也是有好多不明白的地方。说实话node我是没学过的,自己也没看过一直在搞java的,这次出现问题就记录一下
一、问题产生位置及现象:
平台SqlServer
数
据库更新后出现,启动
服务
器发现平台登录不上去且不报正确还是错误信息就只打印:ERR_E...
在该
服务
器里找到 域名管理 (白名单) 添加该域名.
注意事项:
服务
器是否正常运行: win+R键 打开 cmd 命令行 输入 ping IP地址 (
数
据丢失率为 0% 则正常,为 100%,说明
服务
器自身网络出现问题,你可以联系
服务
器供应商提交工单).
域名是否解析成功: win+R键 打开 cmd 命令行 输入 ping xxx.com (出现
服务
器 IP 则解析成功).
新建站点: 如
1、Broken pipe
org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe
org.apache.
tomcat
.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
解决办法——nginx方法
proxy_send_timeout 1200s;
proxy_read_t
I have had this error for some time as well. It might be some kind of netbeans bug that has to do with netbeans connector. I can't find any mention of favicon.ico in
my code or in the project settin
1、运行→regedit→进入注册表, 在
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Explorer/ShellExecuteHooks
这个位置有一个正常的键值{AEB67...
问题背景:测试环境最近隔几周就会出现
请求
服务
没有响应,查看
服务
进程正产,查看后台日志没有任何报错的日志,查看
tomcat
下的localhost_access_log.log日志中也没有
请求
记录。
排查步骤:
(1)查看
tomcat
的jvm的gc日志,分析后正常。(
tomcat
如何开启gc日志以及如何分析日志,可参考文章:https://www.jianshu.com/p/d1f5916d554...