1. File Descriptor 1024๋Š” ์™œ ๋ถ€์กฑํ•˜๊ณ , 65536์€ ์™œ ์ถฉ๋ถ„ํ•œ๊ฐ€?

ISS-162) Proxmox LXC Nginx 500 ์—๋Ÿฌ์—์„œ Proxmox LXC์˜ Nginx๊ฐ€ (24: No file descriptors available) ์—๋Ÿฌ๋ฅผ ๋ฑ‰์œผ๋ฉฐ ๋ป—์–ด๋ฒ„๋ฆฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฒ”์ธ์€ ์–ด์ด์—†๊ฒŒ๋„ ulimit -n์˜ ๊ธฐ๋ณธ๊ฐ’์ธ 1024์˜€์ฃ .

๊ทธ๋ž˜์„œ ํ•ด๊ฒฐ์ฑ…์œผ๋กœ 65536์ด๋ผ๋Š” ์ˆซ์ž๋ฅผ ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทผ๋ฐ ์ด๋Ÿฐ ์˜๋ฌธ์ด ๋“ค๋”๊ตฐ์š”.

  1. 65536๋„ ์–ธ์  ๊ฐ„ ๋‹ค ์†Œ๋ชจ๋˜๋Š” ๊ฑฐ ์•„๋‹Œ๊ฐ€?

  2. FD๊ฐ€ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ดˆ๊ธฐํ™”(์žฌ์‚ฌ์šฉ)๋˜๋Š” ๊ฑฐ๋ผ๋ฉด, 1024๋Š” ์™œ ๋ถ€์กฑํ–ˆ๋˜ ๊ฑฐ์ง€?

  3. ์™œ ํ•˜ํ•„ 65536์ธ๊ฐ€? ๊ทธ๋ƒฅ 10000์ด๋‚˜ 50000๋„ ์•„๋‹ˆ๊ณ .

2. FD๋Š” ์†Œ๋ชจํ’ˆ์ด ์•„๋‹ˆ๋ผ โ€˜์žฌํ™œ์šฉ ๋Œ€๊ธฐํ‘œโ€™๋‹ค

๊ฐ€์žฅ ๋จผ์ € ๊ฐ€์กŒ๋˜ ์˜๋ฌธ, โ€œ65536๋„ ์–ธ์  ๊ฐ€ ๋‹ค ์“ฐ๋ฉด ๋ป—๋Š” ๊ฑฐ ์•„๋‹Œ๊ฐ€?โ€๋ถ€ํ„ฐ ์•Œ์•„๋ด…์‹œ๋‹ค.

๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜๋ฉด, FD๋Š” ์†Œ๋ชจํ’ˆ์ด ์•„๋‹™๋‹ˆ๋‹ค. ISS-162์—์„œ โ€œ๋Œ€๊ธฐํ‘œโ€๋ผ๊ณ  ๋น„์œ ํ–ˆ๋˜ ์ด์œ ๊ฐ€ ์—ฌ๊ธฐ ์žˆ์Šต๋‹ˆ๋‹ค.

  • FD๋Š” ํ”„๋กœ์„ธ์Šค(Nginx)๊ฐ€ ํŒŒ์ผ์ด๋‚˜ ๋„คํŠธ์›Œํฌ ์†Œ์ผ“์„ ์—ด ๋•Œ๋งˆ๋‹ค ์ปค๋„๋กœ๋ถ€ํ„ฐ ๋ฐ›๋Š” โ€˜๋ฒˆํ˜ธํ‘œโ€™์ž…๋‹ˆ๋‹ค.

  • ์ž‘์—…์ด ๋๋‚˜๊ณ  ํŒŒ์ผ์ด๋‚˜ ์†Œ์ผ“์„ ๋‹ซ์œผ๋ฉด(close), ์ด ๋ฒˆํ˜ธํ‘œ๋Š” ์ฆ‰์‹œ ์ปค๋„์— ๋ฐ˜๋‚ฉ๋ฉ๋‹ˆ๋‹ค.

  • ๋ฐ˜๋‚ฉ๋œ ๋ฒˆํ˜ธํ‘œ๋Š” ๋‹ค๋ฅธ ์š”์ฒญ์ด ์ฆ‰์‹œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰, ulimit -n 65536์˜ ์˜๋ฏธ๋Š” โ€˜๋ˆ„์  65536๋ฒˆโ€™ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๋œป์ด ์•„๋‹ˆ๋ผ, **โ€œ๋™์‹œ์— ์ตœ๋Œ€๋กœ ์—ด์–ด๋‘˜ ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ/์†Œ์ผ“์˜ ๊ฐœ์ˆ˜๊ฐ€ 65536๊ฐœโ€**๋ผ๋Š” ๋œป์ž…๋‹ˆ๋‹ค.

100๋งŒ ๋ช…์˜ ์œ ์ €๊ฐ€ ๋ฐฉ๋ฌธํ–ˆ์–ด๋„, โ€˜๋™์‹œ์—โ€™ ์ ‘์†ํ•œ ์œ ์ €๊ฐ€ 100๋ช…์ด๋ผ๋ฉด FD๋Š” ๊ทธ 100๋ช…(+a)๋งŒํผ๋งŒ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์„ ๋ฟ์ž…๋‹ˆ๋‹ค. ๋ฐฉ๋ฌธ์ž๊ฐ€ ์ ‘์†์„ ๋Š์œผ๋ฉด FD๋Š” ๋ฐ”๋กœ ์žฌํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค.

3. 1024๊ฐ€ ๋ฐฐ์‹ ํ•œ ์ด์œ : โ€˜์ˆœ๊ฐ„ ํ”ผํฌโ€™๋ฅผ ๋ฒ„ํ‹ฐ์ง€ ๋ชปํ–ˆ๋‹ค

โ€œ์•„๋‹ˆ, FD๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ๋นจ๋ฆฌ ์žฌํ™œ์šฉ๋œ๋‹ค๋ฉด์„œ 1024๊ฐœ๋กœ ์™œ ๋ถ€์กฑํ–ˆ๋˜ ๊ฑด๋ฐ?โ€

์ด๊ฒŒ ๋ฐ”๋กœ ISS-162 ๋ฌธ์ œ์˜ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค. 1024๊ฐ€ ๋ถ€์กฑํ–ˆ๋˜ ์ด์œ ๋Š” Nginx ๊ฐ™์€ ํ”„๋ก์‹œ ์„œ๋ฒ„์˜ ์ˆ™๋ช… ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

Nginx๋Š” ์ค‘๊ฐœ์ž์ž…๋‹ˆ๋‹ค.

  1. ํด๋ผ์ด์–ธํŠธ(๋ธŒ๋ผ์šฐ์ €)๊ฐ€ Nginx์— ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค. (FD 1๊ฐœ ์†Œ๋ชจ)

  2. Nginx๋Š” ์ด ์š”์ฒญ์„ ๋ฐ›์•„ ๋‚ด๋ถ€ ์„œ๋ฒ„(DoEatFit, Jenkins ๋“ฑ)๋กœ ๋‹ค์‹œ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. (FD 1๊ฐœ ์ถ”๊ฐ€ ์†Œ๋ชจ)

๋‹จ์ˆœ ๊ณ„์‚ฐ์œผ๋กœ ๋ฐฉ๋ฌธ์ž 1๋ช…์ด ์ตœ์†Œ 2๊ฐœ์˜ FD๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ˜„์‹ค์€ ๋” ๊ฐ€ํ˜นํ•ฉ๋‹ˆ๋‹ค.

  • ํ˜„๋Œ€ ์›น์˜ ํŠน์ง•: ์š”์ฆ˜ ์›น์‚ฌ์ดํŠธ๋Š” ์ˆ˜๋งŽ์€ ์ •์  ํŒŒ์ผ(CSS, JS)๊ณผ API ์š”์ฒญ์œผ๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

  • Keep-Alive & HTTP/2: ์—ฐ๊ฒฐ ํšจ์œจ์„ ์œ„ํ•ด ํ•œ ๋ช…์˜ ์œ ์ €๊ฐ€ ๋™์‹œ์— ์ˆ˜์‹ญ ๊ฐœ์˜ ์—ฐ๊ฒฐ์„ ์—ด์–ด๋‘๋Š” ๊ฒฝ์šฐ๊ฐ€ ํ”ํ•ฉ๋‹ˆ๋‹ค.

  • ๋กœ๊ทธ ํŒŒ์ผ: Nginx๋Š” access.log, error.log ๋“ฑ ๋กœ๊ทธ ํŒŒ์ผ๋„ ์—ด์–ด๋‘ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. (FD ์ถ”๊ฐ€ ์†Œ๋ชจ)

1024๋ผ๋Š” ์ˆซ์ž๋Š” ์ด ๋ชจ๋“  ๊ฒƒ์„ ๊ฐ๋‹นํ•˜๊ธฐ์—” ๋„ˆ๋ฌด ์ž‘์•˜์Šต๋‹ˆ๋‹ค. ์œ ์ € ํ•œ ๋ช…์ด 20๊ฐœ์˜ FD๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด, ๋™์‹œ ์ ‘์†์ž 50๋ช…๋งŒ ๋ชฐ๋ ค๋„ 1024๊ฐœ์˜ ์ฐฝ๊ตฌ๋Š” ๊ฝ‰ ์ฐจ๋ฒ„๋ฆฝ๋‹ˆ๋‹ค.

51๋ฒˆ์งธ ์œ ์ €๊ฐ€ ์ ‘์†์„ ์‹œ๋„ํ•˜๋Š” ์ˆœ๊ฐ„, Nginx๋Š” โ€œ๋Œ€๊ธฐํ‘œ(FD) ๋‹ค ๋–จ์–ด์กŒ์Šต๋‹ˆ๋‹คโ€ (No file descriptors available) ๋ผ๋ฉฐ 500 Internal Server Error๋ฅผ ๋ฑ‰์–ด๋ฒ„๋ฆฐ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

1024๊ฐ€ ๋ถ€์กฑํ–ˆ๋˜ ๊ฒƒ์€ FD๊ฐ€ ์žฌํ™œ์šฉ๋˜์ง€ ์•Š์•„์„œ๊ฐ€ ์•„๋‹ˆ๋ผ, ์žฌํ™œ์šฉ๋˜๋Š” ์†๋„(์—ฐ๊ฒฐ ์ข…๋ฃŒ)๋ณด๋‹ค ์†Œ๋ชจ๋˜๋Š” ์†๋„(์ƒˆ ์—ฐ๊ฒฐ)๊ฐ€ ์ˆœ๊ฐ„์ ์œผ๋กœ ๋” ๋นจ๋ž๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด โ€˜์ˆœ๊ฐ„ ํ”ผํฌโ€™๋ฅผ ๋ฒ„ํ‹ธ ๋ฒ„ํผ๊ฐ€ ๋„ˆ๋ฌด ์ž‘์•˜๋˜ ๊ฑฐ์ฃ .

4. 65536์€ ์™œ โ€˜๊ตญ๋ฃฐ(Standard)โ€˜์ด ๋˜์—ˆ๋‚˜?

๊ทธ๋Ÿผ ์™œ 10000๋„ ์•„๋‹ˆ๊ณ  50000๋„ ์•„๋‹ˆ๊ณ  65536์ผ๊นŒ์š”?

4-1. 2์˜ 16์ œ๊ณฑ ()

65536์€ ์ž…๋‹ˆ๋‹ค. ์ปดํ“จํ„ฐ ๊ณตํ•™์—์„œ ์•„์ฃผ ์ต์ˆ™ํ•œ ์ˆซ์ž์ฃ .

  • 16๋น„ํŠธ์˜ ์œ ์‚ฐ: ๊ณผ๊ฑฐ 16๋น„ํŠธ ์‹œ์Šคํ…œ์—์„œ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ˆซ์ž(0~65535)์˜€์Šต๋‹ˆ๋‹ค.

  • ๋„คํŠธ์›Œํฌ ํฌํŠธ: ์šฐ๋ฆฌ๊ฐ€ ์•„๋Š” TCP/UDP ํฌํŠธ ๋ฒˆํ˜ธ์˜ ๋ฒ”์œ„๊ฐ€ 0๋ฒˆ๋ถ€ํ„ฐ 65535๋ฒˆ๊นŒ์ง€์ธ ๊ฒƒ๊ณผ ๊ฐ™์€ ๋งฅ๋ฝ์ž…๋‹ˆ๋‹ค.

  • ๊ด€์Šต์ ์ธ โ€˜์ถฉ๋ถ„ํžˆ ํฐ ์ˆ˜โ€™: ๊ธฐ์ˆ ์ ์œผ๋กœ ๊ผญ ์ด ์ˆซ์ž์—ฌ์•ผ ํ•  ํ•„์—ฐ์ ์ธ ์ด์œ ๋Š” ์—†์ง€๋งŒ, ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ โ€œ์ด ์ •๋„๋ฉด ๋„‰๋„‰ํ•˜์ง€โ€๋ผ๋Š” ์˜๋ฏธ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ด€์Šต์ ์ธ ์ˆซ์ž์ž…๋‹ˆ๋‹ค.

4-2. ํ˜„์‹ค์ ์ธ ํƒ€ํ˜‘์ 

FD ํ•œ๋„๋Š” ๊ณต์งœ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ปค๋„์€ ์—ด๋ ค์žˆ๋Š” FD ๋ชฉ๋ก์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ๋„ˆ๋ฌด ๋‚ฎ์œผ๋ฉด (1024): ISS-162์ฒ˜๋Ÿผ ์„œ๋ฒ„๊ฐ€ ํ„ฐ์ง‘๋‹ˆ๋‹ค.

  • ๋„ˆ๋ฌด ๋†’์œผ๋ฉด (e.g., 1,000,000): ๊ฐ€๋Šฅ์€ ํ•˜์ง€๋งŒ, ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์ด๋ ‡๊ฒŒ ํฐ ํ•œ๋„๋ฅผ ์ฃผ๋ฉด ๊ทธ๋งŒํผ ์ปค๋„ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€๋‹ด์ด ์ปค์ง‘๋‹ˆ๋‹ค.

  • 65536 (๊ตญ๋ฃฐ): โ€œ์™ ๋งŒํ•œ ์ค‘์†Œ๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ์˜ ์›น์„œ๋ฒ„(Nginx)๊ฐ€ ๊ฐ๋‹นํ•˜๊ธฐ์— ์ฐจ๊ณ  ๋„˜์น˜๋ฉฐ, ๋™์‹œ์— ์ปค๋„ ๋ฉ”๋ชจ๋ฆฌ์—๋„ ํฐ ๋ถ€๋‹ด์„ ์ฃผ์ง€ ์•Š๋Š”, ๊ฒฝํ—˜์ ์œผ๋กœ ๊ฒ€์ฆ๋œ ๋„‰๋„‰ํ•œ ๊ธฐ๋ณธ๊ฐ’โ€์ž…๋‹ˆ๋‹ค.

๋ฌผ๋ก , ์ดˆ๋‹น ์ˆ˜๋งŒ ๋ช…์˜ ๋™์‹œ ์ ‘์†์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋„ค์ด๋ฒ„๋‚˜ ๊ตฌ๊ธ€ ๊ฐ™์€ ๋Œ€๊ทœ๋ชจ ์„œ๋น„์Šค๋Š” ์ด ๊ฐ’์„ 1048576 () ์ด์ƒ์œผ๋กœ ํŠœ๋‹ํ•ด์„œ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

5. ๊ฒฐ๋ก : ๊ธฐ๋ณธ๊ฐ’์„ ๋ฏฟ์ง€ ๋ง์ž

ISS-162์™€ ์ด๋ฒˆ ๊ณต๋ถ€๋ฅผ ํ†ตํ•ด ์–ป์€ ๊ตํ›ˆ์€ ๋ช…ํ™•ํ•ฉ๋‹ˆ๋‹ค.

  1. FD๋Š” ์žฌํ™œ์šฉ๋œ๋‹ค. 65536์€ โ€˜๋™์‹œ ์ ‘์†โ€™ ํ•œ๋„์ด์ง€, โ€˜๋ˆ„์  ๋ฐฉ๋ฌธโ€™ ํ•œ๋„๊ฐ€ ์•„๋‹ˆ๋‹ค.

  2. 1024๋Š” ํ˜„๋Œ€ ์›น ํ”„๋ก์‹œ ์„œ๋ฒ„์—๊ฒ ๋„ˆ๋ฌด ๊ฐ€ํ˜นํ•œ ์ˆซ์ž๋‹ค. ์ˆœ๊ฐ„ ํ”ผํฌ ํŠธ๋ž˜ํ”ฝ์„ ๋ฒ„ํ‹ฐ์ง€ ๋ชปํ•œ๋‹ค.

  3. 65536์€ ๊ฒฝํ—˜์ ์œผ๋กœ ๊ฒ€์ฆ๋œ โ€˜๊ตญ๋ฃฐโ€™์ด๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์„œ๋น„์Šค์— ๋„‰๋„‰ํ•œ ๋ฒ„ํผ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ตํ›ˆ์€ ์ด๊ฒƒ์ž…๋‹ˆ๋‹ค. โ€œ๋ฆฌ๋ˆ…์Šค์˜ ๊ธฐ๋ณธ๊ฐ’(1024)์„ ๋งน์‹ ํ•˜์ง€ ๋ง์ž.โ€ ํŠนํžˆ Nginx, DB ์„œ๋ฒ„์ฒ˜๋Ÿผ ์ˆ˜๋งŽ์€ ์—ฐ๊ฒฐ์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๋…€์„์„ ์„ค์น˜ํ–ˆ๋‹ค๋ฉด, ulimit -n ๊ฐ’๋ถ€ํ„ฐ ํ™•์ธํ•˜๊ณ  65536์œผ๋กœ ์˜ฌ๋ ค๋‘๋Š” ๊ฒƒ์ด ์ •์‹  ๊ฑด๊ฐ•์— ์ด๋กญ์Šต๋‹ˆ๋‹ค.