1

Google の最新の Windows App Engine PHP SDK v1.9.38 を使用して、ローカル開発サーバーで実行時間の長いスクリプトを実行していますが、何らかの理由で 30 秒でタイムアウトしています。エラーは、たとえば「致命的なエラー: 最大実行時間を超えたため、リクエストが中止されました。[スクリプト パス]\timertest.php 8 行目」です。

自動スケーリングのタイムアウトは 60 秒のはずです。ここで何が欠けているのかわかりません... 1 つのスクリプトでさまざまなファイル処理を行っていますが、30 秒で失敗するかどうかを確認するテスト スクリプトを作成しました。スクリプトは次のとおりです。

<?php

$a = 1;

do
    {
    syslog(LOG_INFO, $a.' Sleeping for 10 secs...\n');
    sleep(10);
    $a++;
    }
while($a < 8)

?>

出力は次のとおりです。

INFO: 1 Sleeping for 10 secs...\n
INFO: 2 Sleeping for 10 secs...\n
INFO: 3 Sleeping for 10 secs...\n
ERROR:root:php failure (255) with:

stdout:

X-Powered-By: PHP/5.5.26

Content-type: text/html

<br />

<b>Fatal error</b>:  The request was aborted because it exceeded the maximum execution time. in <b>[my script path]\timertest.php</b> on line <b>8</b><br />

INFO     2016-06-02 20:52:56,693 module.py:788] default: "GET /testing/timertest.php HTTP/1.1" 500 195

どこかの設定エラーだと思っていましたが、何がどこであるかわかりません。私の app.yaml は非常に標準的です:

application: ak2016-1
version: 1
runtime: php55
api_version: 1

handlers:
# Serve php scripts.
- url: /(.+\.php)$
  script: \1
  login: admin

そしてphp.iniも:

google_app_engine.disable_readonly_filesystem = 1
upload_max_filesize = 8M
display_errors = "1"
display_startup_errors = "1"

私が言うように、これはローカル dev SDK サーバーのみの問題です。私が処理しているファイルはローカルであるため、オンライン ライブ側については気にしません (ローカルのままにしておく必要があります)。

提案などありがとうございます!

4

1 に答える 1

2

リクエスト タイマーのドキュメントにアプリ サンプルをデプロイしましたが、問題を再現できませんでした。〜60秒後にすべてのリクエストがタイムアウトします:

$ time curl https://<project-id>.appspot.com/timeout.php 
Got timeout! Cleaning up...
real    1m0.127s
user    0m0.021s
sys     0m0.010s

次に、あなたのコード をコピーし、それapp.yamlphp.ini複製できるかどうかを確認したところ、syslog に次のメッセージが表示されました。

INFO: 1 Sleeping for 10 secs...\n
INFO: 2 Sleeping for 10 secs...\n
INFO: 3 Sleeping for 10 secs...\n
INFO: 4 Sleeping for 10 secs...\n
INFO: 5 Sleeping for 10 secs...\n
INFO: 6 Sleeping for 10 secs...\n
INFO: PHP Fatal error:  The request was aborted because it exceeded the maximum execution time. in /base/data/home/apps/.../timeout2.php on line 9

ただし、リクエストが 30 秒後にタイムアウトになるという問題が引き続き発生する場合は、問題のあるコードをタスク キューに移動することをお勧めします。これが役立つことを願っています!

于 2016-06-07T00:39:48.970 に答える