要解决的问题:
使用PHP 的mongo模块连接mongodb时,可能会出现打开的文件描述符未关闭的情况,直到文件描述符的数量达到limit的限制而出错。
启动mongod,设置最大连接数为5(方便调试):
1 |
mongod --fork --port 9002 --bind_ip 10.55.38.114 --dbpath /data1/mongodb_data/ --logpath /data1/mongolog/mongo9002.log --maxConns 5 |
消费连接数:
1 2 3 4 5 |
#nc 10.55.38.114 9002& #nc 10.55.38.114 9002& #nc 10.55.38.114 9002& #nc 10.55.38.114 9002& #nc 10.55.38.114 9002& |
测试脚本mongo.php:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php while(1) { try{ $mo = new Mongo("mongodb://10.55.38.114:9002/phpor", array("timeout"=>2000)); $modb = $mo->selectDB("phpor"); $mocl = $modb->selectCollection("phpor_0"); $cursor = $mocl->find(array("_id"=>2258319125)); $arr = $cursor->getNext(); print_r($arr); }catch(Exception $e){ //var_dump($e); echo $e->getCode() ,":", $e->getMessage(), "\n"; sleep(1); } unset($mo); } |
测试:
1 |
php mongo.php |
发现错误信息(结果却还是没有出现文件描述符未关闭的情况):
19:max number of retries exhausted, couldn’t send query
4:couldn’t get response header