0

DoctrineMongoDBを使用してSymfony2プロジェクトに取り組んでいます。控えめに言っても、問題を発見した今日まで、すべてがうまく機能していました.

1 つまたは複数のレコード/ドキュメントを返すクエリが原因で、PHP プロセスが停止しているようです。より具体的には、これは「ファイル」の結果が返されるクエリでのみ発生します。PHP エラーは発生せず、Apache エラー ログにもエラーは記録されません。

このクエリを実行する URL にアクセスすると、Chrome でnet::ERR_EMPTY_RESPONSEが返されます。echo 'test';exit()クエリの直前でコンテンツを出力でき、ブラウザでコンテンツを確認できます。同じecho 'test';exit();行をクエリの直後に置くと、空の応答エラーが発生します。

私のコンピューターには、LAMP スタックを含む開発環境がセットアップされています。ただし、これはリモートの MongoDB インスタンスに接続するように構成されています。ローカル セットアップを使用してファイルをクエリする場合、問題はありません。さまざまなサービスのバージョンは、コンピューターとサーバーの間でわずかに異なります。この観察に基づくと、MongoDB サービスの問題ではなく、PHP 拡張機能の問題ではないでしょうか?

サーバー上のサービスを使用してファイルを正常に保存できることを付け加えます。しかし、私は自分のローカル設定でのみデータを照会/取得できます。

PHP がこのように停止した場合、ログ コンテンツは生成されますか?

次のサービス バージョンを実行しています。

  • OS: Ubuntu 12.04 LTS
  • アパッチ: 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
4

1 に答える 1

1

これは、5 月 3 日に修正したバグのようです。最新バージョンの github (v1.2 ブランチ!) を試すことをお勧めします。また、「mongodb」に phpinfo() セクションを含めると役立ちます。それでも問題が解決しない場合は、http://jira.mongodb.org/browse/PHPで再現可能な小さなスクリプトを使用してバグ レポートを提出してください。

于 2012-05-10T10:14:12.020 に答える