现象描述
高并发情况下客户端的所有图片处理请求失败,返回大量500 InternalError服务器异常错误
问题定位
1.系统结构与最大连接数的配置如下图所示:
前端nginx与应用服务部署在同一台服务器上,A1/A2服务器主要用于图片处理。
2.并发为200时,使用/sbin/ss --s 命令查看各服务器连接数。
3.上述连接数对比,结合当前并发数来看,这台服务器的连接数就比较的大了,进一步使用netstat命令查询,怀疑是由于应用服务A和后端nginx间连接未复用导致的大量500错误
4.查看应用服务代码,发现确实没有使用httpclient连接池管理连接,在请求数量不断增多时大量占用端口被占用,无法建立新的连接,导致服务异常。
问题原因
应用服务器A使用httpclient向后端图片处理服务器A1、A2发起请求,没有使用连接池管理,每一个请求都建立一个新的连接,连接关闭过程有一定耗时,随着并发时间的增加,请求数量不断增加,导致后面的并发请求时端口被耗尽,新的连接又无法建立。
解决方法
应用服务器A与后端nginx间采用httpclient连接池来处理请求即可