Elasticsearch๋ฅผ ์ฒ˜์Œ ์„ค์น˜ํ•˜๋‹ค ๋ณด๋ฉด ํ•ญ์ƒ ๋ณด๋Š” ์—๋Ÿฌ๋“ค์ด ๋ช‡ ๊ฐ€์ง€ ์žˆ์Šต๋‹ˆ๋‹ค.

 1) root ๊ณ„์ •์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ

 2) openfiles, max process ๊ฐ’์„ ์ˆ˜์ •ํ•ด์•ผํ•˜๊ณ 

 3) swappiness ๊ฐ’ ์„ค์ • ๋ณ€๊ฒฝ ์š”์ฒญ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

Elasticsearch ์‹คํ–‰ ์‹œ ๋ฐœ์ƒํ•œ Max user processes Error

๊ทธ ์ค‘์— elasticsearch๋Š” openfiles์™€ max process๋Š” ์ตœ์†Œ 65535๋กœ ์„ค์ •ํ•˜๋ผ๋ฉฐ, ์ปค๋„์—์„œ ํ•ด์ฃผ๋Š” ๊ธฐ๋ณธ ์„ค์ •๋ณด๋‹ค ํฐ ๊ฐ’์„ ์š”๊ตฌํ•˜๋Š”๋ฐ์š”,

์˜ค๋Š˜์€ ํ•ด๋‹น ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์ •ํ™•ํžˆ ์–ด๋–ค ๊ฒƒ์„ ๊ฐ€๋ฅดํ‚ค๋Š”์ง€ ๊ทธ๋ฆฌ๊ณ  ์„ค์ •๋œ ๊ฐ’ ์ด์ƒ์ด ๋˜๋ฉด ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

1. Max user processes

Max user processes์˜ ์˜๋ฏธ๋Š” ํ•˜๋‚˜์˜ ๊ณ„์ •์—์„œ ์ตœ๋Œ€๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” process์˜ ๊ฐœ์ˆ˜๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. OS์—์„œ์˜ ํ™•์ธ์€

# ulimit -a (sofe ulimit)

# ulimit -aH (hard ulimit)

์œ„ ๋ช…๋ น์œผ๋กœ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. (ํ˜„์žฌ ์ œ ์„œ๋ฒ„์˜ ์„ค์ • ๊ฐ’์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.)

max user processes

๊ทธ๋Ÿผ ์•„๋ž˜ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์„ค์ •๋œ max user processes์˜ ๊ฐ’์„ ๋„˜๊ธฐ๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€ ํ™•์ธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

4000๊ฐœ Thread ์ƒ์„ฑ ํ›„ ์œ ์ง€

๋Œ€๋žต์ ์ธ ์ฝ”๋“œ์˜ ๋‚ด์šฉ์€ HTTP ์š”์ฒญ์ด ์˜ค๋ฉด ๋น„๋™๊ธฐ๋กœ 4์ฒœ๊ฐœ์˜ Thread๋ฅผ ๋™์‹œ์— ์ƒ์„ฑํ•˜๊ณ  20๋ถ„๊ฐ„ ์œ ์ง€ํ•˜๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ๋กœ Thread๋ฅผ ๋Š˜๋ ค๋ณด๋ฉด,

Thread ์ƒ์„ฑ ์ค‘ OOM ๋ฐœ์ƒ

๊ทธ๋ฆผ์ฒ˜๋Ÿผ ulimit -a ๋ช…๋ น์˜ max user processes ๊ฒฐ๊ณผ์™€ ๊ฐ™์ด ec2-user ๊ณ„์ •์€ 1024๊ฐœ๊นŒ์ง€ ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•œ ํ›„, OOM ์—๋Ÿฌ ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐœ์ƒํ•˜๋ฉฐ ๋ฉˆ์ถฐ๋ฒ„๋ฆฌ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. (์ด ๊ฒฝ์šฐ ec2-user ๊ณ„์ •์—์„œ๋Š” ์‰˜ ๋ช…๋ น์–ด ์ž…๋ ฅ ๋“ฑ ์–ด๋–ค ์ž‘์—…๋„ ๋™์ž‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.)

<๋ฆฌ๋ˆ…์Šค์—์„œ๋Š” ์Šค๋ ˆ๋“œ์™€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋™์ผํ•˜๊ฒŒ ๋ด…๋‹ˆ๋‹ค.>

 

 

2. Open files

๋‹ค์Œ์€ Open files์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ’์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ํŒŒ์ผ์˜ ๊ฐœ์ˆ˜๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๋ฆฌ๋ˆ…์Šค๋Š” ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋‚˜ ์„ธ์…˜(์†Œ์ผ“)๋“ค์„ ํŒŒ์ผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ๊ฐ’์˜ ์„ค์ •์€ ์„œ๋ฒ„์—์„œ์˜ Connection์—ฐ๊ฒฐ ์ž‘์—…์— ๋งค์šฐ ์ค‘์š”ํ•œ ๋‚ด์šฉ์ด ๋ฉ๋‹ˆ๋‹ค.

(์„ค์ • ๊ฐ’์„ ๋„˜์–ด๊ฐ€๊ฒŒ ๋˜๋ฉด ๋ฆฌ๋ˆ…์Šค์—์„œ ํŒŒ์ผ์„ ์—ด ์ˆ˜ ์—†์–ด ํ”„๋กœ์„ธ์Šค ์‹คํ–‰์ด๋‚˜ Connection ์—ฐ๊ฒฐ์ด ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ!)

๊ทธ๋Ÿผ ์†Œ์ผ“์„ open files ๊ฐ’ ๋ณด๋‹ค ๋งŽ์ด ๋งŒ๋“ค์–ด ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

(1) Java ํ™˜๊ฒฝ TEST

 - RestTemplate๋กœ ์†Œ์ผ“ ์ƒ์„ฑ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ , ์š”์ฒญ์„ ๋ฐ›์€ ์„œ๋ฒ„์—์„œ 20๋ถ„๊ฐ„ ์‘๋‹ต์„ ๋Œ€๊ธฐ ์‹œํ‚ต๋‹ˆ๋‹ค.

 - ์š”์ฒญ์„ ๋™์‹œ์— 1100๊ฐœ๋ฅผ ๋ณด๋‚ด open files๊ฐ€ 1024๋กœ ์ œํ•œ์ธ ์„œ๋ฒ„์— ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ…Œ์ŠคํŠธ ์„ฑ๊ณต์ž…๋‹ˆ๋‹ค.

   (๊ธฐ๋ณธ์ ์œผ๋กœ java, spring ๊ด€๋ จ file์ด ๋ช‡ ๊ฐœ ์˜คํ”ˆ๋ฉ๋‹ˆ๋‹ค.)

์•„๋ž˜๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค.

connection ์†Œ์ผ“ ์ƒ์„ฑ ํ›„ ์‘๋‹ต ๋Œ€๊ธฐ Code

๊ทธ๋ฆฌ๊ณ  ๋™์‹œ์— ์š”์ฒญ์„ ๋ณด๋‚ผ API ์š”์ฒญ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

API ์š”์ฒญ ์‰˜

์‰˜์„ ์‹คํ–‰ํ•˜์—ฌ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด

openfiles ๊ฐœ์ˆ˜๊ฐ€ 1024 ๊ฐ’์„ ๋„˜์–ด 1516๊ฐœ ๊นŒ์ง€ ์—ด๋ฆผ!

์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ์†Œ์ผ“์ด 1024๊ฐœ๊ฐ€ ๋„˜์–ด๋„ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์—†์ด ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ํ•œ๋ฒˆ ๋” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

2048๊ฐœ ๊นŒ์ง€ ์ƒ์„ฑ๋œ ๋ชจ์Šต

์ด์ œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ์€ ๋”ฑ 2048๊ฐœ ๊นŒ์ง€๋งŒ ์—ด๋ฆฐ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ์š”, openfiles์˜ ๊ฐ’์€ soft๋กœ ์„ค์ •๋œ ๊ฐ’์ด ์•„๋‹Œ

๊ทธ๋ฆผ์ฒ˜๋Ÿผ Hard ์˜ต์…˜ ๊ฐ’๊นŒ์ง€ file์ด ์ƒ์„ฑ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ…! ์•Œ๊ณ  ๋ณด๋‹ˆ java ํ™˜๊ฒฝ์—์„œ๋Š” hard ๊ฐ’์„ ๋”ฐ๋ผ๊ฐ€๋Š”๊ฒŒ ๋งž์ง€๋งŒ Python์—์„œ๋Š” ์•„๋‹ˆ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค

 

(2) Python ํ™˜๊ฒฝ TEST

๋นจ๊ฐ„ ๋ฐ•์Šค : 1024๊ฐœ์˜ ์—ด๋ฆฐ ํŒŒ์ผ ์ƒ์„ฑ / ํŒŒ๋ž€ ๋ฐ•์Šค : 1024๊ฐœ ์ดํ›„ ํŒŒ์ผ์„ ํ•˜๋‚˜ ๋” ์—ด์–ด๋ณธ๋‹ค

์œ„ ์ฒ˜๋Ÿผ ํŒŒ์ด์ฌ ์Šคํฌ๋ฆฝํŠธ๋กœ file์„ ์ž„์˜๋กœ ์—ด์–ด๋ด…๋‹ˆ๋‹ค. 1021๊ฐœ ๊นŒ์ง€๋Š” ํŒŒ์ผ์ด ๋ฌธ์ œ์—†์ด ์—ด๋ฆฌ์ง€๋งŒ(stdin, stdout, stderr ํ‘œ์ค€ ์ž…/์ถœ๋ ฅ 3๊ฐœ ์ œ์™ธ)

์ดํ›„๋กœ ์—ฌ๋Š” ํŒŒ์ผ์—์„œ๋Š” Too many open files ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค!

 

(3) Java์™€ Python ํ™˜๊ฒฝ์˜ ์ฐจ์ด?

ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ Java๋Š” hard ์˜ต์…˜๊นŒ์ง€ ํŒŒ์ผ์ด ์˜คํ”ˆ๋˜๊ณ  Python์€ soft ๊ฐ’๊นŒ์ง€ ์˜คํ”ˆ๋จ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด strace ๋ช…๋ น์„ ํ†ตํ•ด java ํ”„๋กœ์„ธ์Šค ๋™์ž‘์„ ์ถ”์ ํ•ด๋ณด๋ฉด

kernel 5.15ver์—์„œ ํ…Œ์ŠคํŠธ (์ด์ „ ๋ฒ„์ „์€ prlimit64 ํ•จ์ˆ˜ ๋Œ€์‹  getrlimit, setrlimt ํ•จ์ˆ˜ ์‚ฌ์šฉ)

์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ java ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹œ์ž‘๋จ๊ณผ ๋™์‹œ์— prlimit64๋ผ๋Š” ํ•จ์ˆ˜๊ฐ€ rlim_cur=1024๊ฐ’์„ rlim_max=2*1024(hard limit) ๊ฐ’๊นŒ์ง€ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋กœ๊ทธ๊ฐ€ ์ฐํ˜€์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

JDK์—์„œ MaxFDLimit ์˜ต์…˜ ํ™œ์„ฑํ™” (๊ธฐ๋ณธ๊ฐ’)

๊ทธ ์ด์œ ๋Š” ์„ค์น˜๋œ JVM์—์„œ MaxFDLimit ์˜ต์…˜์„ ํ†ตํ•ด limit์„ ์˜ฌ๋ ค์ฃผ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค! (๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋œ ์˜ต์…˜)

์ฆ‰, ๋ฆฌ๋ˆ…์Šค OS์—์„œ๋Š” JDK ์‹คํ–‰ ์‹œ ์ปค๋„์—์„œ prlimit64 ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ž๋™์œผ๋กœ limit ์‚ฌ์ด์ฆˆ๋ฅผ ์ฆ๊ฐ€์‹œ์ผœ์ค€๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

 

3. ์ •๋ฆฌ

 - (Linux ํ™˜๊ฒฝ) JAVA์—์„œ ๋™์‹œ์— ์ƒ์„ฑ ๊ฐ€๋Šฅํ•œ ์“ฐ๋ ˆ๋“œ ์ˆ˜๋Š” Max user processes๋ฅผ ๋”ฐ๋ผ๊ฐ„๋‹ค.

 - (Linux ํ™˜๊ฒฝ) JAVA์—์„œ ์†Œ์ผ“ ํ†ต์‹ (API๋‚˜ ๋ชจ๋“  Connection)์€ open files ์˜ต์…˜์„ ๋”ฐ๋ผ๊ฐ„๋‹ค.

  -> JAVA์—์„œ๋Š” JDK ์ฝ”๋“œ์—์„œ ์ž๋™์œผ๋กœ soft limit๊ฐ’์€ hard limit๊ฐ’๊นŒ์ง€ ์—…๋ฐ์ดํŠธ ๋จ

  -> Python์€ soft limit ๊ฐ’์—์„œ ์ œํ•œ์ด ๊ฑธ๋ฆผ

 

๋‚˜์˜ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์— ๋งž๊ฒŒ, Max user processes์™€ open files์˜ ์ ์ ˆํ•œ ๊ฐ’์„ ์ฐพ์•„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

 

 

 

<๊ณต๋™์ €์ž>

https://giraffe-lee.tistory.com/7

 

<์ฐธ์กฐ>

https://techblog.woowahan.com/2569/

+ Recent posts