Symfony2 느린 초기화 시간
Ubuntu Server 12.04 (64 비트) VM (VirtualBox)에서 실행중인 Symfony2가 있습니다. 호스트는 MacBook Pro입니다. 어떤 이유로 개발 모드 (app_dev.php)에서 요청 시간이 정말 길어지고 있습니다. 개발 모드에서 속도가 느리다는 것을 알고 있지만 요청 당 5 ~ 7 초 (때로는 더 느림)를 말합니다. 내 Mac에서는 개발 모드에서 요청 시간이 200ms 정도입니다.
Symfony2 프로파일 러에서 타임 라인을 살펴본 결과 요청 시간의 ~ 95 %가 "초기화 시간"이라는 것을 알았습니다. 이게 뭐야? 그렇게 느릴 수있는 이유는 무엇입니까?
이 문제는 개발 모드의 Symfony2에만 적용되며 VM에서 실행중인 다른 사이트에는 적용되지 않으며 프로덕션 모드의 Symfony2에도 적용되지 않습니다.
나는 이것을 보았지만 (http://stackoverflow.com/questions/11162429/whats-included-in-the-initialization-time-in-the-symfony2-web-profiler) 내 질문에 대답하지 않는 것 같습니다.
기본적으로 Symfony2에서 5-30 초의 응답을 받았습니다. 이제 개발 환경에서 ~ 500ms 입니다.
그런 다음에서 다음을 수정했습니다 php.ini
.
- 세트
realpath_cache_size = 4M
(또는 그 이상) XDebug
완전히 비활성화 됨 (으로 테스트phpinfo
)- realpath_cache_ttl = 7200
- 활성화 및 설정
OPcache
(또는 APC) 올바르게 - php.ini를 다시로드하기 위해 Apache를 다시 시작했습니다.
그리고 voilá, 응답은 개발 모드에서 2 초 미만으로 진행되었습니다! 도움이 되었기를 바랍니다.
이전 : 6779ms
이후 : 1587ms
Symfony2는 수천 개의 파일에서 클래스를 읽으며 이는 느린 프로세스입니다. 작은 PHP realpath 캐시를 사용할 때 파일 경로가 PHP의 realpath 캐시에없는 경우 dev 환경에서 새 요청이있을 때마다 하나씩 확인해야합니다. 실제 경로 캐시는 Symfony2에 대해 기본적으로 너무 작습니다. prod에서 이것은 물론 문제가 아닙니다.
캐시 메타 데이터 :
메타 데이터 (예 : 매핑) 캐싱도 성능 향상을 위해 매우 중요합니다.
doctrine:
orm:
entity_managers:
default:
metadata_cache_driver: apc
query_cache_driver: apc
result_cache_driver: apc
이를 위해 활성화해야합니다 APCu
. 이미 opcode 캐싱 APC
과 마찬가지로 바이트 코드 캐시 가 없습니다 OPCache
. OPCache
PHP 5.5부터 내장되어 있습니다.
---- 이후 : 467ms ----
(프로드 환경에서 동일한 응답은 ~ 80ms입니다)
이 프로젝트는 30 개 이상의 번들을 사용하고 수만 줄의 코드와 거의 100 개의 자체 서비스를 포함하고 있으므로 몇 가지 간단한 최적화를 사용하여 로컬 Windows 환경에서 0.5s는 상당히 좋습니다.
문제의 원인을 파악했습니다 (Symfony2가 아님). 우분투 VM에서 어떤 이유로 특정 파일의 수정 시간이 잘못되었습니다 (예 : 향후 등). symfony2가 레지스트리에 대해 filemtime ()을 사용하여 이러한 시간을 검사 할 때 캐시가 더 이상 새롭지 않다고 판단하고 전체를 다시 빌드합니다. 나는 그것이 왜 그렇게하고 있는지 아직 알 수 없었다.
또한 xdebug (v2.2.21)
내 macbook에서 apache2 max timeout로드를 디버깅 하기 위해 비활성화해야했습니다 . macports를 사용하여 설치되었습니다.
sudo port install php54-xdebug.
xdebug를 사용하면 모든 페이지가 최대로드 시간을 초과하여 전달 된 최대 시간 초과 메시지를 초과하는 치명적인 오류가 발생합니다. 비활성화되면 모든 것이 적절한 예상 시간에 제대로로드됩니다. 나는 MAMP를 사용하고 기본적으로 xdebug가 활성화되지 않았으며 apache2는 평소처럼 빠르게 작동합니다. xdebug가 이전에 잘 작동했기 때문에 다른 디버거로 변경할 수 있습니다.
구성 :
- MacOSX 10.6.8
- 맥 포트 2.1.3
- Apache 2.2.24
- PHP 5.4
우리도 같은 문제가 있습니다. 여기에 모든 요청에 대해 10 초 이상이 있습니다. bootstrap.php.cache에서 다음 줄을 제거하면 항상 정상 상태 (298ms)로 돌아옵니다.
foreach ($meta as $resource) {
if (!$resource->isFresh($time)) {
return false;
}
}
수정 시간이 잘못되었을 수 있지만 수정 방법을 모릅니다. 누군가 해결책을 알고 있습니까?
https://stackoverflow.com/a/12967229/6108843 에서 언급했듯이 이러한 동작의 이유는 Ubuntu VM 설정일 수 있습니다. https://superuser.com/questions/463106/virtualbox-how-to-sync-host-and-guest-time에 설명 된대로 호스트와 게스트 OS간에 날짜와 시간을 동기화해야합니다 .
FTP를 통해 VM에 파일을 업로드하면 파일 수정 날짜가 호스트 값으로 변경됩니다. 그래서 filemtime ()이 잘못된 값을 반환합니다.
APP/var/cache
в 를 이동할 수 있습니다 /dev/shm/YourAppName/var/cache
. 그러나 IDE 자동 완성 및 코드 유효성 검사를 위해 로컬 파일에 컨테이너를 구축하는 것도 좋습니다. 에서 app/AppKernel.php
:
public function getCacheDir()
{
return $this->getVarOrShmDir('cache/' . $this->getEnvironment());
}
public function getLogDir()
{
return $this->getVarOrShmDir('logs');
}
private function getVarOrShmDir($dir)
{
$result = dirname(__DIR__) . '/var/' . $dir;
if (
in_array($this->environment, ['dev', 'test'], true) &&
empty($_GET['warmup']) && // to force using real directory add ?warmup=1 to URL
is_dir($result) && // first time create real directory, later use shm
file_exists('/bin/mount') && shell_exec('mount | grep vboxsf') // only for VirtualBox
) {
$result = '/dev/shm/' . 'YourAppName' . '/' . $dir . '/' . $this->getEnvironment();
}
return $result;
}
xdebug를 비활성화했고 로딩 시간이 17 초 (예 ..)에서 0.5 초로 감소했습니다.
개발 과정에서 느린 페이지로드로 인한 문제도 있었는데, CSS 나 유사한 것을 조정할 때 매우 실망 스러울 수 있습니다.
After a bit of digging I found that for me the problem was caused by Assetic which was recompiling all assets on every page load:
By disabling the use of the Assetic controller I was able to drastically increase my page load. However, as the link above states, this comes at a cost of regenerating your assets whenever you make a change to them (or set a watch on them).
In app_dev, all the caches and auto loading is starting from scratch and what I found to be most slow in dev is the orm. I shy away from using orm and focus mainly on dbal because of it, although i probably shouldn't. Orm is used quite a bit in sf2. My guess is orm is what's slowing you down most in dev. Look at the difference between your dev config and prod config. However, some tweaks to your dev config can make development much snappier and enjoyable.. Just try and be aware of what your doing. for example, turning off the twig controller and then modifying a lot of templates will be kind of frustrating. Your need to keep clearing your cache. But like you mentioned, its dev only and when its time to go live, symfony will speed up for you.
참조 URL : https://stackoverflow.com/questions/12905404/symfony2-slow-initialization-time
'programing' 카테고리의 다른 글
반투명 벤 다이어그램 비례 및 색상 음영 (0) | 2021.01.17 |
---|---|
배열에 문자열이 있는지 확인하는 방법 (0) | 2021.01.17 |
.m2 폴더 또는 settings.xml의 대체 위치를 영구적으로 지정하는 방법은 무엇입니까? (0) | 2021.01.17 |
JavaScript로 CSS 생성 콘텐츠에 액세스하는 방법 (0) | 2021.01.16 |
반복되는 fmap으로 재미 (0) | 2021.01.16 |