背景:我用 Java 开发了一个 IP 解析程序,用于解析公司某 API 调用入口处的日志信息,主要是统计用户的活跃地区( IP 信息来源主要是百度)。目前每秒钟需要处理三百左右的 IP 信息,使用 Jedis library 。假定部署 Java 程序的服务器为 server-a(centos, java task),部署 redis 程序的服务器为 server-b(ubuntu, redis)
过程:当用户请求来到的时候,查询 redis 中是否已经缓存了该 IP 对应的地区信息,如果没有就从百度查询并且缓存到 redis 中。 redis 目前允许的最大连接数是 10000 。 jedis 配置文件中连接池最大连接数是 1024 ,等待响应时间最大是 3000 ms 。
问题:我的 redis 连接数一直在增加,没过几天就会出现连接达到最大值的错误,但是我的 jedis 配置文件明明只允许 1024 的最大连接数啊,为啥我的 redis 中已经接近 10000 个连接了呢?
我的排查流程:
Append: 我通过 server-b 上的 redis monitor 查看 1465701291.014345 [0 server-a-ip:39680] 这类信息,的确只看到了两条链路,两个端口
但是为啥在 server-b 上执行 netstat -anp | grep server-a-ip 时有真么多都处于 ESTABLISHED 状态呢,百思不得其解。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.