Groupcache: ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ์˜ ์ƒํ•œ ๋ฌธ์ œ

์— ๋งŒ๋“  2016๋…„ 04์›” 13์ผ  ยท  5์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: golang/groupcache

์•ˆ๋…•,

๊ทธ๋ฃน ์บ์‹œ ๋•๋ถ„์— ๊ฑฐ์˜ ์„ฑ๊ณต์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋” ์ดํ•ดํ•˜๊ณ  ์‹ถ์€ ํ•œ ๊ฐ€์ง€๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๋ฉ”๋ชจ๋ฆฌ ์š”๊ตฌ์˜ ์ƒํ•œ์„ ์ถ”์ •/์•Œ๊ณ  ์žˆ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์€ ๋‹จ์ˆœํžˆ ๊ทธ๋ฃน ์บ์‹œ์—์„œ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” 6GB vm์˜ ์‹คํ–‰ ์ค‘์ธ ๊ทธ๋ฃน ์บ์‹œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ์šฐ๋ฆฌ์˜ ์ฒซ ๋ฒˆ์งธ ์˜๋„๋Š” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์บ์‹œ ํฌ๊ธฐ๋ฅผ 5GB๋กœ ์„ค์ •ํ•˜๊ณ  1GB๋ฅผ ์šด์˜ ์ฒด์ œ์™€ ์‚ฌ๋ฌผ์„ ์œ„ํ•œ ์—ฌ์œ  ๊ณต๊ฐ„์œผ๋กœ ๋‚จ๊ฒจ๋‘๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

OOM ํ‚ฌ๋Ÿฌ๊ฐ€ ํ˜ธ์ถœ๋˜์–ด ํ”„๋กœ๋•์…˜ ๋ถ€ํ•˜์—์„œ ์ฆ‰์‹œ ์ถฉ๋Œํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” OOM ํ‚ฌ๋Ÿฌ๊ฐ€ ์‹œ์ž‘๋˜๊ธฐ ์ „์— ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ 6GB ๋ฏธ๋งŒ์œผ๋กœ ์œ ์ง€๋˜๋„๋ก ์ด ์ˆซ์ž๋ฅผ 2GB ๋ฏธ๋งŒ์œผ๋กœ ๋‚ฎ์ถ”์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋‹ค์Œ ๋‹จ๊ณ„๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ”„๋กœํŒŒ์ผ๋งํ•˜๋Š” ๊ฒƒ์ด์—ˆ๊ณ  ํž™ ํฌ๊ธฐ๋Š” ๊ทธ๋ฃน ์บ์‹œ์—์„œ ๊ตฌ์„ฑํ•œ 2GB๋ฅผ ํ›จ์”ฌ ์ดˆ๊ณผํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ”„๋กœ์„ธ์Šค๋Š” 4-6GB์˜ ๋žจ์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๊ฐ€์žฅ ์ตœ๊ทผ์˜ ์‹œ๋„๋Š” ๋ช‡ ๋ถ„๋งˆ๋‹ค ์ˆ˜๋™์œผ๋กœ debug.FreeOSMemory()๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด์—ˆ๊ณ , ์ด๊ฒƒ์ด ์‹คํ–‰๋˜๋ฉด ์–ผ๋งˆ ์ง€๋‚˜์ง€ ์•Š์•„ ํ”„๋กœ์„ธ์Šค์— ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์–‘์ด ์ค„์–ด๋“ค๊ณ  OS์— ๋งŽ์€ ๊ฒƒ์ด ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ OOM ํ‚ฌ๋Ÿฌ๋กœ ์ธํ•ด ๊ฐ€๋” ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ๋ฅผ ๋ฒ„ํผ๋งํ•˜๊ธฐ ์œ„ํ•ด SSD ์Šค์™‘์„ ์ถ”๊ฐ€ํ–ˆ์ง€๋งŒ ๋ฌธ์ œ๊ฐ€ ์—†๋Š”์ง€ 48์‹œ๊ฐ„์ด ์ง€๋‚œ ํ›„ ์ด๋Ÿฌํ•œ ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ํŠธ๋ž˜ํ”ฝ์ด ์ผ์‹œ์ ์œผ๋กœ ์ฆ๊ฐ€ํ•˜์—ฌ(์ƒ๋‹นํžˆ ์ฆ๊ฐ€) ๋‹จ์ผ ์‹œ์Šคํ…œ์—์„œ OOM์ด ์ข…๋ฃŒ๋œ ๋‹ค์Œ ์ด๋Ÿฌํ•œ ์ผ์ด ๋ฐœ์ƒํ•œ ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ์‹œ์Šคํ…œ์œผ๋กœ ๋ˆˆ๋ฉ์ด์ฒ˜๋Ÿผ ๋ถˆ์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด 2GB ์บ์‹œ ์„ค์ •(groupcache.NewGroup์˜ ๋‘ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋ผ๊ณ ๋„ ํ•จ)์„ ๋” ๋‚ฎ์€ ์ž…์ˆ  1GB๋กœ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์บ์‹œ์— 1GB๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” 6GB VM์„ ๊ฐ–๋Š” ๊ฒƒ์€ ์•ฝ๊ฐ„ ์–ด๋ฆฌ์„์€ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์บ์‹ฑ์„ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์— ๋Œ€ํ•œ go์˜ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์˜ ๋‹จ์ ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

์ค‘์š”ํ•œ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ์šฐ๋ฆฌ์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” dl.google.com๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ค‘๊ฐ„ ํฌ๊ธฐ์˜ ํŒŒ์ผ(50mb-1gb, 100MB ์ฒญํฌ์— ์บ์‹œ๋จ)์˜ ๋‹ค์šด๋กœ๋“œ๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๊ทธ๋ฃน ์บ์‹œ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ œ๊ณตํ•ด์•ผ ํ•˜๋Š” ํŒŒ์ผ์ด ์žˆ๋Š” ๋” ๋Š๋ฆฌ๊ณ  ๋” ๋น„์‹ผ API ์•ž์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ด๊ฒƒ์„ ์ฐพ์„ ๋•Œ ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ›Œ๋ฅญํ•œ ํ•ด๊ฒฐ์ฑ…์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์œ ํ˜•์˜ ๋ฌธ์ œ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ํŒ์— ๋Œ€ํ•ด ๋Œ€๋‹จํžˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ œ๊ฐ€ ๋†“์น˜๊ณ  ์žˆ๋Š” ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋Š” ์ƒ๊ฐ์ด ๊ณ„์† ๋“ญ๋‹ˆ๋‹ค.

๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ํ†ต์ฐฐ๋ ฅ์„ ์ œ๊ณตํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

  • ์Šค์ฝง

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

ํ›„์† ์กฐ์น˜๋ฅผ ์ทจํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ์—„์ฒญ๋‚œ ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ํ•œ๋ฒˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ๋ฌธ์„œ์— ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด +1์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  5 ๋Œ“๊ธ€

์ด๋Š” ์ฃผ๋กœ GCPrecent์˜ ๊ธฐ๋ณธ ์„ค์ •์„ 100%๋กœ ์„ค์ •ํ•˜์—ฌ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋งˆ์ง€๋ง‰ GC ์‹คํ–‰ ์ดํ›„ ๋‘ ๋ฐฐ์˜ ๊ธˆ์•ก์„ ํ• ๋‹นํ•œ ๊ฒฝ์šฐ์—๋งŒ GC๊ฐ€ ์ž๋™์œผ๋กœ ํŠธ๋ฆฌ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋„ ๋น„์Šทํ•œ ์ƒํ™ฉ์— ์žˆ์—ˆ๊ณ  Groupcache์™€ ๊ฐ™์€ ํ”„๋กœํ•„์˜ ๊ฒฝ์šฐ 10% ์ •๋„๋กœ ์กฐ์ •ํ•˜๋Š” ๊ฒƒ์ด ๋” ํ•ฉ๋ฆฌ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. https://golang.org/pkg/runtime/debug/#SetGCPercent ์ฐธ์กฐ

๋‹ต์žฅ์„ ๋ณด๋‚ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ๊ณง ์‹œ๋„ํ•˜๊ณ  ๋‹ค์‹œ ๋ณด๊ณ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค! ๊ฐœ๋…์ ์œผ๋กœ ์™„์ „ํžˆ ์ดํ•ด๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

์กฐ๊ธˆ ์ „์ด์ง€๋งŒ IIRC ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ 10% ์ด์ƒ, ์•„๋งˆ๋„ 20 ์ •๋„์˜€์„ ๋•Œ - ์ •์ƒ์ด์—ˆ๊ณ  ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ์˜ ๋‘ ๋ฐฐ๋ฅผ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

@adg ์•„๋งˆ๋„ README์—์„œ ์–ธ๊ธ‰ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ํ•จ์ •์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

ํ›„์† ์กฐ์น˜๋ฅผ ์ทจํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ์—„์ฒญ๋‚œ ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ํ•œ๋ฒˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ๋ฌธ์„œ์— ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด +1์ž…๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰