Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Mongo socketTimeoutMS不';行不通_Php_Mongodb - Fatal编程技术网

Php Mongo socketTimeoutMS不';行不通

Php Mongo socketTimeoutMS不';行不通,php,mongodb,Php,Mongodb,我执行从PHP5.4到Mongo2.4.10的“findOne()”查询 PHP mongo驱动程序版本为1.5.5 Mongo数据库是复制集 要限制等待此“findOne()”查询结果,我使用“socketTimeoutMS”选项 根据文档,如果超过“socketTimeoutMS”函数,“findOne()”必须抛出“MongoCorSortimeoutException”异常 但我在日志中没有看到任何异常 我还测量了这个“findOne()”查询的执行时间——通常比“socketTimeo

我执行从PHP5.4到Mongo2.4.10的“findOne()”查询
PHP mongo驱动程序版本为1.5.5
Mongo数据库是复制集

要限制等待此“findOne()”查询结果,我使用“socketTimeoutMS”选项
根据文档,如果超过“socketTimeoutMS”函数,“findOne()”必须抛出“MongoCorSortimeoutException”异常
但我在日志中没有看到任何异常

我还测量了这个“findOne()”查询的执行时间——通常比“socketTimeoutMS”要长(有时是几倍)

看来“socketTimeoutMS”选项不起作用了
需要指出的是,我们的mongo DB负载非常高

还需要提到的是,在我的本地机器上,“socketTimeoutMS”工作正常

那么,“socketTimeoutMS”选项忽略生产的原因是什么呢

2 --- 4   Using 50 from default with
2 --- 4   found connection 192.168.2.172:27017;gmt;admin/gmt/fb5f987e48d27c093e233d3cda7758e2;11843 (looking for 192.168.2.172:27017;gmt;admin/gmt/fb5f987e48d27c093e233d3cda7758e2;11843)
2 --- 4   is_ping: skipping: last ran at 1407943807, now: 1407943807, time left: 5
2 --- 4   found connection 192.168.2.92:27017;gmt;admin/gmt/fb5f987e48d27c093e233d3cda7758e2;11843 (looking for 192.168.2.92:27017;gmt;admin/gmt/fb5f987e48d27c093e233d3cda7758e2;11843)
2 --- 4   is_ping: skipping: last ran at 1407943807, now: 1407943807, time left: 5
2 --- 4   found connection 192.168.2.94:27017;gmt;admin/gmt/fb5f987e48d27c093e233d3cda7758e2;11843 (looking for 192.168.2.94:27017;gmt;admin/gmt/fb5f987e48d27c093e233d3cda7758e2;11843)
2 --- 4   is_ping: skipping: last ran at 1407943807, now: 1407943807, time left: 5
2 --- 4   discover_topology: checking ismaster for 192.168.2.172:27017;gmt;admin/gmt/fb5f987e48d27c093e233d3cda7758e2;11843
2 --- 4   discover_topology: checking ismaster for 192.168.2.92:27017;gmt;admin/gmt/fb5f987e48d27c093e233d3cda7758e2;11843
2 --- 4   found connection 192.168.2.92:27017;gmt;admin/gmt/fb5f987e48d27c093e233d3cda7758e2;11843 (looking for 192.168.2.92:27017;gmt;admin/gmt/fb5f987e48d27c093e233d3cda7758e2;11843)
2 --- 4   ismaster: skipping: last ran at 1407943798, now: 1407943807, time left: 6
2 --- 4   discover_topology: ismaster got skipped
2 --- 4   discover_topology: checking ismaster for 192.168.2.94:27017;gmt;admin/gmt/fb5f987e48d27c093e233d3cda7758e2;11843
2 --- 4   found connection 192.168.2.94:27017;gmt;admin/gmt/fb5f987e48d27c093e233d3cda7758e2;11843 (looking for 192.168.2.94:27017;gmt;admin/gmt/fb5f987e48d27c093e233d3cda7758e2;11843)
2 --- 4   ismaster: skipping: last ran at 1407943798, now: 1407943807, time left: 6
2 --- 4   discover_topology: ismaster got skipped
2 --- 4   No timeout changes for 192.168.2.92:27017;gmt;admin/gmt/fb5f987e48d27c093e233d3cda7758e2;11843
2 --- 4   No timeout changes for 192.168.2.92:27017;gmt;admin/gmt/fb5f987e48d27c093e233d3cda7758e2;11843

你的报告是什么?您应该能够通过调用脚本前面的
MongoLog::setLevel(MongoLog::FINE)
MongoLog::setModule(MongoLog::CON)
来记录应用的超时设置。顺便说一下,我注意到这些常量的文档有点过时,因为
CON
没有文档。我创建了一个提醒来解决这个问题。感谢您的建议,我启用了MongoLog,但是如果超过“socketTimeoutMS”,我应该在日志中看到什么?应该在
FINE
级别有
CON
模块消息,详细说明应用的流超时。此外,对于不覆盖
socketTimeoutMS
(即使用MongoClient选项)的查询,您可能会看到“无超时更改”。如果您忽略了
socketTimeoutMS
,这是否意味着
findOne()
实际上返回了查询结果?我还要注意,
socketTimeoutMS
对于减少服务器查询负载来说是一个糟糕的工具,因为它只控制客户端超时。长时间运行的查询将在服务器上保持活动状态。为了减少服务器查询时间,您应该考虑设置查询操作符;但是,该操作符仅在MongoDB 2.6+中可用。感谢您的建议,在问题描述中添加了Mongog信息。还需要注意的是,我已经使用了$maxTimeMS