我运行的网站缓慢但肯定会耗尽Apache中的所有可用内存。不知道它发生了多长时间 - 如果达到内存限制,服务器设置为自动重启,并且sysadmin设置了Apache以便线程被回收(我忘记了这里的具体细节......基本上当内存全部用完时,它会停止服务器死机。)
一些技术规格:
我设法找到了什么:
学说可能是罪魁祸首,但我并非百分百肯定。 Doctrine是通过引导程序中的_initDoctrine方法运行的。我正在使用的一些位如下:
$config = new Configuration;
$arrayCache = new ArrayCache;
$cache = new Doctrine\Common\Cache\MemcacheCache;
$memcache = new Memcache;
$memcache->connect('localhost', 11211);
$cache->setMemcache($memcache);
$cache->setNamespace("PDC_");
\Zend_Registry::set("pdc_memcache", $cache);
//$query->setResultCacheDriver($cache);
$config->setMetadataCacheImpl($arrayCache);
$config->setQueryCacheImpl($arrayCache);
// Metadata Driver
$driverImpl = $config->newDefaultAnnotationDriver(array(APPLICATION_PATH.'/Db/Entities'));
$config->setMetadataDriverImpl($driverImpl);
// Proxy configuration
$config->setProxyDir(APPLICATION_PATH.'/Db/Proxies');
$config->setProxyNamespace('Dpp\Proxies');
//if (APPLICATION_ENV == "development") {
$config->setAutoGenerateProxyClasses(true);
这不是完整的代码 - 我试图包含我认为可能有用的部分。
任何想法都会非常感谢...谢谢。
答案 0 :(得分:1)
如果需要,带有mod_php的Apache将遵守'MaxRequestsPerChild' directive。这可以在(例如)10,000个请求之后重新启动Apache / mod_php进程以清除任何内存泄漏。在此之后,您可以开始调查问题的确切位置,从而解决问题。像使用memory_get_usage()这样简单的东西可能对此有用,或者使用Xdebug / XHprof进行更广泛的内存分析。