一、tomcat的内存和支持线程数成反比
当调大tomcat的最小内存和最大内存时,应该适当调小初始化线程数和最大线程数
二、 Action.c(3): Error -27791: Server has shut down the connection prematurely错误
http协议的脚本,执行性能测试过程中报错:Action.c(3): Error -27791: Server has shut down the connection prematurely
测试对象是通过nginx做请求分发的一个java程序。
解决方案:测试过程中,服务器java应用的压力并未上去,且应用未死掉。跟踪nginx日志,发现nginx将多余的请求丢弃,需要修改 worker_connections(派发nginx于后端连接数,文件名:/安装目录/nginx/conf/nginx.conf),默认是1024,改成4096,问题解决。
附带网上相关情景的解决方案:
1、应用服务器死掉。小用户时程序上的问题,程序上处理数据库的问题
2、应用服务没有死。应用服务参数设置问题。例如:在许多客户端weblogic应用服务器被拒绝,而 在服务器端没有错误显示,则有可能是weblogic中的server元素的acceptbacklog属性值设得过低。如果连接时收到connection refused消息,说明应提高该值,每次增加25%。我们用的是Tomcat, 然后我自己优化了tomcat配置,初始好像是maxThreads="500" minSpareThreads="400" maxSpareThreads="450"。
3、数据库的连接
在应用服务的性能参数可能太小了数据库启动的最大连接数(跟硬件的内存有关)
4、有时关闭卡巴斯基也会解决如上问题
三、在云平台虚拟机上的nginx,压力测试出现大量connection timed out连接超时错误
原因:iass的nc节点(计算节点)物理机有个默认限制是65000,导致当当超过65000是会将连接丢弃,出现connection timed out错误
解决方法:将每台iass的nc节点添加一个配置或直接修改,将这个限制改为99999999
修改配置文件地址: /etc/sysctl.conf
添加配置内容:net.netfilter.nf_conntrack_max = 99999999
直接修改命令:
salt '*' cmd.run 'echo 99999999 > /proc/sys/net/netfilter/nf_conntrack_max'
iass警综项目 /etc/sysctl.conf 配置参考:
四、多个微服务应用共用一个数据库实例时,出现某个服务的数据库连接不够导致将数据库连接占满
原因:不是很忙碌的服务初始化和最大数据库连接数过高,导致忙碌的服务数据库连接数不够
解决方法:调低不忙碌的服务初始化和最大数据库连接数
五、docker中tomcat日志或程序日志输出过多,且删除日志不能释放空间
原因:日志默认是写在系统盘,而linux系统盘中写的日志会被加锁,导致删除不能释放空间(具体原因带研究)
解决办法:挂载一个数据卷到linux,再将docker中tomcat日志或程序日志写到数据卷,解决日志写到系统盘问题
六、tomcat连接池优化方法
修改tomcat配置文件server.xml(根据部署情况找到此文件),找到需要修改连接池的端口和请求方式,添加一句 maxThreads="400"