4FTTJPO 9$PO
1)1'FTU 
1)11SPGJMJOH 
뺂 
컿쩢 
9QSFTTOHJOF%FWFMPQFS
헎읊콚맪삖삲 
컿쩢 
TVOHCVN!HNBJMDPN 
9QSFTTOHJOF 
9QSFTTOHJOF맪짪훟
맪짪핞픦핊캏
빪뺂 
펊잖빦팚몮핖픒밚
샃픎옪핊잏
옪믆앶픦킪맒쫃핯솒짝뫃맒	젢졶읺

헣졓옇펂핂푷
쿦 
훊믾퐎찖솒슿픒 
핊잏헣쫂쁢샎맪많옪믆앶 
핊잏픎옪핊얺	QSPGJMFS
않쁢솒묺읊칺푷펺옪믆앶콚큲 
핂힒킲핊픒몒
옪믆앶픦 
훊믾퐎찖솒슿픒 
핊잏헣쫂쁢샎맪많 
핊잏픎옪핊얺	 
핂힒킲핊픒몒
엖
멾뫊픦쁢샎 
픦풞핆픊옪쭎
핂 
	푾읺빦않픦몋푾많몒믖픃혾칺
 
힏풞픦많칺핂핃픦읊
엖 
킲찒푷픦쁢샎 
픦
믆엕삲졂푾읺쁢 
훟푢픦 
힟훟핞 
퓶헏핆짷쩣핂푢삲
퓶헏핆짷쩣핂푢삲 
옪핊잏픒핦퍊 
읊
옪핊잏
푾읺쁢쫂 
$start = microtime(); 
// 측정하려는 코드 
$end = microtime(); 
$duration = $end - $start; 
원시적이다. 이러지맙시다. 
$startMem = memory_get_usage(); 
// 측정하려는 코드 
$endMem = memory_get_usage(); 
$memoryUsage = $end - $start;
홎섢큲잖멚쫊밚푢  
픒턶쫓킪삲 
개발자의
 숙명,
 툴
 익히기!!
홎섢큲잖멚쫊밚푢  
9EFCVH9)1SPG 
 
개발자의
 숙명,
 툴
 익히기!!
$BMM(SBQI
9EFCVH 
TJODF 
QIQFYUFOTJPO 
샎헏핆1)1싢쩒밓 
싢쩒밓
 
옪핊잏믾쁳헪뫃 
IUUQYEFCVHPSH 
삲퍟쮾펂많짾쇦몮핖픚 
	8FC(SJOE
,$BDIF(SJOE
8JO$BDIF(SJOE
1)14UPSN슿
9)1SPG 
TJODF 
QIQFYUFOTJPO 
GBDFCPPL펞컪맪짪 
않핂쯚컪쩒펞헏푷펺칺푷쇮졷헏픊옪맪짪 
BHHSFHBUF
EJGG믾쁳헪뫃 
IUUQTHJUIVCDPNQIBDJMJUZYIQSPG
9EFCVHWT9)1SPG 
9EFCVH 9)1SPG 
쁞읺삲 찮읂삲 
킪맒	XBMMUJNF
 
킪맒	XBMMUJNF

젢졶읺
 
DQV킪맒 
쪒솒픦쮾펂푢 쮾펂믾쫆헪뫃
믾쫆핟솧풞읺
IUUQNZTFSWFSDPNJOEFYQIQ 9%#6(@130'*-*/( 
3410/4 
PHP 
Xdebug 
 
컿쁳 
핊옪헎핳
8FC(SJOE쮾펂킲 
3410/4 
WebGrind
9EFCVH컲 
$ pecl install xdebug 
$ vi php.ini 
zend_extension = xdebug.so 
xdebug.profiler_enabled = 0 # 상시 프로파일링 설정 
xdebug.profiler_append = 1 # 측정데이터 누적 설정 
xdebug.profiler_enable_trigger = 1 # XDEBUG_PROFILE 사용설정 
xdebug.profiler_output_dir = /tmp/xdebug # 파일 저장 경로
8FC(SJOE쮾펂컲 
https://code.google.com/p/webgrind/wiki/Installation
9)1SPG컲 
$ pecl install channel://pecl.php.net/xhprof-0.9.4 
$ vi php.ini 
extension = xhprof.so 
xhprof.output_dir = /tmp/xhprof
쮾펂컲헣 
9)1SPG펞뺂핳쇪쮾펂	YIQSPG@IUNM
YIQSPG@MJC
읊퓇펞컪헟믊쿦핖솒옫컲헣
쪒솒픦1)1 
QIQJOJ펞컪BVUP@QSFQFOE@GJMF
BVUP@BQQFOE@GJMF컲헣픒칺푷졂읺 
// header 
if (extension_loaded('xhprof')) { 
include_once 'php/xhprof_lib/utils/xhprof_lib.php'; 
include_once 'php/xhprof_lib/utils/xhprof_runs.php'; 
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY); 
} 
// footer 
if (extension_loaded('xhprof')) { 
$profiler_namespace = 'profiler'; 
$xhprof_data = xhprof_disable(); 
$xhprof_runs = new XHProfRuns_Default(); 
$run_id = 
$xhprof_runs-save_run($xhprof_data,$profiler_namespace); 
} 
9)1SPG컲
%.0
캦 
?PHP 
function test() 
{ 
$obj = new stdClass(); 
$obj-string = 'Hello'; 
repeat($obj); 
for($i=3000; $i1; $i--) { 
$obj-string .= 'Hello'; 
} 
free($obj); 
for($i=3000; $i1; $i--) { 
$obj-string .= 'Hello'; 
} 
echo $obj-string; 
} 
?PHP 
function repeat($obj) 
{ 
$obj-string = str_repeat($obj-string, 15000); 
} 
function free($obj) 
{ 
unset($obj-string); 
}
9EFCVH 
%.0
9)1SPG 
%.0
펺얺많힎
function test() 
{ 
$obj = new stdClass(); 
$obj-string = 'Hello'; 
repeat($obj); 
for($i=3000; $i1; $i--) { 
$obj-string .= 'Hello'; 
} 
free($obj); 
for($i=3000; $i1; $i--) { 
$obj-string .= 'Hello'; 
} 
echo $obj-s; 
} 
$BMMT
function test() 
{ 
$obj = new stdClass(); 
$obj-string = 'Hello'; 
repeat($obj); 
for($i=3000; $i1; $i--) { 
$obj-string .= 'Hello'; 
} 
free($obj); 
for($i=3000; $i1; $i--) { 
$obj-string .= 'Hello'; 
} 
echo $obj-s; 
} 
$start = microtime(); 
*ODMVTJWF8BMM5JNF 
쿦픦홓욚킪맏쿦픦킪핟킪맏 
FOETUBSU 
$end = microtime();
YDMVTJWF8BMM5JNF 
*ODMVTJWF8BMM5JNF 
TVN	핞킫쿦슲픦*ODMVTJWF8BMM5JNF
 
function test() 
{ 
$obj = new stdClass(); 
$obj-string = 'Hello'; 
repeat($obj); 
for($i=3000; $i1; $i--) { 
$obj-string .= 'Hello'; 
} 
free($obj); 
for($i=3000; $i1; $i--) { 
$obj-string .= 'Hello'; 
} 
echo $obj-s; 
}
function test() 
{ 
$obj = new stdClass(); 
$obj-string = 'Hello'; 
repeat($obj); 
for($i=3000; $i1; $i--) { 
$obj-string .= 'Hello'; 
} 
free($obj); 
for($i=3000; $i1; $i--) { 
$obj-string .= 'Hello'; 
} 
echo $obj-s; 
} 
$start = memory_get_usage(); 
*ODMVTJWF.FN6TF 
쿦홓욚킪옪켆큲픦젢졶읺칺푷얗 
 쿦킪핟킪옪켆큲픦젢졶읺칺푷얗 
FOETUBSU 
$end = memory_get_usage(); 
$start 
$end
YDMVTJWF.FN6TF 
*ODMVTJWF.FN6TF 
TVN	핞킫쿦슲픦*ODMVTJWF.FN6TF
 
function test() 
{ 
$obj = new stdClass(); 
$obj-string = 'Hello'; 
repeat($obj); 
for($i=3000; $i1; $i--) { 
$obj-string .= 'Hello'; 
} 
free($obj); 
for($i=3000; $i1; $i--) { 
$obj-string .= 'Hello'; 
} 
echo $obj-s; 
}
*ODMVTJWF1FBL.FN6TF 
쿦홓욚킪옪켆큲픦젢졶읺칺푷얗 
 쿦킪핟킪옪켆큲픦젢졶읺칺푷얗 
FOETUBSU 
function test() 
{ 
$obj = new stdClass(); 
$obj-string = 'Hello'; 
repeat($obj); 
for($i=3000; $i1; $i--) { 
$obj-string .= 'Hello'; 
} 
free($obj); 
for($i=3000; $i1; $i--) { 
$obj-string .= 'Hello'; 
} 
echo $obj-s; 
} 
$start = memory_get_peak_usage(); 
$end = memory_get_peak_usage(); 
$start 
$end
YDMVTJWF1FBL.FN6TF 
*ODMVTJWF1FBL.FN6TF 
TVN	핞킫쿦슲픦*ODMVTJWF1FBL.FN6TF
 
function test() 
{ 
$obj = new stdClass(); 
$obj-string = 'Hello'; 
repeat($obj); 
for($i=3000; $i1; $i--) { 
$obj-string .= 'Hello'; 
} 
free($obj); 
for($i=3000; $i1; $i--) { 
$obj-string .= 'Hello'; 
} 
echo $obj-s; 
} 
$start 
$end
43 
핞켆칺푷쩣픎YIQSPGEPDVNFOU읊
44 
옪핊잏
45 
믆얺빦 
쭒컫픎혾믖펂옃삲
46 
옪핊잏쭒컫칺옎
47 
9뫃킫칺핂옪핊잏섾핂 
찒헣캏헏픊옪잜핂

PHP Profiling