昨天跑一个deamon,是关于mongo的操作,使用的是php的mongo模块, mongo-1.1.4; 发现出现了 too many open files的情况, 使用lsof查看了一下进程的情况,出现了很多 sock类型的资源,都是 can’t identify protocol 。
例如:
lijunjie 3074 web 3u sock 0,4 0t0 45174 can’t identify protocol
看了一下mongo-1.1.4的源代码,发现在函数php_mongo_connect_nonb(…)中,socket产生的fd,在connect(或因别的错误)出错时,直接return false; 没有close, 所以才出现这种情况。
先修改了一下代码,然后再给官方提个bug吧
按说socket产生的时候都已经指定了sock类型的,所以似乎不需要显示成“can’t identify protocol”
相关资料:http://kasicass.blog.163.com/blog/static/3956192010101994124701/