symfony 2 で奇妙な問題が発生しています。カウント ダウン タイマー (時間、分、日をカウント ダウン) を備えたアプリがあります。
この 1 分ごとのタイマーは 90% の確率で完全に機能しますが、負荷が高い場合、タイマーがスタックして変更されません (おそらく、キャッシュされたバージョンを提供していたため)。
負荷テスト スクリプトを使用してエラーを再現することはできませんでした。サイトに多くの実際のユーザーがいる場合にのみ発生するようです。
キャッシュ オプションは次のように設定されています。
class AppCache extends HttpCache
{
protected function getOptions()
{
return array(
'debug' => true,
'default_ttl' => 1 * 60 * 60,
'private_headers' => array('Authorization', 'Cookie'),
'allow_reload' => false,
'allow_revalidate' => false,
'stale_while_revalidate' => 2,
'stale_if_error' => 60,
);
}
}
散発的にキャッシュされている応答には、次のヘッダーがあります。
HTTP/1.1 200 OK
Date: Fri, 17 May 2013 09:36:55 GMT
Server: Apache/2.2.16 (Debian)
X-Powered-By: PHP/5.3.3-7+squeeze15
P3P: CP="CURa CUR NID ADM ADMa DEV DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"
Cache-Control: private
X-Symfony-Cache: GET /my-app/show: miss
Vary: Accept-Encoding
Content-Encoding: gzip
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
フロント コントローラーのスクリプト ファイルは次のとおりです。
<?php header('P3P: CP="CURa CUR NID ADM ADMa DEV DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\ClassLoader\ApcClassLoader;
$loader = require_once __DIR__.'/app/bootstrap.php.cache';
require_once __DIR__.'/app/AppKernel.php';
require_once __DIR__.'/app/AppCache.php';
$loader = new ApcClassLoader('sf2', $loader);
$loader->register(true);
$kernel = new AppKernel('prod', false);
$kernel->loadClassCache();
$kernel = new AppCache($kernel);
Request::enableHttpMethodParameterOverride();
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);
このアクションでは明示的に http キャッシュを設定していません。また、カーネルをラップするために AppCache を使用しているという事実を除けば、何かをキャッシュするように設定していません。これを行うと、サイトのパフォーマンスに大きな違いが生じることは間違いありません。これを外すと、負荷テスト中に負荷が非常に急速に上昇するからです。