高集積コンテナホスティングにおけるボトルネックとその解法

 高集積コンテナホスティングにおけるボトルネックとその解法

話し手の所属するGMOペパボではロリポップ!マネージドクラウドというコンテナホスティングサービスを提供しており、1台のサーバに数千のコンテナを起動します。

コンテナはプロセスであるという認識は一般的になりつつありますが、コンテナプロセスを起動するにはネームスペースの作成や、マウントなどいくつもの処理が行われてプロセスを起動する必要があり、通常のプロセス起動と違う箇所にボトルネックが現れます。またコンテナ技術はLinuxのカーネルレイヤに近い領域で実装されているためそのボトルネックの解消には深いLinuxに対する理解が必要です。

本セッションにおいては話し手が1台のサーバで数千のコンテナを起動する際に直面したボトルネック、その調査方法、そして解決する方法を共有したいと思います。

昨今k8sの台頭により、あらゆるサービスでコンテナ技術が利用されつつありますが、コンテナ技術の深い理解は、今後のエンジニアのあらゆる開発において有用な知識となるはずです。ぜひ本セッションに足を運んでいただき、一歩進んだコンテナ利用をしていきましょう。

1b838da2065660793d5b26f2cdc32de7?s=128

Kazuhiko Yamashita

September 08, 2018
Tweet

Transcript

  1. ʙ࣋ͯ༨ͯ͠ΔϑϥετϨʔγϣϯɺ:PVWFHPUBOFBTZEBZʙ !QZBNB(.01FQBCP *OD CVJMEFSTDPOUPLZP ߴूੵίϯςφϗεςΟϯάʹ ͓͚ΔϘτϧωοΫͱͦͷղ๏

  2. γχΞɾϓϦϯγύϧΤϯδχΞ ࢁԼ࿨඙!QZBNB ϗεςΟϯάࣄۀ෦νʔϑςΫχΧϧϦʔυ

  3. None
  4. IUUQTUFOTOBQPODPNBSDIJWFT

  5. -JOVYͷ౷߹Ϣʔβʔ؅ཧ 50.-ܗࣜ )551 +40/ -%"1΍%#ͷ؅ཧ͕ෆཁ ѻ͍΍͍͢ϑΥʔϚοτ ൚༻ੑɾ֦ுੑ IUUQTTUOTKQ

  6. -JOVY MJCOTTTUOT JEFYBNQMF VJE FYBNQMF HJE FYBNQMF HSPVQT FYBNQMF VTFS

    OBNFFYBNQMF <\ OBNFFYBNQMF  JE   ^> γϯϓϧͰࣗ༝౓ͷߴ͍ઃܭ αʔό࣮૷΋͍ΘΏΔ3&45GVM෩ɺMJCOTTTUOT͔Β೚ҙͷίϚϯυΛ࣮ߦͨ͠ ݁ՌΛར༻Ͱ͖Δ࢓૊Έ΋͋ΔͷͰΫϥΠΞϯτଆͷ֦ு΋ࣗ༝ࣗࡏ <VTFSTFYBNQMF> JE LFZT<TTI> HSPVQ@JE TUOTDPOG
  7. EPDLFSSVOOBNFTUOTETUOTTUOTMBUFTU EPDLFSFYFDJUTUOTCJOCBTI JEFYBNQMF VJE FYBNQMF HJE FYBNQMF HSPVQT FYBNQMF ͙͢ʹࢼͤ·͢

    DVSMGT4-IUUQTSFQPTUOTKQTDSJQUTZVNSFQPTIcTI DVSMGT4-IUUQTSFQPTUOTKQTDSJQUTBQUSFQPTIcTI EPDLFS $FOU04 VCVOUVEFCJBO
  8. ϗεςΟϯάࣄۀ &$ࢧԉࣄۀ ϋϯυϝΠυɾͦͷଞࣄۀ

  9. ೥ ϩϦϙοϓʂϨϯλϧαʔόαʔϏεఏڙ։࢝ ೥ ೥ ೥ ϔςϜϧαʔϏεఏڙ։࢝ 1ࢁ͕ϖύϘʹೖࣾʂʂ̍ ೥݄೔ ࣛࣇౡݝग़ਫࢢʹ͓͍ͯ1ࢁര஀ʂʂ̍ ೥

    ݱࡏɾ૑ۀ೥໨ ϜʔϜʔυϝΠϯαʔϏεఏڙ։࢝
  10. ϨϯλϧαʔόͱΫϥ΢υͷ͍͍ͱ͜ͲΓ ϩϦϙοϓʂϚωʔδυΫϥ΢υ IUUQTNDMPMJQPQKQ

  11. ίϯςφΤϯδϯʹIBDPOJXBΛ࠾༻ wNSVCZ੡ίϯςφΤϯδϯ w3VCZ%4-ͰίϯςφఆٛՄೳ wϑΥʔΫલޙͳͲ೚ҙͷϑοΫ
 ࣮૷͕Մೳ IUUQTHJUIVCDPNIBDPOJXBIBDPOJXB

  12. ࠓ೔࿩͢͜ͱ w ෼Ͱ͋ͳͨ΋ίϯςφϚΠελʔߨ࠲ w ϝϞϦঢ়ଶىҼͷίϯςφ཯଎໰୊ w γεςϜ্ݶͱਓྨͷر๬ʹ͍ͭͯ w ωοτϫʔΫίϚϯυىҼͷίϯςφ཯଎໰୊ w

    γεςϜௐࠪίϚϯυອஊ w ετϨʔδͷເͱల๬
  13. ෼Ͱ͋ͳͨ΋ ίϯςφϚΠελʔߨ࠲

  14. ίϯςφͷߏ੒ཁૉ OBNFTQBDF DISPPU DHSPVQ DBQBCJMJUZ

  15. ͦ΋ͦ΋ ίϯςφ

  16. ίϯςφʹϓϩηε

  17. OBNFTQBDF IUUQTMJOVYKNPTEOKQIUNM-%1@NBOQBHFTNBOVOTIBSFIUNM SPPU!MPDBMIPTUdJQB MP-001#"$, 61 -08&3@61NUVREJTDOPRVFVF MJOLMPPQCBDLCSE JOFUTDPQFIPTUMP FOQT#30"%$"45 .6-5*$"45

    61 -08&3@61 MJOLFUIFSBCSE⒎⒎⒎⒎⒎⒎ JOFUCSETDPQFHMPCBMFOQT SPPU!MPDBMIPTUdCBTI SPPU!MPDBMIPTUdVOTIBSFOFU SPPU!MPDBMIPTUdJQB MP-001#"$,NUVREJTDOPPQTUBUF%08/HSPVQEFGBVMURMFO MJOLMPPQCBDLCSE
  18. DISPPU IUUQTMJOVYKNPTEOKQIUNM-%1@NBOQBHFTNBODISPPUIUNM NLEJSDPOUBJOFS SPPU!MPDBMIPTUIPNFWBHSBOUDPOUBJOFSDQSCJOMJCMJCDPOUBJOFS DISPPUDPOUBJOFS CBTIMTMUS ESXYSYSY4FQCJO ESXYSYSY4FQMJC ESXYSYSY4FQMJC

  19. DHSPVQ IUUQNBOPSHMJOVYNBOQBHFTNBODHSPVQTIUNM wDQVDGT@QFSJPE@VT w$16Ϧιʔεͷׂ౰ִؒϚΠΫϩඵ wDQVDGT@RVPUB@VT wׂ౰ִؒͷ಺ɺλεΫ͕࣮ߦ͞ΕΔϚΠΫϩඵ ϓϩηε͝ͱʹ$16΍ϝϞϦͳͲͷ
 ϦιʔεΛ੍ݶ DGT@QFSJPE@VT 

     ඵ  DGT@RVPUB@VT  ඵ ˋ
  20. DBQBCJMJUZ IUUQTMJOVYKNPTEOKQIUNM-%1@NBOQBHFTNBODBQBCJMJUJFTIUNM -JOVYͷݖݶ؅ཧͷ࢓૊Έɻϓϩηε΍ ϑΝΠϧ୯ҐͰ෇༩͢Δ͜ͱ͕Ͱ͖Δ QTFGcHSFQBQBDIF SPPU VTSTCJOBQBDIFLTUBSU XXXEBUB VTSTCJOBQBDIFLTUBSU XXXEBUB

    VTSTCJOBQBDIFLTUBSU SPPUQUTHSFQDPMPSBVUPBQBDIF SPPU!MPDBMIPTUdHFUQDBQT $BQBCJMJUJFTGPSA DBQ@DIPXO  DBQ@EBD@PWFSSJEF  DBQ@OFU@CJOE@TFSWJDF 
  21. ܰྔԾ૝Խ؀ڥΛ࣮ݱ͢Δٕज़ -9$ͰֶͿίϯςφೖ໳!UFO@GPSXBSE IUUQHJIZPKQBENJOTFSJBMMJOVY@DPOUBJOFST

  22. 'BTU$POUBJOFSΞʔΩςΫνϟ

  23. ֮͑ͯ·͔͢ʁ 'BTU$(*

  24. EJTQBUDIFS OHJOY DPOUBJOFS ίωΫγϣϯ νΣοΫ DPOUBJOFS ىಈ τϥϑΟοΫ ϦΫΤετΛܖػʹίϯςφΛىಈ͠ Ұఆ࣌ؒॲཧޙɺࣗಈతʹఀࢭ͢Δ

    'BTU$POUBJOFS IUUQTICNBUTVNPUPSKQFOUSZ
  25. ϢʔβʔσʔλΛετϨʔδʹ࣋ͭ͜ͱͰ εςʔτϑϧͳಈతίϯςφΞʔΩςΫνϟΛ࣮ݱ Ϣʔβʔσʔλ͸ετϨʔδʹ 4FSWFS 4FSWFS 4UPSFHF 6TFS%BUB DPOUBJOFS DPOUBJOFS

  26. աෛՙ࣌ͳͲ΋ࣗಈͰ࣍ͷϦΫΤετ͔Β Φʔτεέʔϧ Φʔτεέʔϧ΋଎ 4FSWFS 4FSWFS 4UPSFHF 6TFS%BUB DPOUBJOFS DPOUBJOFS 4FSWFS

    DPOUBJOFS
  27. ϋʔυ΢ΣΞো֐͕ى͖ͯ΋࣍ͷϦΫΤετ͔Β ۭ͍ͯΔϗετͰىಈ ϋʔυো֐΋ࣗಈͰҠಈ 4FSWFS 4FSWFS 4UPSFHF 6TFS%BUB DPOUBJOFS DPOUBJOFS 4FSWFS

    DPOUBJOFS DPOUBJOFS
  28. 'BTU$POUBJOFSͷ ίΞόϦϡʔ ίϯςφΛ͍͔ʹ଎͘ ىಈͤ͞Δ͔ʁ

  29. 'BTU$POUBJOFSʹ͓͚Δ ίϯςφͷߴ଎ىಈͱ ىಈ਺্ݶͱͷ ઓ͍ͷه࿥

  30. ίϯςφىಈ؀ڥ w $16ίΞ w ϝϞϦ(# w "QBDIF)551%ϓϩηε NBTUFS Ͱίϯςφىಈ͍ͨ͠

  31. ϝϞϦঢ়ଶىҼͷ ίϯςφ཯଎໰୊

  32. ࣄ৅ɿ؂ࢹίϯςφͷμ΢ϯ w ֎ܗ؂ࢹΛߦ͍ͬͯΔίϯςφͷ )551ϨεϙϯελΠϜ͕ᮢ஋௒ӽ

  33. OFUOTBEE BQQMZ@OBNFTQBDF .PVOUJOH 0,BQQMZ@pMFTZTUFN 0,BQQMZ@SMJNJU 0,BQQMZ@DHSPVQ 0,BQQMZ@SFNPVOU 0,BQQMZ@VTFS@OBNFTQBDF 0,EP@DISPPU 0,BQQMZ@DBQBCJMJUZ

    0,BQQMZ@TFDDPNQ 0,TXJUDI@HVJE $POUBJOFSGPSLTVDDFTT ϩάͰ͸OFUOTͷ௥Ճ͕཯଎
  34. JQOFUOTBEEYYYY JQOFUOTFYFDYYYYZZZZ JQίϚϯυ -JOVYͷ*'पΓͷػೳ͚ͩͰͳ͘ɺOFUOTͷ௥Ճ΍ɺ OFUOTʹର͢Δૢ࡞Λ࣮ݱ͍ͯ͠Δ

  35. ௐࠪํ๏

  36. ೔ຊݹདྷΑΓ఻ΘΔ ఻౷ܳೳ ʮצʯ

  37. None
  38. wϓϩηεͷൃߦ͢ΔγεςϜίʔϧΛτϨʔε TUSBDF SPPU!MPDBMIPTUdTUSBDFUU5T4UJNFJQOFUOTBEEFYBNQMF FYFDWF TCJOJQ <JQ OFUOT BEE FYBNQMF> <

    WBST >   CSL /6-- YF BDDFTT FUDMETPOPIXDBQ '@0, &/0&/5 /PTVDIpMFPS EJSFDUPSZ  NNBQ /6--  1305@3&"%c1305@83*5& ."1@13*7"5&c ."1@"/0/:.064   YGCBD ʜ
  39. TUSBDFUU5TJQOFUOTBEEFYBNQMF

  40. wγεςϜίʔϧͷϘτϧωοΫΛγϯϘϧϨϕϧ·Ͱಛఆ QFSG QFSGUPQ QFSGSFDPSEDBMMHSBQIEXBSGQQJE QFSGSFQPSUH(TUEJP

  41. JQ<LFSOFMLBMMTZNT><L>FOUSZ@4:4$"--@@GBTUQBUI c FOUSZ@4:4$"--@@GBTUQBUI c cTZT@VOTIBSF cVOTIBSF@OTQSPYZ@OBNFTQBDFT cDSFBUF@OFX@OBNFTQBDFT cDPQZ@OFU@OT cc ccTFUVQ@OFU

    ccPQT@JOJU ccc cccJQUBCMF@pMUFS@OFU@JOJU cccJQU@SFHJTUFS@UBCMF cccc ccccYU@SFHJTUFS@UBCMF ccccYU@SFQMBDF@UBCMF cccc@@LNBMMPD@OPEF cccc@@TMBC@BMMPD ccccc ccccc@@@TMBC@BMMPD cccccEFBDUJWBUF@TMBC cccccc cccccc@@DNQYDIH@EPVCMF@TMBCJTSB ccccccVOTIBSF ccccccYB
  42. 4MBC DBUQSPDNFNJOGPcHSFQJTMBC 4MBCL# (ʘ ?P? ʗ

  43. NNTMVCD ָ͘͠ಡΜͰֶͿ-JOVY IUUQTHJUIVCDPNUPSWBMETMJOVY

  44. ͍͑ͬʂ TZODFDIPQSPDTZTWNESPQ@DBDIFT TMBCUPQͰ֬ೝͨ͠ͱ͜ΖɺEFOUSZΩϟογϡ͕ ଟ͔ͬͨͨΊɺΩϟογϡͷΫϦΞ͕༗ޮͱߟ͑ͨ

  45. ߋʹ͜͏͡Όʂʂ̍    CBTIDTZODFDIPa QSPDTZTWNESPQ@DBDIFT

  46. 4MBC͸ංେԽ͢Δͱ ϘτϧωοΫͱͳΔ Ұൠతʹ͸4MBCͷංେԽʹىҼͯ͠4XBQϝϞϦ͕ར༻͞Ε γεςϜશମ͕཯଎ʹͳΔ͜ͱ͕ଟ͍͕ɺ୯७ʹ࢖༻ྔ͕ ଟ͍ͱॳظԽॲཧ࣌ͷϩοΫͰϘτϧωοΫͱͳΔ͜ͱ͕͋Δɻ ·ͨ͜ΕΒͷ04ϨΠϠͷ࢓૊Έͷௐࠪʹ͓͍ͯ͸TUSBDF΍ QFSGΛར༻͢Δ͜ͱͰ͋ͨΓΛ͚ͭɺιʔεΛಡΈࠐΉ͜ͱͰ ݪҼʹର͢ΔԾઃΛཱͯΔ͜ͱ͕Ͱ͖Δɻ

  47. γεςϜ্ݶͱ ਓྨͷر๬ʹ͍ͭͯ

  48. ࣄ৅ɿίϯςφ͕ىಈ͠ͳ͍ w ίϯςφىಈ਺ෛՙݕূதʹ ίϯςφ͕ىಈ͠ͳ͘ͳͬͨ

  49. ίϯςφͷน

  50. DBOUBEEFUI@I@W(MW(W[UPCSJEHFIBDPOJXB&YDIBOHFGVMM SPPU!DPNQVUFdCSDUMTIPXcXDM  CSJEHFͷγεςϜ্ݶʁ

  51. ίϯςφωοτϫʔΫ -JOVY#SJEHF OFUOT DPOUBJOFS WFUIQBJS BQQMZOFUOT IBDPOJXB FUI@I@YYYYYYY DPOUBJOFS@YYYY

  52. ίϯςφωοτϫʔΫ -JOVY#SJEHF OFUOT DPOUBJOFS WFUIQBJS BQQMZOFUOT IBDPOJXB FUI@I@YYYYYYY DPOUBJOFS@YYYY ্ݶ

  53. EFpOF#3@1035@#*54 EFpOF#3@."9@10354 #3@1035@#*54  OFUCSJEHFCS@QSJWBUFI wఆ਺Λมߋ͠ɺΧʔωϧίϯύΠϧ͢Ε͹γεςϜ্ݶ͸ มߋՄೳɻ

  54. ϒϦοδΛ෼ࢄ -JOVY#SJEHF OFUOT DPOUBJOFS WFUIQBJS BQQMZOFUOT IBDPOJXB FUI@I@ DPOUBJOFS@ -JOVY#SJEHF

    IBDPOJXB999 OFUOT FUI@I@ DPOUBJOFS DPOUBJOFS@ BQQMZOFUOT OFUOT DPOUBJOFS WFUIQBJS BQQMZOFUOT FUI@I@ DPOUBJOFS@   
  55. None
  56. -JOVY#SJEHF͸্ݶ͕͋Δ -JOVY#SJEHFʹ௥ՃͰ͖Δ*'͸ݸ͕γεςϜ্ݶͰ͋Δɻ ճආ͢Δʹ͸ఆ਺ͷ஋Λม͑ͯΧʔωϧίϯύΠϧ͢ΔɺϒϦοδΛ ෼ׂ͢Δɺ0QFOW4XJUDIʹஔ͖׵͑Δͱ͍͏खஈ͕͋Δɻ

  57. ωοτϫʔΫίϚϯυىҼͷ ίϯςφ཯଎໰୊

  58. ࣄ৅ ɿ $16ɾϝϞϦ͸༨༟͕͋Δ͕ -"͚͕ͩߴ͍ w ίϯςφىಈ਺ෛՙݕূதʹίϯ ςφͷىಈ͕஗͘ͳΓɺ-"͕ߴಅ

  59. 1*%64&313/*7*353&44)34$16.&.5*.& $0.."/% SPPUHH4DBEWJTPS SPPU3UPQ VCVOUV3BQBDIF SPPU%SPVUF SPPU3IBDPOJXB SPPU%SPVUF SPPU%SPVUF SPPU%JQ

    SPPU%SPVUF SPPU%JQ SPPU3IBDPOJXB SPPU3IBDPOJXB SPPU3IBDPOJXB SPPU3IBDPOJXB SPPU%SPVUF SPPU3IBDPOJXB UPQ
  60. ༨ஊDBEWJTPS IUUQTHJUIVCDPNHPPHMFDBEWJTPS

  61. UJNFJQOFUOTBEEUFTU 35/&5-*/,BOTXFST*OWBMJEBSHVNFOU 35/&5-*/,BOTXFST*OWBMJEBSHVNFOU  35/&5-*/,BOTXFST*OWBMJEBSHVNFOU 35/&5-*/,BOTXFST*OWBMJEBSHVNFOU SFBMNT VTFSNT TZTNT JQOFUOTBEE͕ࢗ͞Δ

  62. QFSGSFDPSEDBMMHSBQIEXBSGJQOFUOTBEEFYBNQMF QFSGSFQPSUH(TUEJP JQ<LFSOFMLBMMTZNT><L>FOUSZ@4:4$"--@@GBTUQBUI c FOUSZ@4:4$"--@@GBTUQBUI c cTZT@PQFO cc ccEP@TZT@PQFO ccc

    cccEP@pMQ@PQFO cccc ccccQBUI@PQFOBU ccccc TZT@PQFO͕ࢧ഑త
  63. TUSBDFJQOFUOTBEEFYBNQMF  PQFO WBSSVOOFUOTOFUOT@BECB 0@3%0/-:  TFOENTH  \NTH@OBNF 

    \TB@GBNJMZ"'@/&5-*/, QJE  HSPVQT^  SFDWNTH  \NTH@OBNF  \TB@GBNJMZ"'@/&5-*/, QJE  HSPVQT^  DMPTF   PQFO WBSSVOOFUOTOFUOT@DGDGEBC 0@3%0/-:  TFOENTH  \NTH@OBNF  \TB@GBNJMZ"'@/&5-*/, QJE  HSPVQT^  SFDWNTH  \NTH@OBNF  \TB@GBNJMZ"'@/&5-*/, QJE  HSPVQT^  DMPTF   طଘͷOFUOT͢΂ͯʹ ໰͍߹Θ͍ͤͯΔ
  64. GSFF UPUBMVTFEGSFFTIBSFECV⒎DBDIFBWBJMBCMF .FN˒ 4XBQUPUBM Ϧιʔεঢ়ଶ wखݩͷ7JSUVBM#PYͰ࠶ݱͤͨ͞ͱ͜ΖϝϞϦ͕
 ރׇঢ়ଶͰ͋ͬͨ

  65. ௐ͔ࠪΒಘΒΕΔԾઆͱଧͪख wϝϞϦ͕ރׇঢ়ଶͰ͋ΔͱPQFO͕ࢧ഑త wTFOENTHͷ಺༰͕ෆཁͰ͋Ε͹ɺطଘͷOFUOTʹ
 ର͢ΔॲཧΛ࡟আ͢Ε͹ɺOFUOTͷϘτϧωοΫ͕֎ͤΔ

  66. HEC͔Β͋ͨΓΛ͚ͭΔ HECJQ HEC CTFOENTH HEC SVOOFUOTBEEUFTU@ 4UBSUJOHQSPHSBNTCJOJQOFUOTBEEUFTU@  #SFBLQPJOU TFOENTH

    BUTZTEFQTVOJYTZTDBMMUFNQMBUF4 TZTEFQTVOJYTZTDBMMUFNQMBUF4/PTVDIpMFPSEJSFDUPSZ HEC CU TFOENTH BUTZTEFQTVOJYTZTDBMMUFNQMBUF4 YDCJOSUOM@UBML  YCEJO   YGJOOFUOT@NBQ@JOJU  YDFJOEP@OFUOT  YJO  
  67. શͯ͸ιʔεʹॻ͍ͯ͋Δ

  68. OFUMJOLΛར༻ͨ͠/4*%औಘ XIJMF FOUSZSFBEEJS EJS /6-- \ JG TUSDNQ FOUSZE@OBNF 

      DPOUJOVF JG TUSDNQ FOUSZE@OBNF    DPOUJOVF OTJEHFU@OFUOTJE@GSPN@OBNF FOUSZE@OBNF  JG OTJE  OFUOT@NBQ@BEE OTJE FOUSZE@OBNF  ^ JQJQOFUOTD
  69. ࠷৽ͷιʔεͰ͸͢Ͱʹύον

  70. OFUOTͷ௥Ճ͕ര଎ʹʂʂ̍ TUSBDFUUTPTUSBDF@JQOFUOTBEEUFTU@ IFBETUSBDF@ FYFDWF TCJOJQ <JQ OFUOT BEE UFTU@> <

    WBST >   UBJMTUSBDF@  FYJUFEXJUI  ύοέʔδόʔδϣϯൺֱͰඵ͔ΒඵʹͳΓ ഒ͘Β͍ૣ͘ͳͬͨ TUSBDFUUTPTUSBDF@JQOFUOTBEEUFTU@ IFBETUSBDF@ FYFDWF TCJOJQ <JQ OFUOT BEE UFTU@> < WBST >   UBJMTUSBDF@  FYJUFEXJUI CFGPSF BGUFS
  71. IBDPOJXBTPGUJJ[VLBMPMJQPQJPDEQBSFOU<>JQMJOLTFU FUIDE@IVQ TZTUFNEVEFWE<>$PVMEOPUHFOFSBUFQFSTJTUFOU."$BEESFTTGPS FUIDE@I/PTVDIpMFPSEJSFDUPSZ ϘτϧωοΫ͕ભҠ͢Δ IUUQTHJUIVCDPNTZTUFNETZTUFNEJTTVFT

  72. ."$"EESFTT1PMJDZͷมߋ FUDTZTUFNEOFUXPSLEFGBVMUMJOL ."$"EESFTT1PMJDZQFSTJTUFODF ."$"EESFTT1PMJDZSBOEPN ."$"EESFTT1PMJDZOPOF ࠶ىಈޙ΋ಉ͡.BDΞυϨεΛ෷͍ग़͢ σόΠε௥Ճ࣌ʹɺϥϯμϜͳ.BDΞυϨεΛ෷͍ग़͢ ΧʔωϧʹΑͬͯ෷͍ग़͞Εͨ.BDΞυϨεΛར༻͢Δ

  73. HECJTศར wطଘͷϓϩηεɺίϚϯυʹ͓͍ͯ͋ͨΓΛ͚ͭΔͱ͖
 όοΫτϨʔε͸େ͖ͳख͕͔ΓʹͳΔ w-JOVYʹࠝแ͞Ε͍ͯΔίϚϯυ͸ͦΕͳΓʹ։ൃ͕
 ଓ͍͓ͯΓɺίϛοτಡΉͱ࠷దԽ͕ਐΜͰ͍Δɻ wNSVCZJQSPVUFཉ͍͠

  74. ίϯςφ

  75. IBDPOJXBXJOUFSLVSPTBLJ<>JQOFUOTBEEOFUOT@BEF IBDPOJXBXJOUFSLVSPTBLJ<>JQMJOLBEEFUIBEF@IUZQF WFUIQFFSOBNFFUIBEF@D ࠶ͼɺJQOFUOTBEE͕཯଎ OFUOTͷ௥Ճʹඵ͘Β͍͔͔Δ

  76. JQ<LFSOFMLBMMTZNT><L>FOUSZ@4:4$"--@@GBTUQBUI c FOUSZ@4:4$"--@@GBTUQBUI c cTZT@NPVOU cc ccEP@NPVOU ccc cccHSBGU@USFF cccBUUBDI@SFDVSTJWF@NOU

    cccc ccccQSPQBHBUF@NOU ccccc cccccQSPQBHBUF@POF cccccc ccccccDPQZ@USFF ccccccDMPOF@NOU ccccccc cccccccBMMPD@WGTNOU DPQZ@USFF͕ࢧ഑త
  77. DPQZ@USFF 
 GTOBNFTQBDFD Ϛ΢ϯτ࣌ͷϑϥά͕.4@#*/%ͳͱ͖ʹMPPQCBDLϚ΢ϯτ ͯ͠ɺϚ΢ϯτͷπϦʔߏ଄Λίϐʔ͢Δ

  78. XIJMF NPVOU  /&5/4@36/@%*3 OPOF .4@4)"3&%c.4@3&$ /6-- \  'BJMVOMFTTXFOFFEUPNBLFUIFNPVOUQPJOU

     JG FSSOP&*/7"-ccNBEF@OFUOT@SVO@EJS@NPVOU \ GQSJOUG TUEFSS NPVOUNBLFTIBSFETGBJMFETaO /&5/4@36/@%*3 TUSFSSPS FSSOP  SFUVSO ^  6QHSBEF/&5/4@36/@%*3UPBNPVOUQPJOU  JG NPVOU /&5/4@36/@%*3 /&5/4@36/@%*3 OPOF .4@#*/%c.4@3&$ /6-- \ GQSJOUG TUEFSS NPVOUCJOETTGBJMFETaO /&5/4@36/@%*3 /&5/4@36/@%*3  TUSFSSPS FSSOP  SFUVSO ^ NBEF@OFUOT@SVO@EJS@NPVOU ^ JQJQOFUOTD
  79. XIJMF NPVOU  /&5/4@36/@%*3 OPOF .4@4)"3&%c.4@3&$ /6-- \  'BJMVOMFTTXFOFFEUPNBLFUIFNPVOUQPJOU

     JG FSSOP&*/7"-ccNBEF@OFUOT@SVO@EJS@NPVOU \ GQSJOUG TUEFSS NPVOUNBLFTIBSFETGBJMFETaO /&5/4@36/@%*3 TUSFSSPS FSSOP  SFUVSO ^  6QHSBEF/&5/4@36/@%*3UPBNPVOUQPJOU  JG NPVOU /&5/4@36/@%*3 /&5/4@36/@%*3 OPOF .4@#*/%c.4@3&$ /6-- \ GQSJOUG TUEFSS NPVOUCJOETTGBJMFETaO /&5/4@36/@%*3 /&5/4@36/@%*3  TUSFSSPS FSSOP  SFUVSO ^ NBEF@OFUOT@SVO@EJS@NPVOU ^ JQJQOFUOTD WBSSVOOFUOTΛ࠶ؼతʹ 4)"3&%Ϛ΢ϯτ
  80. XIJMF NPVOU  /&5/4@36/@%*3 OPOF .4@4)"3&%c.4@3&$ /6-- \  'BJMVOMFTTXFOFFEUPNBLFUIFNPVOUQPJOU

     JG FSSOP&*/7"-ccNBEF@OFUOT@SVO@EJS@NPVOU \ GQSJOUG TUEFSS NPVOUNBLFTIBSFETGBJMFETaO /&5/4@36/@%*3 TUSFSSPS FSSOP  SFUVSO ^  6QHSBEF/&5/4@36/@%*3UPBNPVOUQPJOU  JG NPVOU /&5/4@36/@%*3 /&5/4@36/@%*3 OPOF .4@#*/%c.4@3&$ /6-- \ GQSJOUG TUEFSS NPVOUCJOETTGBJMFETaO /&5/4@36/@%*3 /&5/4@36/@%*3  TUSFSSPS FSSOP  SFUVSO ^ NBEF@OFUOT@SVO@EJS@NPVOU ^ JQJQOFUOTD WBSSVOOFUOTΛ ࣗ෼ࣗ਎ʹ#*/%Ϛ΢ϯτ͢Δ͜ ͱͰ4)"3&%Մೳʹ͢Δ
  81. JG VOTIBSF $-0/&@/&8/&5  \  GQSJOUG TUEFSS 'BJMFEUPDSFBUFBOFXOFUXPSLOBNFTQBDFaTaTaO 

      OBNF TUSFSSPS FSSOP   HPUPPVU@EFMFUF ^  #JOEUIFOFUOTMBTUTP*DBOXBUDIGPSJU  JG NPVOU QSPDTFMGOTOFU OFUOT@QBUI OPOF .4@#*/% /6--  \  GQSJOUG TUEFSS #JOEQSPDTFMGOTOFUTGBJMFETaO    OFUOT@QBUI TUSFSSPS FSSOP   HPUPPVU@EFMFUF ^ JQJQOFUOTD ͜ͷϓϩηεͷOFUOTΛ෼཭͢Δ
  82. JG VOTIBSF $-0/&@/&8/&5  \  GQSJOUG TUEFSS 'BJMFEUPDSFBUFBOFXOFUXPSLOBNFTQBDFaTaTaO 

      OBNF TUSFSSPS FSSOP   HPUPPVU@EFMFUF ^  #JOEUIFOFUOTMBTUTP*DBOXBUDIGPSJU  JG NPVOU QSPDTFMGOTOFU OFUOT@QBUI OPOF .4@#*/% /6--  \  GQSJOUG TUEFSS #JOEQSPDTFMGOTOFUTGBJMFETaO    OFUOT@QBUI TUSFSSPS FSSOP   HPUPPVU@EFMFUF ^ JQJQOFUOTD OFUOT@QBUIWBSSVOOFUOTOFUOT໊ ʹ෼཭ͨ͠OFUOTͷ'%Λ#*/%Ϛ΢ϯτ͢Δ ͜ͱͰϓϩηε͕ͳ͘ͳͬͯ΋OFUOT͕࢒Δ
  83. XIJMF NPVOU  /&5/4@36/@%*3 OPOF .4@4)"3&%c.4@3&$ /6-- \  'BJMVOMFTTXFOFFEUPNBLFUIFNPVOUQPJOU

     JG FSSOP&*/7"-ccNBEF@OFUOT@SVO@EJS@NPVOU \ GQSJOUG TUEFSS NPVOUNBLFTIBSFETGBJMFETaO /&5/4@36/@%*3 TUSFSSPS FSSOP  SFUVSO ^  6QHSBEF/&5/4@36/@%*3UPBNPVOUQPJOU  JG NPVOU /&5/4@36/@%*3 /&5/4@36/@%*3 OPOF .4@#*/%c.4@3&$ /6-- \ GQSJOUG TUEFSS NPVOUCJOETTGBJMFETaO /&5/4@36/@%*3 /&5/4@36/@%*3  TUSFSSPS FSSOP  SFUVSO ^ NBEF@OFUOT@SVO@EJS@NPVOU ^ JQJQOFUOTD .4@3&$͸࠶ؼతʹߦ͏ͷͰ 0 O ͷ͕͔͔࣌ؒΔ
  84. զʑͷ༻్Ͱ͸.4@3&$ෆཁ SPPUOBNFTQBDF OFUOTBEE OFUOTEFM GPSL XBJUQJE VOTIBSF DPOUBJOFSOBNFTQBDF QSPDFTT EPOF

  85. QZBNBJQ ίϚϯυര஀

  86. QJQίϚϯυ͸΍Ίͨ΄͏͕͍͍

  87. ίϯςφ

  88. IBDPOJXBUJHIUJJ[VLB<>JQOFUOTBEEOFUOT@BEF IBDPOJXBUJHIUJJ[VLB<>JQMJOLTFUFUIBEF@DOFUOT OFUOT@BEFVQ IBDPOJXBUJHIUJJ[VLB<>JQOFUOTFYFDOFUOT@BEFJQBEESBEE EFWFUIBEF@D IBDPOJXBUJHIUJJ[VLB<>JQOFUOTFYFDOFUOT@BEFJQMJOLTFU MPVQ IBDPOJXBUJHIUJJ[VLB<>JQOFUOTFYFDOFUOT@BEFTCJOSPVUF BEEEFGBVMUHX JQOFUOTFYFD͕཯଎

    ௨৴Ͱ͖ΔΑ͏ʹͳΔ·Ͱඵ͘Β͍͔͔Δ
  89. JQ<LFSOFMLBMMTZNT><L>FOUSZ@4:4$"--@@GBTUQBUI c FOUSZ@4:4$"--@@GBTUQBUI c cTZT@VOTIBSF cVOTIBSF@OTQSPYZ@OBNFTQBDFT cDSFBUF@OFX@OBNFTQBDFT cDPQZ@NOU@OT cc ccDPQZ@USFF

    ccc cccDMPOF@NOU cccc ccccBMMPD@WGTNOU ccccc ccccc@@BMMPD@QFSDQV cccccc ccccccQDQV@BMMPD ccccccc cccccccQDQV@BMMPD@BSFB cccccccc ccccccccVOTIBSF ccccccccOFUOT@TXJUDI
  90.  TOQSJOUG OFU@QBUI TJ[FPG OFU@QBUI TT /&5/4@36/@%*3 OBNF  

    OFUOTPQFO OFU@QBUI 0@3%0/-:c0@$-0&9&$   JG OFUOT \   GQSJOUG TUEFSS $BOOPUPQFOOFUXPSLOBNFTQBDFaTaTaO     OBNF TUSFSSPS FSSOP    SFUVSO  ^  JG TFUOT OFUOT $-0/&@/&8/&5  \   GQSJOUG TUEFSS TFUUJOHUIFOFUXPSLOBNFTQBDFaTaGBJMFETaO     OBNF TUSFSSPS FSSOP    DMPTF OFUOT    SFUVSO  ^ MJCOBNFTQBDFD
  91.  TOQSJOUG OFU@QBUI TJ[FPG OFU@QBUI TT /&5/4@36/@%*3 OBNF  

    OFUOTPQFO OFU@QBUI 0@3%0/-:c0@$-0&9&$   JG OFUOT \   GQSJOUG TUEFSS $BOOPUPQFOOFUXPSLOBNFTQBDFaTaTaO     OBNF TUSFSSPS FSSOP    SFUVSO  ^  JG TFUOT OFUOT $-0/&@/&8/&5  \   GQSJOUG TUEFSS TFUUJOHUIFOFUXPSLOBNFTQBDFaTaGBJMFETaO     OBNF TUSFSSPS FSSOP    DMPTF OFUOT    SFUVSO  ^ MJCOBNFTQBDFD ࡞੒ࡁΈͷOFUOTʹ VOTIBSF
  92.  JG VOTIBSF $-0/&@/&8/4  \   GQSJOUG TUEFSS

    VOTIBSFGBJMFETaO TUSFSSPS FSSOP    SFUVSO  ^   %POUMFUBOZNPVOUTQSPQBHBUFCBDLUPUIFQBSFOU   JG NPVOU   OPOF .4@4-"7&c.4@3&$ /6-- \   GQSJOUG TUEFSS aNPVOUNBLFSTMBWFaGBJMFETaO     TUSFSSPS FSSOP    SFUVSO  ^ MJCOBNFTQBDFD NPVOUOTΛ෼཭͢Δ
  93.  JG VOTIBSF $-0/&@/&8/4  \   GQSJOUG TUEFSS

    VOTIBSFGBJMFETaO TUSFSSPS FSSOP    SFUVSO  ^   %POUMFUBOZNPVOUTQSPQBHBUFCBDLUPUIFQBSFOU   JG NPVOU   OPOF .4@4-"7&c.4@3&$ /6-- \   GQSJOUG TUEFSS aNPVOUNBLFSTMBWFaGBJMFETaO     TUSFSSPS FSSOP    SFUVSO  ^ MJCOBNFTQBDFD .4@4-"7&ʹΑͬͯ͜ͷ/4ʹ ͓͚Δ͋ΒΏΔϚ΢ϯτͷมߋΛ ਌ʹ఻ൖ͠ͳ͍
  94.  JG NPVOU OBNF TZT TZTGT NPVOUqBHT /6--  \

      GQSJOUG TUEFSS NPVOUPGTZTGBJMFETaO TUSFSSPS FSSOP    SFUVSO  ^ MJCOBNFTQBDFD TZTGTΛϚ΢ϯτ͢Δ͜ͱͰ ࣮࣭ίϯςφԽ
  95. VOTIBSF OFUOT VOTIBSF NPVOUOT TMBWF SPPUTZTUFN TZT NPVOU JQOFUOTFYFD͸ ίϯςφͰ͋Δ

  96. VOTIBSF OFUOT VOTIBSF NPVOUOT TMBWF SPPUTZTUFN TZT NPVOU JQOFUOTFYFD͸ ίϯςφͰ͋Δ

    OFUOTͷ*'ʹ*1௥ՃͷΈ΍Γ͍ͨ ͷͰίϯςφͷػೳ͸͍Βͳ͍
  97. None
  98. ίϯςφऑͰϝϞϦރׇ ͭ·ΓɺϦιʔε࢖͍੾Εͨ

  99. γεςϜௐࠪίϚϯυອஊ

  100. w HEC5IF(/6%FCVHHFS w TUSBDF5SBDFTZTUFNDBMMTBOETJHOBMT w QFSG1FSGPSNBODFBOBMZTJTUPPMTGPS-JOVY w WBMHSJOEBTVJUFPGUPPMTGPSEFCVHHJOHBOEQSPpMJOHQSPHSBNT

  101. NSVCZ ͷ"1*ΫϥΠΞϯτ͕ ΊͬͪΌϝϞϦ࢖͏ NSVCZ DMJFOU "1*4FSWFS SFTPVSDFFYBNQMF NSVCZͷ$MJFOU͔Β͋Δ"1*Λ࣮ߦͯ͠ .#ͷϨεϙϯεΛऔಘ͢Δ +40/

  102. ॠؒతʹ(CZUF͘Β͍ ϝϞϦ͕ར༻͞ΕΔ

  103. WBMHSJOEͰϝϞϦͷΞϩέʔγϣϯΛݟΔ # valgrind curl http://localhost/resource/example > /dev/null … ==18619== HEAP

    SUMMARY: ==18619== in use at exit: 0 bytes in 0 blocks ==18619== total heap usage: 1,863 allocs, 1,863 frees, 211,125 bytes allocated # valgrind /home/pyama/mruby test.rb … ==12811== HEAP SUMMARY: ==12811== in use at exit: 0 bytes in 0 blocks ==12811== total heap usage: 51,721 allocs, 51,721 frees, 12,028,345,116 bytes allocated
  104. ʗ ?P? ʘ(

  105. TUSBDFͰγεςϜίʔϧͷ౷ܭΛऔΔ # strace -fc /home/pyama/mruby test.rb % time seconds usecs/call

    calls errors syscall ------ ----------- ----------- --------- --------- ---------------- 73.00 0.006317 2 3361 munmap 23.27 0.002014 11 183 brk 2.62 0.000227 0 1734 read 1.11 0.000096 0 3380 mmap 0.00 0.000000 0 3 write 0.00 0.000000 0 16 open 0.00 0.000000 0 23 close NVONBQ͕ࢧ഑త IUUQTMJOVYKNPTEOKQIUNM-%1@NBOQBHFTNBONNBQIUNM
  106. QFSGΛར༻ͯ͠ίʔϧάϥϑΛऔಘ͢Δ # perf record --call-graph dwarf -- /home/pyama/mruby test.rb #

    perf report -g -G —stdio 94.35% 0.03% mruby mruby [.] mrb_str_plus | ---mrb_str_plus | --20.06%-- mrb_vm_exec mrb_vm_run … NSC@TUS@QMVT͕ࢧ഑త IUUQNSVCZPSHEPDTBQJIFBEFSTNSVCZ@'TUSJOHIIUNMNSC@TUS@QMVTGVODUJPO
  107. πʔϧΛར༻ͯ͠ूΊͨ৘ใ͔Β ԾઃΛཱͯΔ w ॲཧ͸)551ϦΫΤετͰϨεϙϯεϘσΟ͸αΠζ͕େ͖͍ w ϝϞϦ(#࢖ͬͯΔΦϫλ w NVONBQ͕ࢧ഑తͰճ਺΋ଟ͍͜ͱ͔ΒɺϝϞϦͷ֬อɺղ์͕
 ଟ͍ͷͰ͸ͳ͍͔ʁ w

    NSC@TUS@QMVT͕ࢧ഑తͰ͋Δ͜ͱ͔Βɺจࣈྻ݁߹͕ଟ͍͜ͱ͕ݪҼʁ NSC@TUS@QMVTSVCZFbDlBz lCz`
  108. NSVCZTJNQMFIUUQ while (t = socket.read(1024)) if block_given? yield t next

    end response_text += t end CPEZΛCZUFͣͭಡΈɺ จࣈྻ݁߹͍ͯ͠Δ
  109. NSVCZTJNQMFIUUQ while (t = socket.read(4096)) if block_given? yield t next

    end response_text += t end ୯७ʹ͸όοϑΝαΠζΛ֦ு͠ɺ ಡΈࠐΈճ਺ΛݮΒͤ͹ϧʔϓ͸ݮΔ
  110. NSC@TUS@QMVT MRB_API mrb_value mrb_str_plus(mrb_state *mrb, mrb_value a, mrb_value b) {

    struct RString *s = mrb_str_ptr(a); struct RString *s2 = mrb_str_ptr(b); struct RString *t; t = str_new(mrb, 0, RSTR_LEN(s) + RSTR_LEN(s2)); memcpy(RSTR_PTR(t), RSTR_PTR(s), RSTR_LEN(s)); memcpy(RSTR_PTR(t) + RSTR_LEN(s), RSTR_PTR(s2), RSTR_LEN(s2)); return mrb_obj_value(t); } ݁߹ޙจࣈྻͷϝϞϦΛ Ξϩέʔτ
  111. NSC@TUS@QMVT B C  BC BC D  BCD BCD

    E  BCDE ϧʔϓ໨ όΠτ ϧʔϓ໨ όΠτ ϧʔϓ໨ όΠτ ݁ՌจࣈྻͷྖҬ͸৽ن࡞੒
  112. BC

  113. NSC@TUS@DBU MRB_API mrb_value mrb_str_cat(mrb_state *mrb, mrb_value str, const char *ptr,

    size_t len) { struct RString *s = mrb_str_ptr(str); size_t capa; size_t total; ptrdiff_t off = -1; ... resize_capa(mrb, s, capa); memcpy(RSTR_PTR(s) + RSTR_LEN(s), ptr, len); mrb_assert_int_fit(size_t, total, mrb_int, MRB_INT_MAX); RSTR_SET_LEN(s, total); RSTR_PTR(s)[total] = '\0'; /* sentinel */ return str; } ͍ΘΏΔSFBMMPDͰ طଘͷྖҬΛ֦ு͍ͯ͠Δ
  114. NSC@TUS@DBU B C  BC BC D  BCD BCD

    E  BCDE ϧʔϓ໨ όΠτ ϧʔϓ໨ όΠτ ϧʔϓ໨ όΠτ ݁ՌจࣈྻͷྖҬ͸ݩจࣈྻΛ֦ு
  115. NSC@TUS@QMVT TUSJOHlBCz TUSJOHlBz TUSJOHlCz  NSC@TUS@DBU TUSJOHlBCz TUSJOHlBz TUSJOHlCz 

    
  116. ͲΕ͘Β͍͕ࠩ͋Δͷ͔ʁ a = "aaa" b = "bbb" 100000.times do |n|

    a += b end a = "aaa" b = "bbb" 100000.times do |n| a << b end TVEPWBMHSJOENSVCZOFXSC  )&"146.."3: JOVTFBUFYJUCZUFTJOCMPDLT UPUBMIFBQVTBHF   CZUFTBMMPDBUFE TVEPWBMHSJOENSVCZDPODBUSC  )&"146.."3: JOVTFBUFYJUCZUFTJOCMPDLT UPUBMIFBQVTBHF  CZUFTBMMPDBUFE NSC@TUS@QMVT NSC@TUS@DPODBU ສϧʔϓͩͱ ϝϞϦΞϩέʔγϣϯഒ
  117. ଟ֯తͳௐࠪΛ͠Α͏ wखʹೃછΉπʔϧΛ͍͔ͭ࣋͘ͱ͏ wϓϩάϥϛϯάݴޠ΋ʮ࣮૷ʯ͕͋ΔͳΒ͹ɺݪҼ͸ ɹΘ͔Δ͜ͱ͕Ͱ͖Δ

  118. w HEC5IF(/6%FCVHHFS w TUSBDF5SBDFTZTUFNDBMMTBOETJHOBMT w QFSG1FSGPSNBODFBOBMZTJTUPPMTGPS-JOVY w WBMHSJOEBTVJUFPGUPPMTGPSEFCVHHJOHBOEQSPpMJOHQSPHSBNT

  119. ετϨʔδͷເͱల๬

  120. ʁʁʁʮຊ൪ͷXPSEQSFTTαΠτʹ BC͔͚ͨΒؔ܎ͳ͍αΠτ͕མͪ·ͨ͠ʯ

  121. ίϯςφͩΑͶʁ w DHSPVQΛར༻ͯ͠$16ɺϝϞϦͱ΋ʹϦιʔε੍ݶঢ়ଶ w Ұͭͷίϯςφͷෛՙ͕γεςϜϫΠυͰӨڹΛٴ΅͢͜ͱ͸ߟ͑ͮΒ͍

  122. QTFGcHSFQBQBDIFcHSFQ9 OTDE BQBDIF%'03&(306/%9 QFSGSFDPSEDBMMHSBQIEXBSGQ QFSGSFQPSUH(TUEJP BQBDIFJPODVCF@MPBEFS@MJO@TP<>YCGD c YGEGGD c c;&/%@*/$-6%&@03@&7"-@41&$@$0/45@)"/%-&3

    cFYFDVUF@FY cYGEGGD cc cc;&/%@*/$-6%&@03@&7"-@41&$@5.17"3@)"/%-&3 ccFYFDVUF@FY ccYGEGGD cc;&/%@*/$-6%&@03@&7"-@41&$@5.17"3@)"/%-&3 ccFYFDVUF@FY ccYGEGGD cc;&/%@*/$-6%&@03@&7"-@41&$@5.17"3@)"/%-&3 ccFYFDVUF@FY "QBDIF)551%͸9Λ͚ͭΔͱ γϯάϧϞʔυͰىಈ͢Δ
  123. TUSBDFGDQ UJNFTFDPOETVTFDTDBMMDBMMTFSSPSTTZTDBMM  PQFO GTUBU SFBE MTUBU SFDWGSPN XSJUF DMPTF

    TUBU QPMM TUSBDFͰ͸PQFO͕ଟ͍
  124. TUSBDFGDQ UJNFTFDPOETVTFDTDBMMDBMMTFSSPSTTZTDBMM  PQFO MTUBU XSJUFW SFBE XSJUF DMPTF TUBU

    ͨ·ʹΊͬͪΌ஗͍͕࣌͋Δ IUUQTMJOVYKNPTEOKQIUNM-%1@NBOQBHFTNBOTUBUIUNM
  125. ͦ΋ͦ΋1)1ͱετϨʔδ͸ ૬ੑ͕ѱ͍ w 1)1͸௨ৗϑΝΠϧΛ౎౓։͍ͯɺίϯύΠϧ࣮ͯ͠ߦ͢Δ w /"4 /'4 ʹ͓͍ͯখ͍͞ϑΝΠϧΛଟ͘։͘ͱ͍͏ͷ͸
 ύϑΥʔϚϯεతʹͱͯ΋ۤख

  126. Զͨͪͷ1)1ʹ͸ 01DBDIF͕͋Δ

  127. None
  128. ݴ͏ͯ΋ɺѱҙʹऑ͍ w XIJMFʙpOEʙFYFDͱ͔΍ΒΕΔͱ฼؋ϫΠυͰ཯଎ʹͳΔ w TFDDPNQ #1' Λར༻͢ΔͳͲ੍ݶΛݕ౼ SMJNJUͰ΋͍͍͔΋

  129. ࠓޙɺQZBNB͕ ΍͍͖͍ͬͯͨ͜ͱ ͕࣌ؒ͋Ε͹࿩͢

  130. IBDP3%4

  131. %)BDP

  132. ֵ৽తεέδϡʔϥ

  133. ·ͱΊ

  134. ࠓ೔࿩ͨ͜͠ͱͨͪ w ίϯςφͷϘτϧωοΫ͸-JOVYίϚϯυΛۦ࢖ͯ͠ɺݪ Ҽʹ͋ͨΓΛ෇͚ͯɺιʔεΛಡΉͷ͕Ԧಓ w ͦͷγεςϜίʔϧ͕ԿΛ͢Δͷ͔جૅతֶश͕ඞཁ w ίϯςφ͸͋͘·ͰϓϩηεͰ͋Δ

  135. w TMVCɿTMBCPCKFDUͷ࡞੒ॲཧΛݟ͍ͯ͘ IUUQT LFSOIBDLIBUFOBCMPHDPNFOUSZ   w 4ZTUFNEೖ໳  1SJWBUF5NQͷ࣮૷ΛݟΔ

    IUUQ FOBLBJIBUFOBCMPHDPNFOUSZ  ࢀߟจݙ
  136. 5IBOLZPV ࠷৽ͷ࠾༻৘ใΛνΣοΫˠ !QC@SFDSVJU

  137. 2"