1. File Descriptor 1024๋ ์ ๋ถ์กฑํ๊ณ , 65536์ ์ ์ถฉ๋ถํ๊ฐ?
ISS-162) Proxmox LXC Nginx 500 ์๋ฌ์์ Proxmox LXC์ Nginx๊ฐ (24: No file descriptors available) ์๋ฌ๋ฅผ ๋ฑ์ผ๋ฉฐ ๋ป์ด๋ฒ๋ฆฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค. ๋ฒ์ธ์ ์ด์ด์๊ฒ๋ ulimit -n์ ๊ธฐ๋ณธ๊ฐ์ธ 1024์์ฃ .
๊ทธ๋์ ํด๊ฒฐ์ฑ
์ผ๋ก 65536์ด๋ผ๋ ์ซ์๋ฅผ ์ ์ฉํ์ต๋๋ค. ๊ทผ๋ฐ ์ด๋ฐ ์๋ฌธ์ด ๋ค๋๊ตฐ์.
-
65536๋ ์ธ์ ๊ฐ ๋ค ์๋ชจ๋๋ ๊ฑฐ ์๋๊ฐ? -
FD๊ฐ ์ฃผ๊ธฐ์ ์ผ๋ก ์ด๊ธฐํ(์ฌ์ฌ์ฉ)๋๋ ๊ฑฐ๋ผ๋ฉด,
1024๋ ์ ๋ถ์กฑํ๋ ๊ฑฐ์ง? -
์ ํํ
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๋ ์ค๊ฐ์์ ๋๋ค.
-
ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ )๊ฐ Nginx์ ์ ์ํฉ๋๋ค. (FD 1๊ฐ ์๋ชจ)
-
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์ ์ด๋ฒ ๊ณต๋ถ๋ฅผ ํตํด ์ป์ ๊ตํ์ ๋ช
ํํฉ๋๋ค.
-
FD๋ ์ฌํ์ฉ๋๋ค.
65536์ โ๋์ ์ ์โ ํ๋์ด์ง, โ๋์ ๋ฐฉ๋ฌธโ ํ๋๊ฐ ์๋๋ค. -
1024๋ ํ๋ ์น ํ๋ก์ ์๋ฒ์๊ฒ ๋๋ฌด ๊ฐํนํ ์ซ์๋ค. ์๊ฐ ํผํฌ ํธ๋ํฝ์ ๋ฒํฐ์ง ๋ชปํ๋ค. -
65536์ ๊ฒฝํ์ ์ผ๋ก ๊ฒ์ฆ๋ โ๊ตญ๋ฃฐโ์ด๋ค. ๋๋ถ๋ถ์ ์๋น์ค์ ๋๋ํ ๋ฒํผ๋ฅผ ์ ๊ณตํ๋ค.
๊ฐ์ฅ ์ค์ํ ๊ตํ์ ์ด๊ฒ์
๋๋ค. โ๋ฆฌ๋
์ค์ ๊ธฐ๋ณธ๊ฐ(1024)์ ๋งน์ ํ์ง ๋ง์.โ ํนํ Nginx, DB ์๋ฒ์ฒ๋ผ ์๋ง์ ์ฐ๊ฒฐ์ ์ฒ๋ฆฌํด์ผ ํ๋ ๋
์์ ์ค์นํ๋ค๋ฉด, ulimit -n ๊ฐ๋ถํฐ ํ์ธํ๊ณ 65536์ผ๋ก ์ฌ๋ ค๋๋ ๊ฒ์ด ์ ์ ๊ฑด๊ฐ์ ์ด๋กญ์ต๋๋ค.