2014-03-31 2 views
0

지난 주에 CentOS 서버를 다른 컴퓨터로 마이그레이션했습니다.
VDS 서버 하드웨어는 매우 유사합니다. 새 컴퓨터에서 서버 동작을 복제하기 위해 최선을 다했습니다.
CakePHP 2.4.4, PHP 5.4.26. 나는 아파치 모듈로 PHP를 제공한다. XCache 3.1.0.CakePHP FileEngine :: clear는 매우 많은 CPU 시간을 필요로합니다.

(하지만 특정 시간대에 CPU 시간이 너무 많이 걸리는 것처럼 보입니다.)
예를 들어 모든 것이 10 분 동안 작동하지만 2 분 동안 CPU가 100 %가되면 % 5가되고 4-5 분 후에 CPU를 다시 100 %)

그것은 내 CakePHP의 응용 프로그램

FileEngine::clear() 

너무 많은 시간처럼 보인다 얻을. FileEngine::clear에 시간이 너무 많이 걸리는 이유를 진단/디버깅하려면 어떻게해야합니까?
이미지 1 : http://s29.postimg.org/qfj26aq8n/shot1.jpg
이미지 2 : 이미지에서 코드 실행 시간을 확인할 수 있습니다

Warning: Warning (2): is_dir(): open_basedir restriction in effect. File(/) is not within the allowed path(s): (/var/www/vhosts/example.com/:/tmp/:/usr/share/fonts/) in [/var/www/vhosts/example.com/httpdocs/lib/Cake/Cache/Engine/FileEngine.php, line 265] 
Trace: 
is_dir - [internal], line ?? 
FileEngine::_clearDirectory() - CORE/Cake/Cache/Engine/FileEngine.php, line 265 
FileEngine::clear() - CORE/Cake/Cache/Engine/FileEngine.php, line 247 
FileEngine::gc() - CORE/Cake/Cache/Engine/FileEngine.php, line 100 
Cache::_buildEngine() - CORE/Cake/Cache/Cache.php, line 184 
Cache::config() - CORE/Cake/Cache/Cache.php, line 151 
include - APP/Config/bootstrap.php, line 101 
Configure::bootstrap() - CORE/Cake/Core/Configure.php, line 92 
include - CORE/Cake/bootstrap.php, line 175 
[main] - APP/webroot/index.php, line 93 

: http://s9.postimg.org/uzwh1a5i7/shot2.jpg

또한 내하는 error.log 파일에 나는 이러한 오류를 얻을 수 있습니다 Apache 설정에서 open_basedir(p) 설정은 다음과 같습니다.

{WEBSPACEROOT}{/}{:}{TMP}{/}:/usr/share/fonts/ 

편집 :
타임 스탬프는 FileEngine::clearFileEngine::_clearDirectory에 기록됩니다. 그러나 이상한시기는 존재하지 않는다. 가장 느린 통화에는 0.3 초가 걸립니다. 평균은 0.01 초입니다. 하지만 FileEngine::clear() 전화 시간을 확인하면 피크 시간대에 90-95 초가 걸립니다.

+0

디버그가 0으로 설정되면 어떻게됩니까? 어쩌면 어리석은 질문 일 수도 있지만 아마도 문제를 디버깅하는 데 도움이 될 것입니다 :) – Jelmer

+0

내 디버그가 core.php에서 0입니다. Configure :: write ('debug', 0); ' – trante

+1

흠, 타임 스탬프를 케이크 FileEngine? 어떤 선이 충돌하고 있는지 확인하기 만하면됩니까? 그리고 얼마나 많은 파일이 캐시에 있습니까? 어쩌면 많은 파일이있을 수 있습니까? 나는 짐작할 필요는 없지만 문제가 될 수 있겠는가? – Jelmer

답변

0

며칠 후 해결책을 찾았습니다. 문제는 다음과 같이이다 : 이러한 폴더의

/app/tmp/cache/mydata1/ 
/app/tmp/cache/mydata2/ 
/app/tmp/cache/mydata3/ 

각각 10K-15K 파일이 :

폴더 /app/tmp/cache/에서이 같은 일부 폴더가 있습니다. 그래서 분당/시간에 가비지 수집이 실행되고 FileEngine::clear()이 실행되고 이러한 폴더를 확인합니다. 이러한 폴더를 확인하는 데 너무 많은 CPU 시간이 필요합니다.

내부 응용 프로그램/구성은/bootstrap.php 같은 캐시 설정이 존재한다 :

Cache::config('default', array('engine' => 'File')); 

제로로 확률을 변경하여 가비지 콜렉션을 사용하지 않으려면 다음을 타격의

Cache::config('default', array('engine' => 'File', 'probability' => 0)); 

확률 확률을 캐시 GC 정리. 0 으로 설정하면 cache :: gc가 자동으로 호출되지 않습니다.

Cache::config('30secs', array(
    'engine' => "File", 
    'duration' => '+30 seconds', 
    'path' => CACHE, 
    'prefix' => 'cake_element_30secs_' 
)); 

그런 다음 CakePHP를 30 초마다에 임시 폴더를 확인합니다 :

http://api.cakephp.org/2.4/class-Cache.html#_config

예를 들어이 같은 또 다른 캐시 구성했다. 따라서 불필요한 캐시 파일을 삭제할 수 있습니다. 확률을 0으로 변경하여 가비지 콜렉션을 사용 불가능하게 할 수도 있습니다.

/app/tmp/cache/ 폴더에 파일이 너무 많으면 데이터를 다른 폴더로 옮겨서 CPU를 낭비하지 말아야한다는 것이 좋습니다.

관련 문제