我有一个带有 MySQL 连接池的应用程序。在生产过程中,每隔 1-3 秒就会关闭某个套接字。因此,我的应用程序会重新启动此连接。
这是一个相当大的池,有 30 个连接/应用服务器与单个 MySQL 实例通信。数据库端总共可能有 1000 个连接。
当我重新启动应用程序进程时,问题就消失了。我查找与套接字、文件描述符、内核相关的某些原因。应用程序每秒打开和关闭约 10-30 个连接,以便拥有约 4-5k 个传入连接。
如何避免?
lsof -nPi tcp
报告大约 5k 个连接(以及正确的传出到 mysql 的数量)。
/proc/sys/net/ipv4/ip_local_port_range
显示有 10k 到 60k 个可用端口
ulimit -n 设置为高数字(100k)
Vmstat 显示没有交换。我的 CPU 占用率为 50%,内存占用率为 25%。
我下一步该检查什么?如何修复?