gpt4 book ai didi

php - MongoClient PHP 脚本永远运行

转载 作者:可可西里 更新时间:2023-11-01 09:55:47 25 4
gpt4 key购买 nike

我正在使用 PHP mongoclient 类连接 mongodb 远程主机。

我没有写什么特别简单但简单的连接代码。

$connection_url = "mongodb://{$dbuser}:{$dbpass}@{$dburl}:{$dbport}/{$dbname}";         
$this->m = new MongoClient($connection);

它确实连接到 mongodb 但一段时间后我的应用程序挂起,挂起我的意思是 php sript 永远运行,没有响​​应,最后 apache 和我的服务器崩溃了。我需要重新启动我的服务器才能再次启动它。

为什么 PHP 脚本一直运行而 mongoserver 没有响应。

我将 max_execution_time 设置为 30 秒。

MongoClient 版本 1.4.5

更新:

如解释heremongodb 的默认连接和套接字超时是 never timeout ,我猜,如果从 MongoServer 端关闭套接字,可能是 php MongoClient 正在等待永远。

为确保我已将 mongoclient 的选项设置为在套接字关闭时等待时间不超过 5 秒,如下所示

$connection_url = "mongodb://{$dbuser}:{$dbpass}@{$dburl}:{$dbport}/{$dbname}";
$options = array('connectTimeoutMS' =>5000 , 'socketTimeoutMS' => 5000);
$this->m = new MongoClient($connection, $options);

但这仍然挂起

这是简短的 Mongo 日志

2:4:found connection somehost;-;dbname/user/fd6da21ee7cf37731eb88e250d4a05d6;1957 (looking for somehost;-;dbname/username/fd6da21ee7cf37731eb88e250d4a05d6;1957) 2:2:mongo_get_read_write_connection: finding a STANDALONE connection

2:4:found connection host;-;dbname/username/fd6da21ee7cf37731eb88e250d4a05d6;1957 (looking for hostname;-;dnname/user/fd6da21ee7cf37731eb88e250d4a05d6;1957)

2:2:is_ping: pinging hostname;-;dbname/username/fd6da21ee7cf37731eb88e250d4a05d6;1957

'is_ping' 后没有日志。这意味着我的脚本卡在这里。

更新:

这是挂起时正在使用和运行的进程

ps aux | sort -rk 3,3 | head -n 20
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
www-data 32612 0.0 1.1 108372 5604 ? S 11:05 0:00 /usr/sbin/apache2 -k start
www-data 32390 0.0 1.1 108372 5604 ? S 11:04 0:00 /usr/sbin/apache2 -k start
www-data 32389 0.0 1.4 109192 7348 ? S 11:00 0:00 /usr/sbin/apache2 -k start
www-data 32388 0.0 1.4 109192 7376 ? S 11:00 0:00 /usr/sbin/apache2 -k start
www-data 32387 0.0 1.4 109192 7376 ? S 11:00 0:00 /usr/sbin/apache2 -k start
www-data 32386 0.0 1.2 108412 6100 ? S 11:00 0:00 /usr/sbin/apache2 -k start
www-data 32385 0.0 1.8 111692 9432 ? S 11:00 0:00 /usr/sbin/apache2 -k start
www-data 31833 0.0 1.5 109216 7548 ? S 02:35 0:00 /usr/sbin/apache2 -k start
www-data 31173 0.0 1.5 108824 7872 ? S Mar02 0:00 /usr/sbin/apache2 -k start
www-data 15538 0.0 1.5 109216 7664 ? S Mar02 0:00 /usr/sbin/apache2 -k start
www-data 15536 0.0 1.4 109200 7496 ? S Mar02 0:00 /usr/sbin/apache2 -k start
www-data 15535 0.0 1.6 110904 8444 ? S Mar02 0:00 /usr/sbin/apache2 -k start
www-data 15534 0.0 1.3 108684 6536 ? S Mar02 0:00 /usr/sbin/apache2 -k start
whoopsie 847 0.0 0.5 187668 2676 ? Ssl Feb24 0:00 whoopsie
syslog 370 0.0 0.6 249676 3060 ? Sl Feb24 0:31 rsyslogd -c5
root 984 0.0 0.1 15792 908 tty1 Ss+ Feb24 0:00 /sbin/getty -8 38400 tty1
root 946 0.0 2.0 108348 10120 ? Ss Feb24 0:32 /usr/sbin/apache2 -k start
root 9 0.0 0.0 0 0 ? S Feb24 0:00 [rcu_bh]
root 879 0.0 0.0 0 0 ? S< Feb24 0:00 [kvm-irqfd-clean]

最佳答案

听起来像是硬件问题或 mongodb 问题,如果有挂起的 php 脚本,服务器应该不需要任何重启...

但是,您可以尝试将用户名密码数据库添加到这样的选项中:

function __construct($host, $username, $password, $db){
$this->client = new MongoClient("mongodb://" . $host, array('username' => $username, 'password' => $password, 'db' => $db));
$this->db = $this->client->selectDB($db);
}

关于php - MongoClient PHP 脚本永远运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22013805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com