PHP-скрипт MongoClient работает вечно

3

Я подключаюсь к удаленному хосту mongodb с классом PHP mongoclient.

Я не написал ничего простого, но простого кода подключения.

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

Он подключается к mongodb, но через некоторое время мое приложение зависает. По зависанию я подразумеваю запуск php sript навсегда, никакого ответа и, наконец, apache и моего сервера. Мне нужно перезагрузить свой сервер, чтобы он снова появился.

Почему PHP script работает навсегда, а mongoserver не отвечает.

У меня max_execution_time установлено значение 30 секунд.

Версия MongoClient 1.4.5

Обновление:

Как объяснено здесь По умолчанию соединение и время ожидания сокета из mongodb никогда не время ожидания, я думаю, может быть php MongoClient ждет навсегда, если сокет закрыт со стороны MongoServer.

Чтобы убедиться, что у меня установлены параметры для mongoclient, чтобы не ждать более 5 секунд, если сокет закрыт, например ниже

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

Но это все еще висит

Вот короткий Mongo Log

2: 4: найдено соединение somehost; -; dbname/user/fd6da21ee7cf37731eb88e250d4a05d6; 1957 (ищет для somehost; -; dbname/username/fd6da21ee7cf37731eb88e250d4a05d6; 1957) 2: 2: mongo_get_read_write_connection: поиск соединения STANDALONE

2: 4: найдено соединение host; -; dbname/username/fd6da21ee7cf37731eb88e250d4a05d6; 1957 (ищет для имени хоста; -; dnname/user/fd6da21ee7cf37731eb88e250d4a05d6; 1957)

2: 2: is_ping: pinging имя хоста; -; имя_бд/имя пользователя /fd 6da21ee7cf37731eb88e250d4a05d6, 1957

Нет журнала после 'is_ping'. Это означает, что мой script висит здесь.

Update:

Вот какие процессы используются и работают, когда он висит

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]
  • 0
    Я тоже получаю эту ошибку, я использую SSL, но я не думаю, что проблема заключается в SSL - просто сокеты становятся устаревшими. Если я найду ответ, я обязательно опубликую его здесь для вас.
Теги:

1 ответ

0

звучит как проблема с оборудованием или проблема mongodb, сервер не нуждается в перезагрузке, если есть зависающие скрипты php...

но вы можете попытаться добавить имя пользователя db в параметры, подобные этому:

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);
}
  • 0
    пытался. это не делает никаких изменений. все та же проблема.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню