ì í늬ìŒìŽì ì ì±ë¥ ë³ëª© íìì ìë³íê³ íŽê²°íêž° ìí íµê³ì ìœë íë¡íìŒë§ êž°ë² íì© ê°ìŽë. ë€ìí íë¡ê·žëë° ìžìŽ ë° íë«íŒìì íë¡íìŒ ëªšëì íšê³Œì ìŒë¡ ì¬ì©íë ë°©ë²ì ë°°ì°ìžì.
íë¡íìŒ ëªšë: ìµì íë ì±ë¥ì ìí íµê³ì ìœë íë¡íìŒë§ ë§ì€í°íêž°
ìíížìšìŽ ê°ë° ë¶ìŒìì ì±ë¥ì ê°ì¥ ì€ìí©ëë€. ì¬ì©ìë€ì ì í늬ìŒìŽì ìŽ ë°ìì±ìŽ ì¢ê³ íšìšì ìŽêž°ë¥Œ êž°ëí©ëë€. íì§ë§ ìœëê° ìµìì ìíë¡ ì€íëëë¡ íë €ë©Ž ìŽë»ê² íŽìŒ í ê¹ì? ê·ž íŽëµì ë°ë¡ ìœë íë¡íìŒë§, í¹í íµê³ì ìœë íë¡íìŒë§ì ììµëë€. ìŽ ë°©ë²ì ê°ë°ìê° ì±ë¥ ë³ëª© íìì ìë³íê³ ìµë íšìšì ìíŽ ìœë륌 ìµì íí ì ìëë¡ í©ëë€. ìŽ ëžë¡ê·ž ê²ì묌ì íµê³ì ìœë íë¡íìŒë§ì ìŽíŽíê³ íì©íêž° ìí í¬êŽì ìž ê°ìŽë륌 ì ê³µíì¬, ì í늬ìŒìŽì ìŽ ê³ ì±ë¥ìŽë©° íì¥ ê°ë¥íëë¡ ë³Žì¥í©ëë€.
íµê³ì ìœë íë¡íìŒë§ìŽë?
íµê³ì ìœë íë¡íìŒë§ì ìŒì í ê°ê²©ìŒë¡ íë¡ê·žëš 칎ìŽí°(PC)륌 ìíë§íì¬ íë¡ê·žëš ì€íì ëí ì 볎륌 ìì§íë ëì íë¡ê·žëš ë¶ì êž°ë²ì ëë€. íšì ëë ìœë ëžë¡ìŽ ìí ë°ìŽí°ì ëíëë ë¹ëë íŽë¹ ìœë륌 ì€ííë ë° ììë ìê°ì ë¹ë¡í©ëë€. ìŽë íë¡ê·žëšìŽ ìê°ì ìŽëì ìë¹íëì§ì ëí íµê³ì ìŒë¡ ì ì믞í ííì ì ê³µíì¬, ê°ë°ìê° ì¹šìµì ìž ê³ìž¡ ììŽë ì±ë¥ í«ì€íì ì íí ì°ŸìëŒ ì ìëë¡ í©ëë€.
몚ë íšì ížì¶ ë° ë°íì ê³ìž¡íë ê²°ì ë¡ ì íë¡íìŒë§ê³Œ ë¬ëЬ, íµê³ì íë¡íìŒë§ì ìíë§ì ì졎íë¯ë¡ 칚ìµì±ìŽ ì ê³ ì€ë²í€ëê° ìµìíë íë¡ëì ìì€í íë¡íìŒë§ì ì í©í©ëë€. ìŽë ê³ ë¹ë ê±°ë íë«íŒìŽë ì€ìê° ë°ìŽí° ì²ëЬ ìì€í 곌 ê°ìŽ ì±ë¥ 몚ëí°ë§ìŽ íìì ìž í겜ìì í¹í ì€ìí©ëë€.
íµê³ì ìœë íë¡íìŒë§ì 죌ì ì¥ì :
- ë®ì ì€ë²í€ë: ê²°ì ë¡ ì íë¡íìŒë§ì ë¹íŽ ì í늬ìŒìŽì ì±ë¥ì 믞ì¹ë ìí¥ìŽ ìµìíë©ëë€.
- ì€ì ìëëŠ¬ì€ ì ì© ê°ë¥: íë¡ëì í겜 íë¡íìŒë§ì ì í©í©ëë€.
- ì¬ì© ì©ìŽì±: ë§ì íë¡íìŒë§ ëêµ¬ê° êž°ì¡Ž ìœëë² ìŽì€ì ê°ëšíê² íµí©ë©ëë€.
- ì¢ í©ì ìž êŽì : CPU ì¬ì©ë, ë©ëªšëЬ í ë¹ ë° I/O ìì ì ê°ì¡°íì¬ ì í늬ìŒìŽì ì±ë¥ì ëí êŽë²ìí ê°ì륌 ì ê³µí©ëë€.
íµê³ì ìœë íë¡íìŒë§ ìë ë°©ì
íµê³ì íë¡íìŒë§ì íµì¬ ì늬ë íë¡ê·žëš ì€íì 죌Ʞì ìŒë¡ ì€ëšíê³ íì¬ ì€í ì€ìž ëª ë ¹ì êž°ë¡íë ê²ì ëë€. ìŽ ê³Œì ì ì¬ë¬ ë² ë°ë³µëìŽ ë€ìí ìœë ì¹ì ì ê±žì³ ì€í ìê°ì íµê³ì ë¶í¬ë¥Œ ìì±í©ëë€. í¹ì ìœë ì¹ì ìŽ ì€íì ë ë§ì ìê°ì í ì í ìë¡ íë¡íìŒë§ ë°ìŽí°ì ë ì죌 ëíë©ëë€.
ë€ìì ìŒë°ì ìž ìí¬íë¡ì° ë¶ìì ëë€.
- ìíë§: íë¡íìŒë¬ë ì êž°ì ìž ê°ê²©(ì: ë§€ ë°ëЬìŽ)ìŒë¡ íë¡ê·žëš 칎ìŽí°(PC)륌 ìíë§í©ëë€.
- ë°ìŽí° ìì§: íë¡íìŒë¬ë ìíë§ë PC ê°ê³Œ íì¬ íšì ížì¶ ì€í곌 ê°ì êž°í êŽë š ì 볎륌 êž°ë¡í©ëë€.
- ë°ìŽí° ì§ê³: íë¡íìŒë¬ë ìì§ë ë°ìŽí°ë¥Œ ì§ê³íì¬ ê° íšì ëë ìœë ëžë¡ìì ììë ìê°ì ë°±ë¶ìšì 볎ì¬ì£Œë íë¡íìŒì ìì±í©ëë€.
- ë¶ì: ê°ë°ìë íë¡íìŒ ë°ìŽí°ë¥Œ ë¶ìíì¬ ì±ë¥ ë³ëª© íìì ìë³íê³ ìœë륌 ìµì íí©ëë€.
ìíë§ ê°ê²©ì ì€ìí ë§€ê°ë³ìì ëë€. ê°ê²©ìŽ ì§§ììë¡ ë ì íí 결곌륌 ì ê³µíì§ë§ ì€ë²í€ëê° ìŠê°í©ëë€. ê°ê²©ìŽ êžžë©Ž ì€ë²í€ëê° ì€ìŽë€ì§ë§ ëšêž°ì ìž ì±ë¥ ë³ëª© íìì ëì¹ ì ììµëë€. íšê³Œì ìž íë¡íìŒë§ì ìíŽìë ì¬ë°ë¥ž ê· íì ì°Ÿë ê²ìŽ íìì ì ëë€.
ìžêž° ìë íë¡íìŒë§ ë구 ë° ëªšë
ë€ìí íë¡ê·žëë° ìžìŽìì ì¬ë¬ ê°ë ¥í íë¡íìŒë§ ë구 ë° ëªšëì ì¬ì©í ì ììµëë€. ë€ìì ê°ì¥ ìžêž° ìë ëª ê°ì§ ìµì ì ëë€.
Python: cProfile ë° profile
Pythonì ë ê°ì§ ëŽì¥ íë¡íìŒë§ 몚ëìž cProfile
곌 profile
ì ì ê³µí©ëë€. cProfile
ì Cë¡ êµ¬íëììŒë©° ìì Python profile
몚ëì ë¹íŽ ì€ë²í€ëê° ë ë®ìµëë€. ë 몚ë 몚ë Python ìœë륌 íë¡íìŒë§íê³ ììží ì±ë¥ ë³Žê³ ì륌 ìì±í ì ìëë¡ í©ëë€.
cProfile ì¬ì© ìì:
import cProfile
import pstats
def my_function():
# Code to be profiled
sum_result = sum(range(1000000))
return sum_result
filename = "profile_output.prof"
# Profile the function and save the results to a file
cProfile.run('my_function()', filename)
# Analyze the profiling results
p = pstats.Stats(filename)
p.sort_stats('cumulative').print_stats(10) # Show top 10 functions
ìŽ ì€í¬ëŠœížë my_function()
ì íë¡íìŒë§íê³ ê²°ê³Œë¥Œ profile_output.prof
ì ì ì¥í©ëë€. ê·žë° ë€ì pstats
몚ëì íë¡íìŒë§ ë°ìŽí°ë¥Œ ë¶ìíê³ ëì ìê°ì êž°ì€ìŒë¡ ìì 10ê° íšì륌 ì¶ë ¥íë ë° ì¬ì©ë©ëë€.
Java: Java VisualVM ë° YourKit Java Profiler
Javaë Java VisualVM (JDKì í¬íš) ë° YourKit Java Profiler륌 í¬íší ë€ìí íë¡íìŒë§ ë구륌 ì ê³µí©ëë€. ìŽ ë구ë€ì CPU íë¡íìŒë§, ë©ëªšëЬ íë¡íìŒë§, ì€ë ë ë¶ìì í¬íší í¬êŽì ìž ì±ë¥ ë¶ì êž°ë¥ì ì ê³µí©ëë€.
Java VisualVM: CPU ì¬ì©ë, ë©ëªšëЬ í ë¹, ì€ë ë íë ë± ì€í ì€ìž Java ì í늬ìŒìŽì ì ëí ììží ì 볎륌 ì ê³µíë ìê°ì ë구ì ëë€. ì±ë¥ ë³ëª© íì곌 ë©ëªšëЬ ëì륌 ìë³íë ë° ì¬ì©ë ì ììµëë€.
YourKit Java Profiler: CPU ìíë§, ë©ëªšëЬ í ë¹ ë¶ì, ë°ìŽí°ë² ìŽì€ 쿌늬 íë¡íìŒë§ê³Œ ê°ì ê³ êž êž°ë¥ì ì ê³µíë ìì ì© íë¡íìŒë¬ì ëë€. ê°ë°ìê° Java ì í늬ìŒìŽì ì±ë¥ì ìŽíŽíê³ ìµì ííë ë° ëììŽ ëë íë¶í ìê°í ë° ë³Žê³ ì륌 ì ê³µí©ëë€. YourKitì ë³µì¡í ë€ì€ ì€ë ë ì í늬ìŒìŽì ì ëí íµì°°ë ¥ì ì ê³µíë ë° íìí©ëë€.
C++: gprof ë° Valgrind
C++ ê°ë°ìë gprof
(GNU íë¡íìŒë¬) ë° Valgrindì ê°ì ë구ì ì¡ìžì€í ì ììµëë€. gprof
ë íµê³ì ìíë§ì ì¬ì©íì¬ C++ ìœë륌 íë¡íìŒë§íë©°, Valgrindë ìºì íë¡íìŒë§ì ìí Cachegrindì ížì¶ ê·žëí ë¶ìì ìí Callgrind륌 í¬íší ë©ëªšëЬ ëë²ê¹
ë° íë¡íìŒë§ ë구 몚ìì ì ê³µí©ëë€.
gprof ì¬ì© ìì:
-pg
íë귞륌 ì¬ì©íì¬ C++ ìœë륌 컎íìŒí©ëë€:g++ -pg my_program.cpp -o my_program
- 컎íìŒë íë¡ê·žëšì ì€íí©ëë€:
./my_program
- íë¡íìŒë§ ë°ìŽí°ë¥Œ ìì±í©ëë€:
gprof my_program gmon.out > profile.txt
profile.txt
ìì íë¡íìŒë§ ë°ìŽí°ë¥Œ ë¶ìí©ëë€.
JavaScript: Chrome DevTools ë° Node.js Profiler
JavaScript ê°ë°ìë Chrome DevTools ë° Node.js íë¡íìŒë¬ì ëŽì¥ë ê°ë ¥í íë¡íìŒë§ ë구륌 íì©í ì ììµëë€. Chrome DevTools륌 ì¬ì©í멎 ëžëŒì°ì ìì ì€íëë JavaScript ìœë륌 íë¡íìŒë§í ì ììŒë©°, Node.js íë¡íìŒë¬ë ìë² ìž¡ JavaScript ìœë륌 íë¡íìŒë§íë ë° ì¬ì©ë ì ììµëë€.
Chrome DevTools: JavaScript ìœë ì€íì êž°ë¡íê³ ë¶ìí ì ìë ì±ë¥ íšëì ì ê³µí©ëë€. CPU ì¬ì©ë, ë©ëªšëЬ í ë¹, ê°ë¹ì§ 컬ë ì ì ëí ììží ì 볎륌 ì ê³µíì¬ ê°ë°ìê° ì¹ ì í늬ìŒìŽì ì ì±ë¥ ë³ëª© íìì ìë³íë ë° ëìì ì€ëë€. íë ì ë ëë§ ìê°ì ë¶ìíê³ ì€ë ì€íëë JavaScript ìì ì ìë³íë ê²ìŽ ì£Œì ì¬ì© ì¬ë¡ì ëë€.
Node.js Profiler: Node.js íë¡íìŒë¬ë v8-profiler
ì ê°ì ë구ì íšê» ì¬ì©íì¬ CPU íë¡íìŒ ë° í ì€ë
ì·ì ìì±í ì ììµëë€. ìŽ íë¡íìŒì Chrome DevTools ëë ë€ë¥ž íë¡íìŒë§ ë구륌 ì¬ì©íì¬ ë¶ìí ì ììµëë€.
íšê³Œì ìž íµê³ì ìœë íë¡íìŒë§ì ìí ëªšë² ì¬ë¡
íµê³ì ìœë íë¡íìŒë§ì ìµëí íì©íë €ë©Ž ë€ì ëªšë² ì¬ë¡ë¥Œ ë°ë¥Žììì€.
- ì€ì ìì ë¶í íë¡íìŒë§: ìŒë°ì ìž ì í늬ìŒìŽì ì¬ì©ì ëíëŽë ì€ì ìì ë¶í ë° ë°ìŽí° ìžížë¥Œ ì¬ì©íììì€.
- íë¡ëì 곌 ì ì¬í í겜ìì íë¡íìŒ ì€í: ì íí ì±ë¥ ë°ìŽí°ë¥Œ 캡ì²íêž° ìíŽ íë¡íìŒë§ íê²œìŽ íë¡ëì í겜곌 ë°ì íê² ì ì¬íëë¡ íììì€.
- í«ì€íì ì§ì€: ê°ì¥ ë§ì ìê°ì ìë¹íë íšì ëë ìœë ëžë¡ì ìë³íê³ ê·žì ë°ëŒ ìµì í ë žë ¥ì ì°ì ììë¡ ì§ì íììì€.
- ë°ë³µ ë° ìž¡ì : ìœë ë³ê²œ í, ë³ê²œ ì¬íì ìí¥ì ìž¡ì íê³ ìíë íšê³Œê° ìëì§ íìžíêž° ìíŽ ì í늬ìŒìŽì ì ë€ì íë¡íìŒë§íììì€.
- ë€ë¥ž ë구ì íë¡íìŒë§ ê²°í©: ë©ëªšëЬ ëì ê°ì§êž° ë° ì ì ìœë ë¶ìêž°ì ê°ì ë€ë¥ž ì±ë¥ ë¶ì ë구ì íšê» íë¡íìŒë§ì ì¬ì©íì¬ ì±ë¥ ìµì íì ëí í¬êŽì ìž ì ê·Œ ë°©ìì ì·šíììì€.
- íë¡íìŒë§ ìëí: ì±ë¥ ì í륌 ìëìŒë¡ ê°ì§íêž° ìíŽ ì§ìì ìž íµí©(CI) íìŽíëŒìžì íë¡íìŒë§ì íµí©íììì€.
- íë¡íìŒë§ ì€ë²í€ë ìŽíŽ: íë¡íìŒë§ìŽ ê²°ê³Œì ì íëì ìí¥ì ë¯žì¹ ì ìë ìœê°ì ì€ë²í€ë륌 ì ë°íë€ë ì ì ìžì§íììì€. í¹í íë¡ëì ìì€í ì íë¡íìŒë§í ëë ì€ë²í€ëê° ìµìíë íë¡íìŒë§ ë구륌 ì ííììì€.
- ì êž°ì ìŒë¡ íë¡íìŒë§: ì±ë¥ 묞ì 륌 ì¬ì ì ìë³íê³ íŽê²°íêž° ìíŽ íë¡íìŒë§ì ê°ë° íë¡ìžì€ì ì êž°ì ìž ë¶ë¶ìŒë¡ ë§ëììì€.
íë¡íìŒë§ 결곌 íŽìíêž°
ì±ë¥ ë³ëª© íìì ìë³íêž° ìíŽìë íë¡íìŒë§ ë구ì ì¶ë ¥ì ìŽíŽíë ê²ìŽ ì€ìí©ëë€. ë€ìì ëª ê°ì§ ìŒë°ì ìž ì§íì ê·ž íŽì ë°©ë²ì ëë€.
- ìŽ ìê° (Total Time): íšì ëë ìœë ëžë¡ì ì€ííë ë° ììë ìŽ ìê°.
- ëì ìê° (Cumulative Time): íšì ë° ëªšë íì íšì륌 ì€ííë ë° ììë ìŽ ìê°.
- ìêž° ìê° (Self Time): íšì ì첎륌 ì€ííë ë° ììë ìê°ìŒë¡, íì íšììì ììë ìê°ì ì ìží©ëë€.
- ížì¶ íì (Call Count): íšìê° ížì¶ë íì.
- ížì¶ë¹ ìê° (Time per Call): íšìê° ížì¶ë¹ ì€íëë íê· ìê°.
íë¡íìŒë§ 결곌륌 ë¶ìí ëë ìŽ ìê°ìŽ êžžê±°ë ížì¶ íìê° ë§ì íšìì ì§ì€íììì€. ìŽë¬í íšìë€ì ìµì í ëììŽ ë ê°ë¥ì±ìŽ ê°ì¥ ëìµëë€. ëí, ëì ìê°ì êžžì§ë§ ìêž° ìê°ìŽ ì§§ì íšììë 죌ìíììì€. ìŽë íì íšììì ì±ë¥ 묞ì ê° ë°ìíê³ ììì ëíëŒ ì ììµëë€.
íŽì ìì:
íë¡íìŒë§ ë³Žê³ ìì íšì process_data()
ì ìŽ ìê°ê³Œ ížì¶ íìê° ëê² ëíë¬ë€ê³ ê°ì íŽ ëŽ
ìë€. ìŽë process_data()
ê° ì±ë¥ ë³ëª© íììì ìì¬í©ëë€. ì¶ê° ì¡°ì¬ë¥Œ íµíŽ process_data()
ê° ëê·ëªš ë°ìŽí° ìžížë¥Œ ë°ë³µíë ë° ë§ì ìê°ì ìë¹íê³ ììì ë°íëŒ ì ììµëë€. ë°ë³µ ìê³ ëŠ¬ìŠì ìµì ííê±°ë ë íšìšì ìž ë°ìŽí° 구조륌 ì¬ì©í멎 ì±ë¥ì í¥ììí¬ ì ììµëë€.
ì¬ë¡ ì°êµ¬ ë° ìì
íµê³ì ìœë íë¡íìŒë§ìŽ ì í늬ìŒìŽì ì±ë¥ í¥ìì ëììŽ ë ëª ê°ì§ ì€ì ì¬ë¡ ì°êµ¬ë¥Œ ìŽíŽë³Žê² ìµëë€.
ì¬ë¡ ì°êµ¬ 1: ì¹ ìë² ìµì í
í ì¹ ìë²ìì ëì CPU ì¬ì©ë곌 ë늰 ìëµ ìê°ìŽ ë°ìíê³ ìììµëë€. íµê³ì ìœë íë¡íìŒë§ 결곌, ë€ìŽì€ë ìì²ì ì²ëЬíë í¹ì íšìê° ìë¹í CPU ìê°ì ìë¹íê³ ììì ë°íëìµëë€. ì¶ê° ë¶ìì íµíŽ íŽë¹ íšìê° ë¹íšìšì ìž ë¬žììŽ ì¡°ìì ìííê³ ììì íìžíìµëë€. 묞ììŽ ì¡°ì ìœë륌 ìµì ííšìŒë¡ìš ê°ë°ìë€ì CPU ì¬ì©ëì 50% ì€ìŽê³ ìëµ ìê°ì 30% í¥ììí¬ ì ìììµëë€.
ì¬ë¡ ì°êµ¬ 2: ë°ìŽí°ë² ìŽì€ 쿌늬 ì±ë¥ í¥ì
í ì ììê±°ë ì í늬ìŒìŽì ìì ë늰 ë°ìŽí°ë² ìŽì€ 쿌늬 ì±ë¥ìŽ ë°ìíê³ ìììµëë€. ì í늬ìŒìŽì íë¡íìŒë§ 결곌, í¹ì ë°ìŽí°ë² ìŽì€ ì¿ŒëŠ¬ê° ì€ííë ë° ì€ë ìê°ìŽ ê±žëŠ¬ê³ ììì íìžíìµëë€. 쿌늬 ì€í ê³íì ë¶ìíšìŒë¡ìš ê°ë°ìë€ì ëëœë ìžë±ì€ì ë¹íšìšì ìž ì¿ŒëŠ¬ 구묞ì ìë³íìµëë€. ì ì í ìžë±ì€ë¥Œ ì¶ê°íê³ ì¿ŒëŠ¬ 구묞ì ìµì ííšìŒë¡ìš ë°ìŽí°ë² ìŽì€ 쿌늬 ìê°ì 75% ëšì¶íìµëë€.
ì¬ë¡ ì°êµ¬ 3: ëšžì ë¬ë ëªšëž íìµ í¥ì
ëšžì ë¬ë ëªšëž íìµì 곌ëí ìê°ìŽ ììëê³ ìììµëë€. íìµ íë¡ìžì€ íë¡íìŒë§ 결곌, í¹ì íë ¬ ê³±ì ì°ì°ìŽ ì±ë¥ ë³ëª© íììì ë°íëìµëë€. ìµì íë ì í ëì ëŒìŽëžë¬ëŠ¬ë¥Œ ì¬ì©íê³ íë ¬ ê³±ì ì ë³ë ¬ííšìŒë¡ìš ê°ë°ìë€ì íìµ ìê°ì 80% ëšì¶í ì ìììµëë€.
ìì: Python ë°ìŽí° ì²ëЬ ì€í¬ëŠœíž íë¡íìŒë§
ëê·ëªš CSV íìŒì ì²ëЬíë Python ì€í¬ëŠœížê° ìë€ê³ ê°ì íŽ ëŽ
ìë€. ì€í¬ëŠœížê° ëëŠ¬ê³ ì±ë¥ ë³ëª© íìì ìë³íê³ ì¶ìµëë€. cProfile
ì ì¬ì©íì¬ ì€í¬ëŠœížë¥Œ íë¡íìŒë§íê³ ê²°ê³Œë¥Œ ë¶ìí ì ììµëë€.
import cProfile
import pstats
import csv
def process_csv(filename):
with open(filename, 'r') as csvfile:
reader = csv.reader(csvfile)
data = list(reader) # Load all data into memory
# Perform some data processing operations
results = []
for row in data:
# Example operation: convert each element to float and square it
processed_row = [float(x)**2 for x in row]
results.append(processed_row)
return results
filename = "large_data.csv"
# Profile the function
cProfile.run(f'process_csv("{filename}")', 'profile_results')
# Analyze the profiling results
p = pstats.Stats('profile_results')
p.sort_stats('cumulative').print_stats(20) # Show top 20 functions
íë¡íìŒë§ 결곌ë ì 첎 CSV íìŒì ë©ëªšëЬì ë¡ëíë ê²(data = list(reader)
)ìŽ ì€ìí ë³ëª© íììì ëíëŒ ì ììµëë€. ê·žë° ë€ì CSV íìŒì ì²í¬ë¡ ì²ëЬíê±°ë ë ë©ëªšëЬ íšìšì ìž ë°ìŽí° 구조륌 ì¬ì©íì¬ ì€í¬ëŠœížë¥Œ ìµì íí ì ììµëë€.
ê³ êž íë¡íìŒë§ êž°ì
Ʞ볞ì ìž íµê³ì íë¡íìŒë§ ìžìë, ì í늬ìŒìŽì ì±ë¥ì ëí ë ê¹ì íµì°°ë ¥ì ì ê³µí ì ìë ëª ê°ì§ ê³ êž êž°ì ìŽ ììµëë€.
- íë ì ê·žëí (Flame Graphs): ížì¶ ì€í곌 ê° íšììì ììë ìê°ì 볎ì¬ì£Œë íë¡íìŒë§ ë°ìŽí°ì ìê°ì ííì ëë€. íë ì ê·žëíë ë³µì¡í ížì¶ ê³ìžµìì ì±ë¥ ë³ëª© íìì ìë³íë ë° íìí©ëë€.
- ë©ëªšëЬ íë¡íìŒë§ (Memory Profiling): ë©ëªšëЬ í ë¹ ë° í ë¹ íŽì 륌 ì¶ì íì¬ ë©ëªšëЬ ëìì 곌ëí ë©ëªšëЬ ì¬ì©ëì ìë³í©ëë€.
- ì€ë ë íë¡íìŒë§ (Thread Profiling): ì€ë ë íëì ë¶ìíì¬ êµì°© ìí ë° ê²œì 조걎곌 ê°ì ëìì± ë¬žì 륌 ìë³í©ëë€.
- ìŽë²€íž íë¡íìŒë§ (Event Profiling): I/O ìì ëë ë€ížìí¬ ìì²ê³Œ ê°ì í¹ì ìŽë²€ížë¥Œ íë¡íìŒë§íì¬ ì í늬ìŒìŽì ì±ë¥ì 믞ì¹ë ìí¥ì ìŽíŽí©ëë€.
- ì격 íë¡íìŒë§ (Remote Profiling): ì격 ìë² ëë ìë² ëë ì¥ì¹ìì ì€íëë ì í늬ìŒìŽì ì íë¡íìŒë§í©ëë€.
ìœë íë¡íìŒë§ì 믞ë
ìœë íë¡íìŒë§ì íë¡íìŒë§ êž°ì 곌 ë구 ê°ì ì ì€ì ì ë ì§ìì ìž ì°êµ¬ ë° ê°ë° ë žë ¥ê³Œ íšê» ì§ííë ë¶ìŒì ëë€. ìœë íë¡íìŒë§ì 죌ì ížë ëë ë€ì곌 ê°ìµëë€.
- ëšžì ë¬ë곌ì íµí©: ëšžì ë¬ëì ì¬ì©íì¬ ì±ë¥ ë³ëª© íìì ìëìŒë¡ ìë³íê³ ìµì í ì ëµì ì ìí©ëë€.
- íŽëŒì°ë êž°ë° íë¡íìŒë§: íŽëŒì°ë ë€ìŽí°ëž íë¡íìŒë§ ë구 ë° ìë¹ì€ë¥Œ ì¬ì©íì¬ íŽëŒì°ëìì ì€íëë ì í늬ìŒìŽì ì íë¡íìŒë§í©ëë€.
- ì€ìê° íë¡íìŒë§: ì í늬ìŒìŽì ì ì€ìê°ìŒë¡ íë¡íìŒë§íì¬ ì±ë¥ 묞ì ê° ë°ìí멎 ìŠì ê°ì§íê³ íŽê²°í©ëë€.
- ë®ì ì€ë²í€ë íë¡íìŒë§: ì í늬ìŒìŽì ì±ë¥ì 믞ì¹ë ìí¥ì ìµìííêž° ìíŽ íšì¬ ë®ì ì€ë²í€ë륌 ê°ì§ íë¡íìŒë§ êž°ì ì ê°ë°í©ëë€.
ê²°ë¡
íµê³ì ìœë íë¡íìŒë§ì ì í늬ìŒìŽì ì±ë¥ ìµì í륌 ìí íìì ìž êž°ì ì ëë€. íµê³ì íë¡íìŒë§ìŽ ìŽë»ê² ìëíëì§ ìŽíŽíê³ ì¬ë°ë¥ž ë구륌 ì¬ì©íšìŒë¡ìš ê°ë°ìë ì±ë¥ ë³ëª© íìì ìë³íê³ íŽê²°íë©°, ì í늬ìŒìŽì ë°ìì±ì ê°ì íê³ ì¬ì©ì 겜íì í¥ììí¬ ì ììµëë€. ì¹ ì í늬ìŒìŽì , 몚ë°ìŒ ì± ëë ìë² ìž¡ ìíížìšìŽë¥Œ ê°ë°íë êŽê³ììŽ, íµê³ì ìœë íë¡íìŒë§ì ê°ë° íë¡ìžì€ì íµí©íë ê²ì ê³ ì±ë¥, íì¥ì± ë° ì 뢰í ì ìë ì í늬ìŒìŽì ì ì ê³µíë ë° ì€ìí©ëë€. íë¡ê·žëë° ìžìŽ ë° íë«íŒì ì í©í íë¡íìŒë§ ë구륌 ì ííê³ , íšê³Œì ìž íë¡íìŒë§ì ìí ëªšë² ì¬ë¡ë¥Œ ë°ë¥Žë©°, ìµì íì ìí¥ì ë°ë³µíê³ ìž¡ì íë ê²ì ìì§ ë§ììì€. íë¡íìŒë§ì íì ë°ìë€ìŽê³ ìœëì ì ì¬ë ¥ì ìµëí ë°ííììì€!