Symfony 2 AppCache在负载较重时表现不同

时间:2013-05-17 11:48:30

标签: http caching symfony

我遇到了symfony 2的一个奇怪的问题。我有一个应用程序,它上面有倒数计时器(倒计时小时和天)。

这种分钟计时器在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

我们的Front Controller脚本文件如下:

<?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包装内核这一事实。这样做肯定会对我们网站的性能产生巨大影响,因为当我们关闭它时,负载测试期间负载会非常快速地增加。

0 个答案:

没有答案