nariã¨ç”³ã—ã¾ã™ï¼Ž
GWä¸ã«GCã®æ”¹è‰¯ã‚’è¡Œã„ã¾ã—ãŸã®ã§ï¼Œå ±å‘Šã„ãŸã—ã¾ã™ï¼Ž
= Railsã®ãƒ’ープ調査
2ヶ月ã»ã©å‰ã«ï¼Œãµã¨æ°—ã«ãªã£ã¦RailsãŒã©ã‚“ãªé¢¨ã«ãƒ’ープを使用ã—ã¦ã„ã‚‹ã‹èª¿æŸ»ã—ã¦ã¿ã¾ã—ãŸï¼Ž
以下ã®ã‚°ãƒ©ãƒ•ã¯scaffoldã—ãŸRailsアプリを動ã‹ã—ãŸéš›ã®ã‚‚ã®ã§ã™ï¼Ž
調査å‰ã¯æ¼ 然ã¨ã€Œæ–‡å—列ãŒä¸€ç•ªå¤šã„ã‚“ã˜ã‚ƒãªã„ã‹ãªãã€ã¨è€ƒãˆã¦ã„ãŸã®ã§ã™ãŒï¼Œå®Ÿéš›ã«
ã¯æ§‹æ–‡æœ¨ã‚ªãƒ–ジェクトãŒãƒ’ープã®åŠåˆ†ã‚’å ã‚ã¦ã„るよã†ã§ã™ï¼Ž
ãã®æ§‹æ–‡æœ¨ã‚ªãƒ–ジェクトを更ã«è©³ã—ã調ã¹ãŸã‚°ãƒ©ãƒ•ãŒä»¥ä¸‹ã§ã™ï¼Ž
ã“ã®ã‚°ãƒ©ãƒ•ã«ã‚ã‚‹NODE_METHODã‚„NODE_CFUNC,NODE_FBODYã¯ãƒ¡ã‚½ãƒƒãƒ‰å®šç¾©ã®éš›ã«
使用ã•ã‚Œï¼ŒNODE_WHILEã‚„NODE_BLOCKã¯VMã®å†…部ã§ä½¿ç”¨ã•ã‚Œã¦ã„るよã†ã§ã™ï¼Ž
= 長寿命GC
æ›´ã«èª¿æŸ»ã‚’ã™ã‚‹ã¨ï¼Œã“れらã®ã‚ªãƒ–ジェクトã¯ã¨ã¦ã‚‚長生ããªäº‹ãŒåˆ†ã‹ã‚Šã¾ã—ãŸï¼Ž
ãã“ã§ï¼Œã“ã‚Œã‚‰ã‚’é•·å¯¿å‘½é ˜åŸŸã«éš”離ã—ã¦ã—ã¾ãŠã†ï¼Œã¨ã„ã†æ”¹å–„を今回行ã„ã¾ã—ãŸï¼Ž
部分的ãªä¸–代別GCã¨ã„ã†ã‚¤ãƒ¡ãƒ¼ã‚¸ã§ã™ï¼Ž
ã“ã®ã‚¢ã‚¤ãƒ‡ã‚¢ã¯ï¼Œã¾ã¤ã‚‚ã¨ã•ã‚“ã‹ã‚‰ã‚¢ãƒ‰ãƒã‚¤ã‚¹ã—ã¦ã„ãŸã ã„ãŸã‚‚ã®ã§ã™ï¼Ž
= 実装メモ
major gcã‚’è¡Œã†ã‚¿ã‚¤ãƒŸãƒ³ã‚°ã¯ãƒ’ープãŒæ‹¡å¼µã•ã‚Œã‚‹æ™‚ã¨GC.startã®æ™‚ã«ã—ã¦ã„ã¾ã™ï¼Ž
ライトãƒãƒªã‚¢ã®æ‰‹æ³•ã«ã¯remembered_setを使ã„ã¾ã—ãŸï¼Žã‚ªãƒ–ジェクトãŒãƒ©ã‚¤ãƒˆ
ãƒãƒªã‚¢ã«ã‚ã‚‹ã“ã¨ã‚’示ã™ç‚ºã« FL_RESERVED フラグを使用ã—ã¦ã„ã¾ã™ï¼Ž
= ベンãƒãƒžãƒ¼ã‚¯
scaffoldã—ãŸã ã‘ã®Railsアプリã§GCã®ãƒ—ãƒãƒ•ã‚¡ã‚¤ãƒ«ã‚’å–ã‚Šã¾ã—ãŸï¼Ž
GC回数
æ”¹å–„å‰ : 35
改善後 : 31
ç·GC時間(ms)
æ”¹å–„å‰ : 332.02
改善後 : 284.01
å¹³å‡GC時間(ms)
æ”¹å–„å‰ : 9.48
改善後 : 9.16
ã¾ãŸï¼ŒRailsアプリã®ãƒ’ープã®çŠ¶æ…‹ã‚’作り出ã™ã‚ˆã†ãªãƒ™ãƒ³ãƒãƒžãƒ¼ã‚¯ã‚³ãƒ¼ãƒ‰ã‚’書ã„
ã¦ï¼Œãã®ãƒ—ãƒãƒ•ã‚¡ã‚¤ãƒ«ã‚‚å–ã‚Šã¾ã—ãŸï¼Ž
GC回数
æ”¹å–„å‰ : 7
改善後 : 6
ç·GC時間(ms)
æ”¹å–„å‰ : 1452.09
改善後 : 1208.07
å¹³å‡GC時間(ms)
æ”¹å–„å‰ : 207.44
改善後 : 201.34
使用ã—ãŸã‚³ãƒ¼ãƒ‰ã¯æœ¬ãƒ¡ãƒ¼ãƒ«ã«æ·»ä»˜ã—ã¦ãŠã‚Šã¾ã™ï¼Ž
= パッãƒ
ç¾åœ¨ã®æœ€æ–°ã®revisionã¸ã®ãƒ‘ッãƒã¨ruby1.9.1-p0ã¸ã®ãƒ‘ッãƒã‚’作æˆã—ã¾ã—ãŸï¼Ž
本メールã«æ·»ä»˜ã—ã¦ãŠã‚Šã¾ã™ï¼Ž
よã‚ã—ããŠé¡˜ã„ã„ãŸã—ã¾ã™ï¼Ž