PHP умирает, когда Doctrine MongoDB ODM выполняет успешный файловый запрос

Я работаю над проектом Symfony2, используя Doctrine и MongoDB. По меньшей мере, все работало отлично, до сегодняшнего дня, когда я обнаружил проблему.

Запросы, которые возвращают одну или несколько записей / документов, по-видимому, приводят к смерти процесса PHP. Точнее говоря, это происходит только с запросами, в которых возвращаются результаты "файла". Я не получаю ошибку PHP, и нет также ошибок, зарегистрированных в журнале ошибок apache.

Когда я нажимаю на URL, который вызывает этот запрос, я получаю net::ERR_EMPTY_RESPONSE в Chrome. Я могу вывести контент с echo 'test';exit() как раз перед запросом, и я вижу содержимое в своем браузере. Если я поставлю то же самое echo 'test';exit(); сразу после запроса я получаю пустую ошибку ответа.

У меня есть настройка среды разработки на моем компьютере, которая включает в себя стек LAMP. Тем не менее, я настроил это для подключения к моему удаленному экземпляру MongoDB. У меня нет проблем при запросе файлов с использованием моей локальной установки. Различные версии сервиса немного отличаются между моим компьютером и сервером. Основываясь на этом наблюдении, кажется, что это не проблема службы MongoDB, но, возможно, проблема расширения PHP?

Я добавляю, что могу успешно хранить файлы, используя службы на моем сервере. Но я могу только запрашивать / извлекать данные на моей локальной установке.

Любой контент журнала генерируется, когда PHP умирает так?

Я использую следующие сервисные версии:

  • ОС: Ubuntu 12.04 LTS
  • Apache: 2.2.22
  • PHP: 5.3.10-1ubuntu3.1
  • Расширение Mongo PHP: 1.2.10
  • MongoDB-10gen: 2.0.5

Любая помощь будет принята с благодарностью. Я перепробовал все, что знаю, и до сих пор не нашел какой-либо подсказки относительно того, что на самом деле является причиной этого.

-

Моя модель выглядит так:

<?php

namespace Project\Bundle\Document;

use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * @MongoDB\Document
 */
class File {

/**
 * @MongoDB\Id(strategy="auto")
 */
protected $id;

/**
 * @MongoDB\ObjectId
 * @MongoDB\Index
 * @Assert\NotBlank
 */
protected $userId;

/**
 * @MongoDB\ObjectId
 * @MongoDB\Index
 */
protected $commonId;

/**
 * @MongoDB\File
 */
public $file;

/**
 * @MongoDB\String
 */
public $mimeType;

/**
 * @MongoDB\Hash
 */
public $meta;

... getters / setters ...

?>

Я включил подробное ведение журнала для сервера MongoDB, и запрос, кажется, работает нормально:

Wed May  9 20:04:29 [conn1] queryd dbdev.File.files query: { $query: { commonId: ObjectId('4fab01396bd985c215000000'), meta.size: "large" }, $orderby: {} } ntoreturn:1 nreturned:1 reslen:258 0ms
Wed May  9 20:04:29 [conn1] end connection 127.0.0.1:42087
Wed May  9 20:04:30 [DataFileSync] flushing mmap took 0ms  for 5 files
Wed May  9 20:04:30 [DataFileSync] flushing diag log
Wed May  9 20:04:30 [PeriodicTask::Runner] task: WriteBackManager::cleaner took: 0ms
Wed May  9 20:04:30 [PeriodicTask::Runner] task: DBConnectionPool-cleaner took: 0ms
Wed May  9 20:04:30 [PeriodicTask::Runner] task: DBConnectionPool-cleaner took: 0ms
Wed May  9 20:04:30 [clientcursormon] mem (MB) res:46 virt:997 mapped:160

ОБНОВИТЬ

я использовал strace найти следующую ошибку сегментации в Apache:

en("/opt/dev/app/cache/dev/doctrine/odm/mongodb/Hydrators/ProjectBundleDocumentFileHydrator.php", O_RDONLY) = 28
fstat(28, {st_mode=S_IFREG|0777, st_size=2462, ...}) = 0
fstat(28, {st_mode=S_IFREG|0777, st_size=2462, ...}) = 0
fstat(28, {st_mode=S_IFREG|0777, st_size=2462, ...}) = 0
fstat(28, {st_mode=S_IFREG|0777, st_size=2462, ...}) = 0
mmap(NULL, 2462, PROT_READ, MAP_SHARED, 28, 0) = 0x7fa3ae356000
munmap(0x7fa3ae356000, 2462)            = 0
close(28)                               = 0
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
chdir("/etc/apache2")                   = 0
rt_sigaction(SIGSEGV, {SIG_DFL, [], SA_RESTORER|SA_INTERRUPT, 0x7fa3b3ce4cb0}, {SIG_DFL, [], SA_RESTORER|SA_RESETHAND, 0x7fa3b3ce4cb0}, 8) = 0
kill(5020, SIGSEGV)                     = 0
rt_sigreturn(0x139c)                    = 0
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
Process 5020 detached

1 ответ

Решение

Это похоже на ошибку, которую я исправил 3 мая. Я бы посоветовал вам попробовать последнюю версию github (ветка v1.2!). Также полезно, если вы включите раздел phpinfo() в "mongodb". Если проблема не устранена, отправьте отчет об ошибке с помощью небольшого воспроизводимого сценария по адресу http://jira.mongodb.org/browse/PHP.

Другие вопросы по тегам