还是上次那个公司的项目,因为老机器坏了,项目进行了迁移,本以为可以换一个好点的服务器,结果迁移到到了一个更老的机器,只有4G内存,用户并发数会飙到500多,还有大量的上传下载文件和客户端的http协议通讯。
果然,迁移完毕之后第二天就卡死了,全部用户都卡在首页门户页,只有客户端的用户可以登陆上去。逐步排查原因,一开始以为是上传下载文件太占用资源了,把上传下载的文件限制调小,只允许少于5m的文件上传下载,支持了一会儿又崩了。然后怀疑是tomcat配置没弄好,于是去把配置的初始线程数量和并发数量给调大了,还是撑不住。
最后发现问题不在服务器,在客户端,客户端的设计很不好,每一个请求都会新开一个连接,然后请求结束后没有关闭连接。只能等待服务器连接超时,服务器因为某些原因,把超时时间设置成20s。结果导致大量闲置的连接占满了内存,最后为了系统稳定运行,把tomcat的connectTimeout超时时间改回1000ms了,服务器虽然还是很卡,但是不会出现停止运行了。
tomcat的server.xml配置
<Connector connectionTimeout="1000" 其他设置忽略 />
最终解决办法
让甲方申请换一台更好的服务器。