5

非常に長いタスクを実行していたので、何かが不足することはわかっていました。それは問題ではありません。

どうやって両方のエラーを同時に取得したのですか?

致命的なエラー: 805306368 バイトの許容メモリ サイズが使い果たされました (71 バイトを割り当てようとしました)...

--

致命的なエラー: 行 0 の Unknown で最大実行時間が 300 秒を超えました

最初の「致命的な」エラーで実行を停止すべきではありませんか? APC と php 5.2.6 を実行しています。

編集: これはスクリーンショットです

4

2 に答える 2

4

ここで競合状態に陥っている可能性があります。

これは基本的に機能します。たとえば、メモリのシャットダウン機能でFATALをトリガーし、以前にシャットダウン機能をトリガーしたタイムアウトでFATALをトリガーします。

register_shutdown_function(function() {
    # consume all memory
    echo "break my pain\n";
    $a = ['hello'];
    while($a[] = $a);
});

set_time_limit(1);
while(1) usleep(100);

また、逆に機能し、最初にメモリのFATALをトリガーし、次にシャットダウン機能のタイムアウトのFATALをトリガーします。

register_shutdown_function(function() {
    set_time_limit(1);
    while(1) usleep(100);
});

ini_set('memory_limit', '1');
$a = array_fill(0, 1024, 'hello');
while($a[] = $a);

これはまだCodeigniter内で何が起こっているのかを100%説明していませんが、クエリに時間がかかりすぎるため、戻った後も実行時間制限がトリガーされます。PHPのバージョンが古いため、これを再現するのはやや困難です。PHPコードを評価すると、コードが評価されたというメッセージが表示され、その行でそのevalコマンド(PHP 5.4)が見つかります。より多くの情報を得るために、PHP5.4で再現してみてください。また、PHP5.2以降に見られた速度の向上からも大きなメリットが得られます。あなたは多くを逃しています。

ついさっき:

致命的なエラー:0行目の不明で最大実行時間が300秒を超えました

これは起動エラーのようなにおいがします。

あなたの最初のエラーを引き起こしたものは言うのが難しいです、あなたはそれを切り落としました。ここに評価済みのコードがあり、APCを介して部分的に処理されている可能性がありますが、同じスクリプトで2つの致命的なエラーが発生する可能性があります。

ただし、再現できる場合は、APCなしで試してください。それでも可能な場合は、PHPバグトラッカーで報告してください。

できない場合は、APCバグトラッカーの問題を報告してください。

編集: PHP 5.2.6を見るだけで、自分で報告して修正する必要があるかもしれません;)-現在の安定したPHPバージョンでも再現してみてください。

于 2013-01-16T14:52:59.440 に答える
0

これが発生する 1 つの方法は、register_shutdown_function がある場合です。

<?php
register_shutdown_function('shutdownFunction');
error_reporting(E_ALL);ini_set("display_errors", true);
ini_set("memory_limit", "5M");
ini_set("max_execution_time", 1);

for ($i=0;$i<1000000;$i++) {
    $val[] = rand();
}

function shutDownFunction() {
    echo "executed";
    for ($i=0;$i<100000000;$i++) {
        $val = rand();
    }
}

あなたが得たものと同じ出力:

致命的なエラー: 行 8 の /home/periklis/workspace/build_script/test.php で 5242880 バイトの許容メモリ サイズが使い果たされました (524288 バイトを割り当てようとしました)

実行された

致命的なエラー: 13 行目で /home/periklis/workspace/build_script/test.php の最大実行時間が 1 秒を超えました

于 2013-01-16T15:08:48.377 に答える