Slide 1

Slide 1 text

ͳΜ͔τϨʔε͢ Δ࿩ naruse GitHub: nurse Twitter: @nalsh

Slide 2

Slide 2 text

ಥવͷো֐

Slide 3

Slide 3 text

γνϡΤʔγϣϯ • ͳΜ͔͏·͘ಈ͔ͳ͍ • Ͳ͏͠Α͏

Slide 4

Slide 4 text

ps -eFlL جຊฤ • -e: Select all processes. • -l: Long Format. The -y option is often useful with this. • -y Do not show flags; show rss in place of addr. • -F: Extra full format. See the -f option, which -F implies. • -f: When used with -L, the NLWP (number of threads) and LWP (thread ID) columns will be added • ར఺ • ಛݖ͕͍Βͳ͍ • ର৅ϓϩηεʹ෭࡞༻͕ແ͍

Slide 5

Slide 5 text

PS PID:14079ͷϝΠϯεϨου͕๩͘͠࢓ࣄ͍ͯ͠Δ͜ͱ͕Θ͔Δ

Slide 6

Slide 6 text

perf top • ΊͬͪΌศར • ಈ͍͍ͯΔͱ͖ʹ͸ ༗ޮ • Կ͔Λ଴ͬͯΔͱ͖ ʹ͸Θ͔Βͳ͍ • RHEL5ʹ͸·ͩͳ͍ • ಛݖ͕ඞཁ

Slide 7

Slide 7 text

PROC - PROCESS INFORMATION PSEUDO-FILESYSTEM procfs(5) • ͍Ζ͍ΖΘ͔ΔɻҰԡ͠͸ stat (30) kstkeip %lu The current EIP (instruction pointer). ࣮ߦதͷ໋ྩͷΞυϨε͸ 140308168160605 = 0x7f9c0a85b55d

Slide 8

Slide 8 text

procfs • /proc//maps ΛಡΜͰͲͷϥΠϒϥϦͷൣғ͔ௐ΂Δ • Φϑηοτͱ͔ߟ͑ͯϝϞϦΞυϨεΛϥΠϒϥϦ಺ͰͷΞυϨεʹ ม׵͢Δ • 0x7f9c0a85b55d - 0x7f9c0a84b000 = 0x1055d • γϯϘϧςʔϒϧΛோΊͯಛఆʂ • (addr2lineΛ࢖ͬͯखൈ͖ͯ͠΋Α͍)

Slide 9

Slide 9 text

procfs • ͱ͍͏ͷΛ΍Δ΍ͭ • https://gist.github.com/nurse/0619b6af90df140508c2 • ࠷ۙͷUbuntuͷ৔߹ɺಉҰϢʔβʔͰ΋ಛݖ͕ඞཁ • gdbʹΞλονͰ͖ͳ͍ͱ͖
 ʹΧʔωϧ಺Ͱ͍ࢗͬͯ͞Δͱ͖
 ʹ͖͜͞͞Μ͕ѱ͍ͱ͖
 ͦΜͳͱ͖Ͱ΋৘ใ͕ಘΒΕΔͷ͕Α͍ • ΋ͪΖΜϢʔβʔϥϯυΛ࣮ߦதͰ΋Θ͔Δ • ΠϯετʔϧෆཁͳͷͰ͓٬͞Μͱ͔ʹࢼͯ͠΋Β͍΍͍͢

Slide 10

Slide 10 text

• όοΫτϨʔε΋ݟ͍ͨ • ͦΜͳ΋ͷ͸ʢprocfsʹ͸ʣͳ͍ • perf_event_open(2) • sample_type=PERF_SAMPLE_CALLCHAINΛࢦఆ͢Ε͹औΕ Δؾ΋͢Δ……? • ͨͩ͠CͷελοΫτϨʔε͚ͩ • ptrace(2) • ϓϩηεʹγάφϧૹΔͷ͕ؾʹͳΔ • gcore(1)ͰίΞు͔ͤͯgdbͰͬ͘͡ΓΈΔͷ΋Α͍ • ͱ͔͔ͬΓͱͳΔγϯϘϧ͑͋͞Ε͹ɺʢRubyϨϕϧͷόο ΫτϨʔεͰ͋Ζ͏ͱʣͳΜͩͬͯΘ͔ΔͷͰ͕Μ͹͍ͬͯ͘

Slide 11

Slide 11 text

Ruby༻.gdbinit ͕Μ͹ͬͨ݁Ռ ײ૝ • ஗͍ɻόοΫτϨʔε͘Β͍ ͳΒ໰୊ͳ͍͕ɺRubyΦϒ δΣΫτΛछྨผʹ਺͑Δͱ ͔͢Δͱ΄΅ۭͬΆͰ΋਺ඵ ͔͔ΔʢˡPythonͰॻ͚ʣ • Rubyຊମ͕มΘΔ౓ʹ௥ै ͢Δͷ͕ͭΒͦ͏ • Ͱ΋ɺcoreͰ΋ಡΊΔͷ͸ศ རͦ͏