KR_Linux_Kernel - somaz94/DevOps-Engineer GitHub Wiki

๋ฆฌ๋ˆ…์Šค ์ปค๋„ ๊ด€๋ฆฌ & ํŒŒ๋ผ๋ฏธํ„ฐ ํŠœ๋‹ (Q7-Q8)

Q8: ๋ฆฌ๋ˆ…์Šค ์ปค๋„ ํŒŒ๋ผ๋ฏธํ„ฐ ํŠœ๋‹

์งˆ๋ฌธ: ๋ฆฌ๋ˆ…์Šค์—์„œ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ์ปค๋„ ํŒŒ๋ผ๋ฏธํ„ฐ(sysctl)๋ฅผ ์„ค๋ช…ํ•˜๊ณ , ๋„คํŠธ์›Œํฌ ์„ฑ๋Šฅ ์ตœ์ ํ™”์™€ ์‹œ์Šคํ…œ ์•ˆ์ •์„ฑ ํ–ฅ์ƒ์„ ์œ„ํ•œ ์ฃผ์š” ์„ค์ •๊ฐ’์„ ์ œ์‹œํ•˜์„ธ์š”.

๋‹ต๋ณ€:

1. sysctl ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

# ๋ชจ๋“  ์ปค๋„ ํŒŒ๋ผ๋ฏธํ„ฐ ํ™•์ธ
sysctl -a

# ํŠน์ • ํŒŒ๋ผ๋ฏธํ„ฐ ํ™•์ธ
sysctl net.ipv4.ip_forward
sysctl vm.swappiness

# ํŒŒ๋ผ๋ฏธํ„ฐ ๋ณ€๊ฒฝ (์ž„์‹œ)
sudo sysctl -w net.ipv4.ip_forward=1
sudo sysctl -w vm.swappiness=10

# ํŒŒ๋ผ๋ฏธํ„ฐ ๋ณ€๊ฒฝ (์˜๊ตฌ)
sudo vi /etc/sysctl.conf
sudo sysctl -p  # ์ ์šฉ

2. ๋„คํŠธ์›Œํฌ ์„ฑ๋Šฅ ์ตœ์ ํ™”

# /etc/sysctl.conf ๋˜๋Š” /etc/sysctl.d/99-network.conf

# ===== TCP/IP ์Šคํƒ ์ตœ์ ํ™” =====

# net.core.rmem_max: TCP ์ˆ˜์‹  ๋ฒ„ํผ์˜ ์ตœ๋Œ€ ํฌ๊ธฐ
# - ๊ธฐ๋ณธ๊ฐ’: 212992 (์•ฝ 208KB)
# - ๊ถŒ์žฅ๊ฐ’: 134217728 (128MB) - 10Gbps ๊ณ ์† ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ
# - ์„ค๋ช…: ๋„คํŠธ์›Œํฌ ์นด๋“œ์—์„œ ๋ฐ›์€ ํŒจํ‚ท์„ ์ €์žฅํ•˜๋Š” ์ปค๋„ ๋ฒ„ํผ์˜ ์ตœ๋Œ€ ํฌ๊ธฐ
# - ํšจ๊ณผ: ๋Œ€์šฉ๋Ÿ‰ ํŒŒ์ผ ์ „์†ก, ์ŠคํŠธ๋ฆฌ๋ฐ ์„œ๋น„์Šค์—์„œ ์ฒ˜๋ฆฌ๋Ÿ‰ ํ–ฅ์ƒ
# - ์ฃผ์˜: ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ์‹œ OOM ๊ฐ€๋Šฅ์„ฑ, ์‹œ์Šคํ…œ RAM ๊ณ ๋ ค ํ•„์š”
net.core.rmem_max = 134217728

# net.core.wmem_max: TCP ์†ก์‹  ๋ฒ„ํผ์˜ ์ตœ๋Œ€ ํฌ๊ธฐ
# - ๊ธฐ๋ณธ๊ฐ’: 212992 (์•ฝ 208KB)
# - ๊ถŒ์žฅ๊ฐ’: 134217728 (128MB)
# - ์„ค๋ช…: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ณด๋‚ด๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋„คํŠธ์›Œํฌ ์นด๋“œ๋กœ ์ „์†กํ•˜๊ธฐ ์ „ ์ž„์‹œ ์ €์žฅ
# - ํšจ๊ณผ: ๊ณ ๋Œ€์—ญํญ ํ™˜๊ฒฝ์—์„œ ์†ก์‹  ์„ฑ๋Šฅ ํ–ฅ์ƒ
# - ์‚ฌ์šฉ ์‚ฌ๋ก€: CDN ์„œ๋ฒ„, ๋น„๋””์˜ค ์ŠคํŠธ๋ฆฌ๋ฐ, ๋Œ€์šฉ๋Ÿ‰ ํŒŒ์ผ ์„œ๋ฒ„
net.core.wmem_max = 134217728

# net.core.rmem_default / wmem_default: ์†Œ์ผ“ ์ƒ์„ฑ ์‹œ ๊ธฐ๋ณธ ๋ฒ„ํผ ํฌ๊ธฐ
# - ์„ค๋ช…: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ช…์‹œ์ ์œผ๋กœ ๋ฒ„ํผ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์„ ๋•Œ ์‚ฌ์šฉ
# - ๊ถŒ์žฅ๊ฐ’: 16MB (์ผ๋ฐ˜์ ์ธ ์›น ํŠธ๋ž˜ํ”ฝ์— ์ ํ•ฉ)
net.core.rmem_default = 16777216
net.core.wmem_default = 16777216

# net.ipv4.tcp_rmem / tcp_wmem: ์†Œ์ผ“๋ณ„ TCP ๋ฒ„ํผ ์ž๋™ ํŠœ๋‹ (์ตœ์†Œ, ๊ธฐ๋ณธ, ์ตœ๋Œ€)
# - ํ˜•์‹: min default max
# - tcp_rmem = 4096 87380 134217728
#   * 4096 (4KB): ์ตœ์†Œ ๋ฒ„ํผ - ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ์‹œ์—๋„ ๋ณด์žฅ
#   * 87380 (85KB): ๊ธฐ๋ณธ ๋ฒ„ํผ - ์ผ๋ฐ˜์ ์ธ ์—ฐ๊ฒฐ์— ์‚ฌ์šฉ
#   * 134217728 (128MB): ์ตœ๋Œ€ ๋ฒ„ํผ - ๊ณ ์† ๋„คํŠธ์›Œํฌ์—์„œ ์ž๋™ ํ™•์žฅ
# - ์„ค๋ช…: ์ปค๋„์ด ๋„คํŠธ์›Œํฌ ์ƒํƒœ์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ๋ฒ„ํผ ํฌ๊ธฐ ์กฐ์ •
# - ํšจ๊ณผ: Bandwidth-Delay Product (BDP) ์ตœ์ ํ™”
net.ipv4.tcp_rmem = 4096 87380 134217728
net.ipv4.tcp_wmem = 4096 65536 134217728

# ===== ์—ฐ๊ฒฐ ๋Œ€๊ธฐ์—ด ๊ด€๋ฆฌ =====

# net.core.somaxconn: listen() ์‹œ์Šคํ…œ ์ฝœ์˜ backlog ํŒŒ๋ผ๋ฏธํ„ฐ ์ตœ๋Œ€๊ฐ’
# - ๊ธฐ๋ณธ๊ฐ’: 128 (๋งค์šฐ ์ž‘์Œ!)
# - ๊ถŒ์žฅ๊ฐ’: 65535 (๊ณ ๋ถ€ํ•˜ ์›น ์„œ๋ฒ„)
# - ์„ค๋ช…: accept() ์ „ ๋Œ€๊ธฐ ์ค‘์ธ ์™„์ „ํžˆ ์—ฐ๊ฒฐ๋œ(ESTABLISHED) ์†Œ์ผ“ ํ ํฌ๊ธฐ
# - ๋ฌธ์ œ: ๊ฐ’์ด ์ž‘์œผ๋ฉด "connection refused" ์—๋Ÿฌ ๋ฐœ์ƒ
# - ํšจ๊ณผ: ํŠธ๋ž˜ํ”ฝ ๊ธ‰์ฆ ์‹œ์—๋„ ์—ฐ๊ฒฐ ์†์‹ค ๋ฐฉ์ง€
# - ์˜ˆ์‹œ: Nginx์˜ listen 80 backlog=65535;์™€ ์—ฐ๊ณ„
net.core.somaxconn = 65535

# net.core.netdev_max_backlog: ๋„คํŠธ์›Œํฌ ์žฅ์น˜ ์ž…๋ ฅ ํ ํฌ๊ธฐ
# - ๊ธฐ๋ณธ๊ฐ’: 1000
# - ๊ถŒ์žฅ๊ฐ’: 100000 (10Gbps ํ™˜๊ฒฝ)
# - ์„ค๋ช…: NIC์—์„œ ์ปค๋„๋กœ ์ „๋‹ฌ๋œ ํŒจํ‚ท์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์ „ ๋Œ€๊ธฐํ•˜๋Š” ํ
# - ๋ฌธ์ œ: ๊ฐ’์ด ์ž‘์œผ๋ฉด ํŒจํ‚ท ๋“œ๋กญ (ifconfig์—์„œ RX dropped ์ฆ๊ฐ€)
# - ํ™•์ธ: netstat -s | grep "dropped"
# - ์‚ฌ์šฉ ์‚ฌ๋ก€: DDoS ๋ฐฉ์–ด, ๊ณ  PPS(Packets Per Second) ํ™˜๊ฒฝ
net.core.netdev_max_backlog = 100000

# net.ipv4.tcp_max_syn_backlog: SYN_RECV ์ƒํƒœ ์†Œ์ผ“ ๋Œ€๊ธฐ์—ด ํฌ๊ธฐ
# - ๊ธฐ๋ณธ๊ฐ’: 128-1024 (๋ฐฐํฌํŒ๋งˆ๋‹ค ๋‹ค๋ฆ„)
# - ๊ถŒ์žฅ๊ฐ’: 8192
# - ์„ค๋ช…: SYN์„ ๋ฐ›์•˜์ง€๋งŒ ์•„์ง ACK๋ฅผ ๋ฐ›์ง€ ๋ชปํ•œ ๋ฐ˜์ฏค ์—ฐ๊ฒฐ๋œ(Half-open) ์†Œ์ผ“ ํ
# - ๋ฌธ์ œ: ๊ฐ’์ด ์ž‘์œผ๋ฉด SYN Flood ๊ณต๊ฒฉ์— ์ทจ์•ฝ
# - ํšจ๊ณผ: ๋Œ€๋Ÿ‰์˜ ๋™์‹œ ์—ฐ๊ฒฐ ์š”์ฒญ ์ฒ˜๋ฆฌ (์›น ์„œ๋ฒ„ ๋ถ€ํŒ… ์งํ›„ ํŠธ๋ž˜ํ”ฝ ํญ์ฆ)
# - ๋ณด์•ˆ: tcp_syncookies์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ
net.ipv4.tcp_max_syn_backlog = 8192

# ===== TIME_WAIT ์†Œ์ผ“ ์ตœ์ ํ™” =====

# net.ipv4.tcp_tw_reuse: TIME_WAIT ์†Œ์ผ“์„ ์ƒˆ ์—ฐ๊ฒฐ์— ์žฌ์‚ฌ์šฉ
# - ๊ธฐ๋ณธ๊ฐ’: 0 (๋น„ํ™œ์„ฑํ™”)
# - ๊ถŒ์žฅ๊ฐ’: 1 (ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ํ™œ์„ฑํ™”)
# - ์„ค๋ช…: ์™ธ๋ถ€ ์„œ๋ฒ„๋กœ ๋‚˜๊ฐ€๋Š”(outbound) ์—ฐ๊ฒฐ ์‹œ TIME_WAIT ์†Œ์ผ“ ์ฆ‰์‹œ ์žฌ์‚ฌ์šฉ
# - ๋ฌธ์ œ ํ•ด๊ฒฐ: "Cannot assign requested address" ์—๋Ÿฌ ๋ฐฉ์ง€
# - ์‹œ๋‚˜๋ฆฌ์˜ค: API Gateway, Reverse Proxy๊ฐ€ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๋กœ ๋‹ค๋Ÿ‰์˜ ์š”์ฒญ
# - ์ฃผ์˜: ์„œ๋ฒ„ ์ธก(inbound)์—๋Š” ์˜ํ–ฅ ์—†์Œ, NAT ํ™˜๊ฒฝ์—์„œ ๋ฌธ์ œ ๊ฐ€๋Šฅ์„ฑ
# - ํ™•์ธ: ss -tan | grep TIME_WAIT | wc -l
net.ipv4.tcp_tw_reuse = 1

# net.ipv4.tcp_fin_timeout: FIN-WAIT-2 ์ƒํƒœ ์œ ์ง€ ์‹œ๊ฐ„
# - ๊ธฐ๋ณธ๊ฐ’: 60์ดˆ
# - ๊ถŒ์žฅ๊ฐ’: 30์ดˆ
# - ์„ค๋ช…: TCP ์—ฐ๊ฒฐ ์ข…๋ฃŒ ์‹œ FIN-WAIT-2 ์ƒํƒœ์—์„œ ๋Œ€๊ธฐํ•˜๋Š” ์‹œ๊ฐ„
# - ํšจ๊ณผ: ๋น„์ •์ƒ ์ข…๋ฃŒ๋œ ์—ฐ๊ฒฐ์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ๋น ๋ฅด๊ฒŒ ํšŒ์ˆ˜
# - ์ฃผ์˜: ๋„ˆ๋ฌด ์งง์œผ๋ฉด (์˜ˆ: 5์ดˆ) ๋А๋ฆฐ ํด๋ผ์ด์–ธํŠธ ๋ฌธ์ œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ
net.ipv4.tcp_fin_timeout = 30

# ===== TCP Keepalive ์„ค์ • =====

# net.ipv4.tcp_keepalive_time: ์œ ํœด ์—ฐ๊ฒฐ์— keepalive ํ”„๋กœ๋ธŒ ์ „์†ก ์‹œ์ž‘ ์‹œ๊ฐ„
# - ๊ธฐ๋ณธ๊ฐ’: 7200์ดˆ (2์‹œ๊ฐ„)
# - ๊ถŒ์žฅ๊ฐ’: 600์ดˆ (10๋ถ„)
# - ์„ค๋ช…: ๋งˆ์ง€๋ง‰ ๋ฐ์ดํ„ฐ ์ „์†ก ํ›„ ์—ฐ๊ฒฐ์ด ์‚ด์•„์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ๊นŒ์ง€์˜ ์‹œ๊ฐ„
# - ํšจ๊ณผ: ์ข€๋น„ ์—ฐ๊ฒฐ(Zombie Connection) ์กฐ๊ธฐ ํƒ์ง€
# - ์‚ฌ์šฉ ์‚ฌ๋ก€: ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ํ’€, SSH ์„ธ์…˜ ์œ ์ง€
net.ipv4.tcp_keepalive_time = 600

# net.ipv4.tcp_keepalive_intvl: keepalive ํ”„๋กœ๋ธŒ ์žฌ์ „์†ก ๊ฐ„๊ฒฉ
# - ๊ธฐ๋ณธ๊ฐ’: 75์ดˆ
# - ๊ถŒ์žฅ๊ฐ’: 30์ดˆ
# - ์„ค๋ช…: ์‘๋‹ต์ด ์—†์„ ๋•Œ ๋‹ค์Œ ํ”„๋กœ๋ธŒ๋ฅผ ๋ณด๋‚ด๋Š” ๊ฐ„๊ฒฉ
net.ipv4.tcp_keepalive_intvl = 30

# net.ipv4.tcp_keepalive_probes: keepalive ํ”„๋กœ๋ธŒ ์ตœ๋Œ€ ์žฌ์‹œ๋„ ํšŸ์ˆ˜
# - ๊ธฐ๋ณธ๊ฐ’: 9ํšŒ
# - ๊ถŒ์žฅ๊ฐ’: 3ํšŒ
# - ์„ค๋ช…: ์‘๋‹ต์ด ์—†์„ ๋•Œ ์—ฐ๊ฒฐ์„ ๋Š๊ธฐ ์ „๊นŒ์ง€ ์‹œ๋„ ํšŸ์ˆ˜
# - ๊ณ„์‚ฐ: ์ด ๋Œ€๊ธฐ ์‹œ๊ฐ„ = keepalive_time + (keepalive_intvl * keepalive_probes)
#        = 600 + (30 * 3) = 690์ดˆ (์•ฝ 11.5๋ถ„) ํ›„ ์—ฐ๊ฒฐ ์ข…๋ฃŒ
net.ipv4.tcp_keepalive_probes = 3

# ===== TCP Fast Open (TFO) =====

# net.ipv4.tcp_fastopen: TCP 3-way handshake ์ตœ์ ํ™”
# - ๊ธฐ๋ณธ๊ฐ’: 0 (๋น„ํ™œ์„ฑํ™”)
# - ๊ถŒ์žฅ๊ฐ’: 3 (ํด๋ผ์ด์–ธํŠธ + ์„œ๋ฒ„ ๋ชจ๋‘ ํ™œ์„ฑํ™”)
# - ๊ฐ’์˜ ์˜๋ฏธ:
#   * 1: ํด๋ผ์ด์–ธํŠธ๋งŒ ํ™œ์„ฑํ™” (์™ธ๋ถ€ ์„œ๋ฒ„ ์—ฐ๊ฒฐ ์‹œ)
#   * 2: ์„œ๋ฒ„๋งŒ ํ™œ์„ฑํ™” (๋“ค์–ด์˜ค๋Š” ์—ฐ๊ฒฐ ์ˆ˜๋ฝ)
#   * 3: ํด๋ผ์ด์–ธํŠธ + ์„œ๋ฒ„ (๋น„ํŠธ OR: 1 | 2 = 3)
# - ์›๋ฆฌ: SYN ํŒจํ‚ท์— ๋ฐ์ดํ„ฐ ํฌํ•จ โ†’ RTT(Round Trip Time) 1ํšŒ ์ ˆ์•ฝ
# - ํšจ๊ณผ: ์—ฐ๊ฒฐ ์ง€์—ฐ ๊ฐ์†Œ (HTTP ์š”์ฒญ์ด ๋งŽ์€ ํ™˜๊ฒฝ์—์„œ ์ฒด๊ฐ ํ–ฅ์ƒ)
# - ์š”๊ตฌ์‚ฌํ•ญ: ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๋ชจ๋‘ ์ง€์› ํ•„์š” (์ปค๋„ 3.7+)
# - ๋ณด์•ˆ: TFO Cookie๋กœ SYN Flood ๋ฐฉ์–ด
net.ipv4.tcp_fastopen = 3

# ===== IP ํฌ์›Œ๋”ฉ =====

# net.ipv4.ip_forward: IPv4 ํŒจํ‚ท ํฌ์›Œ๋”ฉ ํ™œ์„ฑํ™”
# - ๊ธฐ๋ณธ๊ฐ’: 0 (๋น„ํ™œ์„ฑํ™”)
# - ๊ถŒ์žฅ๊ฐ’: 1 (๋ผ์šฐํ„ฐ, NAT, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋…ธ๋“œ)
# - ์„ค๋ช…: ๋‹ค๋ฅธ ๋„คํŠธ์›Œํฌ๋กœ ํŒจํ‚ท์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ
# - ํ•„์ˆ˜ ์‹œ๋‚˜๋ฆฌ์˜ค:
#   * ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์›Œ์ปค ๋…ธ๋“œ (Pod ๊ฐ„ ํ†ต์‹ )
#   * Docker ๋ธŒ๋ฆฟ์ง€ ๋„คํŠธ์›Œํฌ
#   * VPN ๊ฒŒ์ดํŠธ์›จ์ด
#   * NAT ๋ผ์šฐํ„ฐ
# - ํ™•์ธ: cat /proc/sys/net/ipv4/ip_forward
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1

# ===== ๋กœ์ปฌ ํฌํŠธ ๋ฒ”์œ„ =====

# net.ipv4.ip_local_port_range: ์™ธ๋ถ€ ์—ฐ๊ฒฐ ์‹œ ์‚ฌ์šฉํ•  ์ž„์‹œ(ephemeral) ํฌํŠธ ๋ฒ”์œ„
# - ๊ธฐ๋ณธ๊ฐ’: 32768 60999 (์•ฝ 28,000๊ฐœ)
# - ๊ถŒ์žฅ๊ฐ’: 10000 65535 (์•ฝ 55,000๊ฐœ)
# - ์„ค๋ช…: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์™ธ๋ถ€ ์„œ๋ฒ„๋กœ ์—ฐ๊ฒฐ ์‹œ ์ž๋™ ํ• ๋‹น๋˜๋Š” ์†Œ์Šค ํฌํŠธ
# - ๋ฌธ์ œ: ๋ฒ”์œ„๊ฐ€ ์ข์œผ๋ฉด "Cannot assign requested address" ์—๋Ÿฌ
# - ์‹œ๋‚˜๋ฆฌ์˜ค: Reverse Proxy, API Gateway๊ฐ€ ๋ฐฑ์—”๋“œ๋กœ ๋Œ€๋Ÿ‰ ์—ฐ๊ฒฐ
# - ๊ณ„์‚ฐ: ๋™์‹œ ์—ฐ๊ฒฐ ์ˆ˜ = (ํฌํŠธ ๋ฒ”์œ„) / (TIME_WAIT ์‹œ๊ฐ„ / ์—ฐ๊ฒฐ ์ง€์† ์‹œ๊ฐ„)
# - ์˜ˆ์‹œ: 1์ดˆ๋‹น 1000๊ฐœ ์š”์ฒญ, TIME_WAIT 30์ดˆ โ†’ ์ตœ์†Œ 30,000 ํฌํŠธ ํ•„์š”
# - ํ™•์ธ: ss -tan | awk '{print $4}' | grep -oP ':\d+$' | sort | uniq -c
net.ipv4.ip_local_port_range = 10000 65535

3. ๋ณด์•ˆ ๊ด€๋ จ ์„ค์ •

# ===== SYN Flood ๊ณต๊ฒฉ ๋ฐฉ์–ด =====

# net.ipv4.tcp_syncookies: SYN Cookie ๋ฉ”์ปค๋‹ˆ์ฆ˜ ํ™œ์„ฑํ™”
# - ๊ธฐ๋ณธ๊ฐ’: 1 (๋Œ€๋ถ€๋ถ„ ๋ฐฐํฌํŒ์—์„œ ๊ธฐ๋ณธ ํ™œ์„ฑํ™”)
# - ๊ถŒ์žฅ๊ฐ’: 1 (ํ•„์ˆ˜)
# - ์›๋ฆฌ:
#   1. ์ •์ƒ: ํด๋ผ์ด์–ธํŠธ SYN โ†’ ์„œ๋ฒ„ SYN-ACK (ํ์— ์ €์žฅ) โ†’ ํด๋ผ์ด์–ธํŠธ ACK
#   2. ๊ณต๊ฒฉ: ์ˆ˜์ฒœ ๊ฐœ์˜ SYN โ†’ ํ ๊ฐ€๋“์ฐธ โ†’ ์ •์ƒ ์—ฐ๊ฒฐ ๊ฑฐ๋ถ€
#   3. SYN Cookie: SYN-ACK์˜ ์‹œํ€€์Šค ๋ฒˆํ˜ธ์— ์—ฐ๊ฒฐ ์ •๋ณด ์•”ํ˜ธํ™” ์ €์žฅ โ†’ ํ ๋ถˆํ•„์š”
# - ํšจ๊ณผ: tcp_max_syn_backlog ์ดˆ๊ณผ ์‹œ์—๋„ ์—ฐ๊ฒฐ ์ˆ˜๋ฝ ๊ฐ€๋Šฅ
# - ๋‹จ์ : TCP ์˜ต์…˜(Window Scaling ๋“ฑ) ์ผ๋ถ€ ์†์‹ค ๊ฐ€๋Šฅ
# - ํ™•์ธ: netstat -s | grep "SYNs to LISTEN sockets dropped"
net.ipv4.tcp_syncookies = 1

# net.ipv4.tcp_max_syn_backlog: SYN Flood ๋ฐฉ์–ด์šฉ ๋ฐฑ์—… ๋Œ€๊ธฐ์—ด
# - tcp_syncookies์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ๊ณต๊ฒฉ ๋ฐฉ์–ด ๊ฐ•ํ™”
net.ipv4.tcp_max_syn_backlog = 8192

# ===== ICMP Redirect ๊ณต๊ฒฉ ๋ฐฉ์ง€ =====

# net.ipv4.conf.*.accept_redirects: ICMP Redirect ๋ฉ”์‹œ์ง€ ์ˆ˜๋ฝ ์—ฌ๋ถ€
# - ๊ธฐ๋ณธ๊ฐ’: 1 (์ˆ˜๋ฝ)
# - ๊ถŒ์žฅ๊ฐ’: 0 (๊ฑฐ๋ถ€)
# - ๊ณต๊ฒฉ ์‹œ๋‚˜๋ฆฌ์˜ค:
#   1. ๊ณต๊ฒฉ์ž๊ฐ€ ์œ„์กฐ๋œ ICMP Redirect ๋ฉ”์‹œ์ง€ ์ „์†ก
#   2. ํ”ผํ•ด์ž์˜ ๋ผ์šฐํŒ… ํ…Œ์ด๋ธ” ๋ณ€๊ฒฝ
#   3. ํŠธ๋ž˜ํ”ฝ์ด ๊ณต๊ฒฉ์ž๋ฅผ ๊ฒฝ์œ  โ†’ MitM (Man-in-the-Middle) ๊ณต๊ฒฉ
# - ์˜ˆ์‹œ: "๋” ๋‚˜์€ ๊ฒฝ๋กœ๊ฐ€ ์žˆ์–ด์š”" ๋ฉ”์‹œ์ง€๋กœ ์†์—ฌ์„œ ๊ฒŒ์ดํŠธ์›จ์ด ๋ณ€๊ฒฝ
# - ํ•„์ˆ˜ ์ ์šฉ: ํ”„๋กœ๋•์…˜ ์„œ๋ฒ„, ๋ผ์šฐํ„ฐ
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0

# ===== Source Routing ๊ณต๊ฒฉ ๋ฐฉ์ง€ =====

# net.ipv4.conf.*.accept_source_route: Source Routing ํŒจํ‚ท ์ˆ˜๋ฝ ์—ฌ๋ถ€
# - ๊ธฐ๋ณธ๊ฐ’: 0 (๋Œ€๋ถ€๋ถ„ ๋ฐฐํฌํŒ์—์„œ ๋น„ํ™œ์„ฑํ™”)
# - ๊ถŒ์žฅ๊ฐ’: 0 (๊ฑฐ๋ถ€)
# - ๊ณต๊ฒฉ ์›๋ฆฌ:
#   * Source Routing: ์†ก์‹ ์ž๊ฐ€ ํŒจํ‚ท ๊ฒฝ๋กœ๋ฅผ ์ง€์ • (์ผ๋ฐ˜์ ์œผ๋กœ ๋ผ์šฐํ„ฐ๊ฐ€ ๊ฒฐ์ •)
#   * ๊ณต๊ฒฉ์ž๊ฐ€ ์ž„์˜ ๊ฒฝ๋กœ ์ง€์ • โ†’ ๋ฐฉํ™”๋ฒฝ ์šฐํšŒ, ์Šคํ‘ธํ•‘
# - ํšจ๊ณผ: IP ์Šคํ‘ธํ•‘ ๊ณต๊ฒฉ ์ฐจ๋‹จ
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0

# ===== ICMP Echo (Ping) ์‘๋‹ต =====

# net.ipv4.icmp_echo_ignore_all: Ping ์š”์ฒญ ๋ฌด์‹œ
# - ๊ธฐ๋ณธ๊ฐ’: 0 (์‘๋‹ตํ•จ)
# - ๊ถŒ์žฅ๊ฐ’: 0 (์ผ๋ฐ˜ ์„œ๋ฒ„), 1 (๊ณ ๋ณด์•ˆ ์„œ๋ฒ„)
# - ์žฅ์ : ๋„คํŠธ์›Œํฌ ์Šค์บ” ํšŒํ”ผ (Nmap ๋“ฑ)
# - ๋‹จ์ : ๋„คํŠธ์›Œํฌ ๋””๋ฒ„๊น… ์–ด๋ ค์›€ (traceroute, ping ๋ถˆ๊ฐ€)
# - ๊ถŒ์žฅ: ๋ฐฉํ™”๋ฒฝ์—์„œ ICMP ์ œ์–ดํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์Œ
net.ipv4.icmp_echo_ignore_all = 0

# net.ipv4.icmp_echo_ignore_broadcasts: ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ Ping ๋ฌด์‹œ
# - ๊ธฐ๋ณธ๊ฐ’: 1 (๋ฌด์‹œ)
# - ๊ถŒ์žฅ๊ฐ’: 1 (ํ•„์ˆ˜)
# - ๊ณต๊ฒฉ: Smurf Attack (๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ Ping์œผ๋กœ DDoS ์ฆํญ)
net.ipv4.icmp_echo_ignore_broadcasts = 1

# ===== IP ์Šคํ‘ธํ•‘ ๋ฐฉ์ง€ (Reverse Path Filtering) =====

# net.ipv4.conf.*.rp_filter: ์—ญ๊ฒฝ๋กœ ํ•„ํ„ฐ๋ง
# - ๊ธฐ๋ณธ๊ฐ’: 0 (๋น„ํ™œ์„ฑํ™”) ๋˜๋Š” 1
# - ๊ถŒ์žฅ๊ฐ’: 1 (Strict Mode)
# - ๊ฐ’์˜ ์˜๋ฏธ:
#   * 0: ๋น„ํ™œ์„ฑํ™” (์œ„ํ—˜!)
#   * 1: Strict Mode - ๋“ค์–ด์˜จ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์‘๋‹ต ํŒจํ‚ท๋„ ๋‚˜๊ฐ€๋Š”์ง€ ํ™•์ธ
#   * 2: Loose Mode - ์‘๋‹ต ๊ฒฝ๋กœ๊ฐ€ ๋ผ์šฐํŒ… ํ…Œ์ด๋ธ”์— ์กด์žฌํ•˜๋Š”์ง€๋งŒ ํ™•์ธ
# - ์›๋ฆฌ: ํŒจํ‚ท์˜ ์†Œ์Šค IP๊ฐ€ ์œ„์กฐ๋˜์—ˆ๋Š”์ง€ ๋ผ์šฐํŒ… ํ…Œ์ด๋ธ”๋กœ ๊ฒ€์ฆ
# - ์˜ˆ์‹œ:
#   * eth0์œผ๋กœ 10.0.0.5์—์„œ ์˜จ ํŒจํ‚ท ์ˆ˜์‹ 
#   * ๋ผ์šฐํŒ… ํ…Œ์ด๋ธ” ํ™•์ธ: 10.0.0.5๋กœ ๊ฐ€๋Š” ๊ฒฝ๋กœ๊ฐ€ eth0์ธ๊ฐ€?
#   * ์•„๋‹ˆ๋ฉด โ†’ ์Šคํ‘ธํ•‘๋œ ํŒจํ‚ท์œผ๋กœ ํŒ๋‹จํ•˜์—ฌ ๋“œ๋กญ
# - ํšจ๊ณผ: DDoS ๊ณต๊ฒฉ์˜ ์†Œ์Šค IP ์œ„์กฐ ์ฐจ๋‹จ
# - ์ฃผ์˜: ๋น„๋Œ€์นญ ๋ผ์šฐํŒ… ํ™˜๊ฒฝ์—์„œ๋Š” 2(Loose Mode) ์‚ฌ์šฉ
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# ===== ๋ณด์•ˆ ๋กœ๊น… =====

# net.ipv4.conf.*.log_martians: ๋น„์ •์ƒ ํŒจํ‚ท ๋กœ๊ทธ ๊ธฐ๋ก
# - ๊ธฐ๋ณธ๊ฐ’: 0 (๋กœ๊ทธ ์•ˆ ๋‚จ๊น€)
# - ๊ถŒ์žฅ๊ฐ’: 1 (๋กœ๊ทธ ๋‚จ๊น€)
# - Martian Packets: 
#   * ์˜ˆ์•ฝ๋œ IP ์ฃผ์†Œ (0.0.0.0, 127.0.0.0/8, 224.0.0.0/4)
#   * ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ์ฃผ์†Œ
#   * ๋ฉ€ํ‹ฐ์บ์ŠคํŠธ ์ฃผ์†Œ
#   * ์ž˜๋ชป๋œ ์†Œ์Šค IP
# - ๋กœ๊ทธ ์œ„์น˜: /var/log/kern.log ๋˜๋Š” dmesg
# - ์˜ˆ์‹œ: "martian source 192.168.1.1 from 10.0.0.5"
# - ์šฉ๋„: ๋„คํŠธ์›Œํฌ ๊ณต๊ฒฉ ํƒ์ง€, ์„ค์ • ์˜ค๋ฅ˜ ๋””๋ฒ„๊น…
# - ์ฃผ์˜: ๋กœ๊ทธ๊ฐ€ ๋งŽ์œผ๋ฉด ๋””์Šคํฌ I/O ์ฆ๊ฐ€
net.ipv4.conf.all.log_martians = 1

# ===== SYN/ACK ์žฌ์ „์†ก =====

# net.ipv4.tcp_synack_retries: SYN-ACK ์žฌ์ „์†ก ํšŸ์ˆ˜
# - ๊ธฐ๋ณธ๊ฐ’: 5ํšŒ (์•ฝ 180์ดˆ ๋Œ€๊ธฐ)
# - ๊ถŒ์žฅ๊ฐ’: 2ํšŒ (์•ฝ 7์ดˆ ๋Œ€๊ธฐ)
# - ์„ค๋ช…: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ACK๋ฅผ ๋ณด๋‚ด์ง€ ์•Š์„ ๋•Œ SYN-ACK ์žฌ์ „์†ก ํšŸ์ˆ˜
# - ํšจ๊ณผ: SYN Flood ๊ณต๊ฒฉ ์‹œ ๋ฆฌ์†Œ์Šค ๋น ๋ฅด๊ฒŒ ํšŒ์ˆ˜
# - ์žฌ์ „์†ก ๊ฐ„๊ฒฉ: 1์ดˆ, 2์ดˆ, 4์ดˆ, 8์ดˆ, 16์ดˆ (์ง€์ˆ˜ ๋ฐฑ์˜คํ”„)
net.ipv4.tcp_synack_retries = 2

# net.ipv4.tcp_syn_retries: SYN ์žฌ์ „์†ก ํšŸ์ˆ˜ (ํด๋ผ์ด์–ธํŠธ ์ธก)
# - ๊ธฐ๋ณธ๊ฐ’: 6ํšŒ (์•ฝ 127์ดˆ)
# - ๊ถŒ์žฅ๊ฐ’: 3ํšŒ (์•ฝ 7์ดˆ)
# - ์„ค๋ช…: ์™ธ๋ถ€ ์„œ๋ฒ„๋กœ ์—ฐ๊ฒฐ ์‹œ SYN ํŒจํ‚ท ์žฌ์ „์†ก ํšŸ์ˆ˜
net.ipv4.tcp_syn_retries = 3

4. ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ

# ===== Swappiness =====

# vm.swappiness: Swap ์‚ฌ์šฉ ์ ๊ทน์„ฑ (0~100)
# - ๊ธฐ๋ณธ๊ฐ’: 60
# - ๊ถŒ์žฅ๊ฐ’: 
#   * 0: Swap ์ตœ์†Œํ™” (๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„, Redis, Elasticsearch)
#   * 10: ์„ฑ๋Šฅ ์ค‘์‹œ (์›น ์„œ๋ฒ„, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„)
#   * 60: ๊ธฐ๋ณธ๊ฐ’ (๋ฐ์Šคํฌํ†ฑ, ์ผ๋ฐ˜ ์„œ๋ฒ„)
#   * 100: ์ ๊ทน์  Swap (๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ํ™˜๊ฒฝ)
# - ์›๋ฆฌ:
#   * ๊ฐ’์ด ๋†’์„์ˆ˜๋ก โ†’ ์ปค๋„์ด ์ ๊ทน์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ Swap์œผ๋กœ ์ด๋™
#   * ๊ฐ’์ด ๋‚ฎ์„์ˆ˜๋ก โ†’ RAM์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉ, Swap์€ ์ตœํ›„์˜ ์ˆ˜๋‹จ
# - ํšจ๊ณผ:
#   * 0: OOM Killer ๋ฐœ๋™ ๊ฐ€๋Šฅ์„ฑ ์ฆ๊ฐ€ํ•˜์ง€๋งŒ ์„ฑ๋Šฅ ์ตœ์ƒ
#   * 10: ์„ฑ๋Šฅ๊ณผ ์•ˆ์ •์„ฑ์˜ ๊ท ํ˜• (ํ”„๋กœ๋•์…˜ ๊ถŒ์žฅ)
#   * 60: ๋””์Šคํฌ I/O ์ฆ๊ฐ€๋กœ ์„ฑ๋Šฅ ์ €ํ•˜ ๊ฐ€๋Šฅ
# - ํ™•์ธ:
#   * cat /proc/sys/vm/swappiness
#   * free -h (Swap ์‚ฌ์šฉ๋Ÿ‰ ํ™•์ธ)
#   * vmstat 1 (si/so ์ปฌ๋Ÿผ์œผ๋กœ Swap In/Out ๋ชจ๋‹ˆํ„ฐ๋ง)
# - ์ฃผ์˜: 
#   * 0์œผ๋กœ ์„ค์ •ํ•ด๋„ Swap์ด ์™„์ „ํžˆ ๋น„ํ™œ์„ฑํ™”๋˜๋Š” ๊ฒƒ์€ ์•„๋‹˜
#   * swapoff -a๋กœ ์™„์ „ํžˆ ๋น„ํ™œ์„ฑํ™” ๊ฐ€๋Šฅ (์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ถŒ์žฅ)
vm.swappiness = 10

# ===== Dirty Page ๊ด€๋ฆฌ =====

# vm.dirty_ratio: ์ „์ฒด ๋ฉ”๋ชจ๋ฆฌ ๋Œ€๋น„ ๋”ํ‹ฐ ํŽ˜์ด์ง€ ๋น„์œจ ์ž„๊ณ„๊ฐ’ (%)
# - ๊ธฐ๋ณธ๊ฐ’: 20 (20%)
# - ๊ถŒ์žฅ๊ฐ’: 15
# - ์„ค๋ช…:
#   * Dirty Page: ์ˆ˜์ •๋˜์—ˆ์ง€๋งŒ ์•„์ง ๋””์Šคํฌ์— ์“ฐ์ด์ง€ ์•Š์€ ํŽ˜์ด์ง€ ์บ์‹œ
#   * ์ž„๊ณ„๊ฐ’ ๋„๋‹ฌ ์‹œ โ†’ ํ”„๋กœ์„ธ์Šค ๋ธ”๋ก๋˜๊ณ  ๊ฐ•์ œ๋กœ ๋””์Šคํฌ์— ์“ฐ๊ธฐ ์‹œ์ž‘
# - ๋ฌธ์ œ: ๊ฐ’์ด ๋„ˆ๋ฌด ํฌ๋ฉด (์˜ˆ: 40%) โ†’ ํ•œ๊บผ๋ฒˆ์— ๋””์Šคํฌ ์“ฐ๊ธฐ โ†’ ์‹œ์Šคํ…œ ์‘๋‹ต ์ง€์—ฐ
# - ์˜ˆ์‹œ: 32GB RAM, dirty_ratio=15 โ†’ 4.8GB ๋”ํ‹ฐ ํŽ˜์ด์ง€ ๋ˆ„์  ์‹œ ๊ฐ•์ œ ์“ฐ๊ธฐ
# - ํšจ๊ณผ: ์“ฐ๊ธฐ ์„ฑ๋Šฅ๊ณผ ์‹œ์Šคํ…œ ์‘๋‹ต์„ฑ์˜ ๊ท ํ˜•
# - ํ™•์ธ:
#   * cat /proc/meminfo | grep Dirty
#   * watch -n 1 'cat /proc/meminfo | grep -E "Dirty|Writeback"'
vm.dirty_ratio = 15

# vm.dirty_background_ratio: ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์“ฐ๊ธฐ ์‹œ์ž‘ ๋น„์œจ (%)
# - ๊ธฐ๋ณธ๊ฐ’: 10 (10%)
# - ๊ถŒ์žฅ๊ฐ’: 5
# - ์„ค๋ช…:
#   * ์ด ๊ฐ’ ๋„๋‹ฌ ์‹œ โ†’ pdflush/flush ์ปค๋„ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ๋””์Šคํฌ์— ์“ฐ๊ธฐ ์‹œ์ž‘
#   * ํ”„๋กœ์„ธ์Šค๋Š” ๋ธ”๋ก๋˜์ง€ ์•Š์Œ (๊ณ„์† ์‹คํ–‰ ๊ฐ€๋Šฅ)
# - ์›๋ฆฌ:
#   1. ๋”ํ‹ฐ ํŽ˜์ด์ง€ 5% ๋„๋‹ฌ โ†’ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์“ฐ๊ธฐ ์‹œ์ž‘ (๋ถ€๋“œ๋Ÿฝ๊ฒŒ)
#   2. ๋”ํ‹ฐ ํŽ˜์ด์ง€ 15% ๋„๋‹ฌ โ†’ ๊ฐ•์ œ ์“ฐ๊ธฐ (ํ”„๋กœ์„ธ์Šค ๋ธ”๋ก)
# - ํšจ๊ณผ: ๋””์Šคํฌ I/O๋ฅผ ๋ฏธ๋ฆฌ๋ฏธ๋ฆฌ ๋ถ„์‚ฐ์‹œ์ผœ ์‘๋‹ต ์ง€์—ฐ ๋ฐฉ์ง€
vm.dirty_background_ratio = 5

# vm.dirty_expire_centisecs: ๋”ํ‹ฐ ํŽ˜์ด์ง€ ๋งŒ๋ฃŒ ์‹œ๊ฐ„ (centiseconds, 1/100์ดˆ)
# - ๊ธฐ๋ณธ๊ฐ’: 3000 (30์ดˆ)
# - ๊ถŒ์žฅ๊ฐ’: 3000
# - ์„ค๋ช…: ์ด ์‹œ๊ฐ„๋ณด๋‹ค ์˜ค๋ž˜๋œ ๋”ํ‹ฐ ํŽ˜์ด์ง€๋Š” ์šฐ์„ ์ ์œผ๋กœ ๋””์Šคํฌ์— ์“ฐ๊ธฐ
# - ํšจ๊ณผ: ๋ฐ์ดํ„ฐ ์†์‹ค ๋ฐฉ์ง€ (์ •์ „ ์‹œ ์ตœ๋Œ€ 30์ดˆ ๋ฐ์ดํ„ฐ๋งŒ ์†์‹ค)
# - ์‹œ๋‚˜๋ฆฌ์˜ค: ํŒŒ์ผ ์“ฐ๊ธฐ โ†’ 30์ดˆ ์ด๋‚ด ์ •์ „ โ†’ ๋ฐ์ดํ„ฐ ์†์‹ค
vm.dirty_expire_centisecs = 3000

# vm.dirty_writeback_centisecs: pdflush ์Šค๋ ˆ๋“œ ์‹คํ–‰ ๊ฐ„๊ฒฉ (centiseconds)
# - ๊ธฐ๋ณธ๊ฐ’: 500 (5์ดˆ)
# - ๊ถŒ์žฅ๊ฐ’: 500
# - ์„ค๋ช…: pdflush ์ปค๋„ ์Šค๋ ˆ๋“œ๊ฐ€ ๊นจ์–ด๋‚˜์„œ ๋”ํ‹ฐ ํŽ˜์ด์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ์ฃผ๊ธฐ
# - ํšจ๊ณผ: ๋””์Šคํฌ ์“ฐ๊ธฐ ๋นˆ๋„ ์กฐ์ ˆ
# - ์ฃผ์˜: ๊ฐ’์„ 0์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์“ฐ๊ธฐ ๋น„ํ™œ์„ฑํ™” (์œ„ํ—˜!)
vm.dirty_writeback_centisecs = 500

# ===== OOM (Out Of Memory) Killer =====

# vm.overcommit_memory: ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฒ„์ปค๋ฐ‹ ์ •์ฑ…
# - ๊ธฐ๋ณธ๊ฐ’: 0 (ํœด๋ฆฌ์Šคํ‹ฑ)
# - ๊ฐ’์˜ ์˜๋ฏธ:
#   * 0: ํœด๋ฆฌ์Šคํ‹ฑ - ์ปค๋„์ด ์š”์ฒญ์„ ํ‰๊ฐ€ํ•˜์—ฌ ํŒ๋‹จ (๊ธฐ๋ณธ๊ฐ’)
#   * 1: ํ•ญ์ƒ ํ—ˆ์šฉ - ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๋ณด๋‹ค ๋งŽ์€ ํ• ๋‹น ํ—ˆ์šฉ (์œ„ํ—˜!)
#   * 2: ์—„๊ฒฉ ์ œํ•œ - Swap + RAM * overcommit_ratio๊นŒ์ง€๋งŒ ํ—ˆ์šฉ
# - ์„ค๋ช…:
#   * ํ”„๋กœ์„ธ์Šค๊ฐ€ malloc()๋กœ ๋ฉ”๋ชจ๋ฆฌ ์š”์ฒญ โ†’ ์‹ค์ œ ์‚ฌ์šฉ ์ „๊นŒ์ง€ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ๋ฏธํ• ๋‹น
#   * ์˜ค๋ฒ„์ปค๋ฐ‹: ์ด ํ• ๋‹น ์š”์ฒญ > ์‹ค์ œ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ
# - ์‹œ๋‚˜๋ฆฌ์˜ค:
#   * Mode 0: ์ผ๋ฐ˜ ์„œ๋ฒ„ (๊ท ํ˜•)
#   * Mode 1: ๊ณผํ•™ ๊ณ„์‚ฐ (๋ฉ”๋ชจ๋ฆฌ ๋งŽ์ด ํ• ๋‹นํ•˜์ง€๋งŒ ์ ๊ฒŒ ์‚ฌ์šฉ)
#   * Mode 2: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ)
# - ํ™•์ธ: cat /proc/meminfo | grep Committed
vm.overcommit_memory = 0

# vm.overcommit_ratio: overcommit_memory=2์ผ ๋•Œ ํ—ˆ์šฉ ๋น„์œจ (%)
# - ๊ธฐ๋ณธ๊ฐ’: 50 (50%)
# - ์„ค๋ช…: ์ตœ๋Œ€ ํ• ๋‹น = Swap + (RAM * overcommit_ratio / 100)
# - ์˜ˆ์‹œ: 32GB RAM, 8GB Swap, ratio=50 โ†’ ์ตœ๋Œ€ 24GB (8 + 32*0.5)
vm.overcommit_ratio = 50

# vm.panic_on_oom: OOM ๋ฐœ์ƒ ์‹œ ์ปค๋„ ํŒจ๋‹‰ ์—ฌ๋ถ€
# - ๊ธฐ๋ณธ๊ฐ’: 0 (OOM Killer ์‹คํ–‰)
# - ๊ถŒ์žฅ๊ฐ’: 0 (์ผ๋ฐ˜ ์„œ๋ฒ„), 1 (ํด๋Ÿฌ์Šคํ„ฐ ๋…ธ๋“œ)
# - ์„ค๋ช…:
#   * 0: OOM Killer๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŽ์ด ์“ฐ๋Š” ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ
#   * 1: ์ฆ‰์‹œ ์ปค๋„ ํŒจ๋‹‰ โ†’ ์‹œ์Šคํ…œ ์žฌ๋ถ€ํŒ…
# - ์‚ฌ์šฉ ์‚ฌ๋ก€:
#   * 0: ๋‹จ์ผ ์„œ๋ฒ„ (ํ”„๋กœ์„ธ์Šค ํ•˜๋‚˜๋งŒ ์ฃฝ์ด๊ณ  ์‹œ์Šคํ…œ ์œ ์ง€)
#   * 1: HA ํด๋Ÿฌ์Šคํ„ฐ (๋…ธ๋“œ ์ „์ฒด ์žฌ์‹œ์ž‘ํ•˜์—ฌ ํŽ˜์ผ์˜ค๋ฒ„)
vm.panic_on_oom = 0

# vm.oom_kill_allocating_task: OOM ๋ฐœ์ƒ ์‹œ ๋ฉ”๋ชจ๋ฆฌ ์š”์ฒญํ•œ ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ
# - ๊ธฐ๋ณธ๊ฐ’: 0 (๊ฐ€์žฅ ํฐ ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ)
# - ์„ค๋ช…:
#   * 0: OOM Score๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ
#   * 1: ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์š”์ฒญํ•œ ํ”„๋กœ์„ธ์Šค ์ฆ‰์‹œ ์ข…๋ฃŒ
vm.oom_kill_allocating_task = 0

# ===== Huge Pages (๋Œ€์šฉ๋Ÿ‰ ๋ฉ”๋ชจ๋ฆฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜) =====

# vm.nr_hugepages: Huge Page ๊ฐœ์ˆ˜
# - ๊ธฐ๋ณธ๊ฐ’: 0 (๋น„ํ™œ์„ฑํ™”)
# - ๊ถŒ์žฅ๊ฐ’: ๊ณ„์‚ฐ ํ•„์š” (์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฉ”๋ชจ๋ฆฌ / 2MB)
# - ์„ค๋ช…:
#   * ์ผ๋ฐ˜ ํŽ˜์ด์ง€: 4KB
#   * Huge Page: 2MB (x86_64)
#   * TLB (Translation Lookaside Buffer) ๋ฏธ์Šค ๊ฐ์†Œ โ†’ ์„ฑ๋Šฅ ํ–ฅ์ƒ
# - ๊ณ„์‚ฐ:
#   * Oracle DB 10GB SGA ํ•„์š” โ†’ 10240 MB / 2 MB = 5120 Huge Pages
# - ํ™•์ธ:
#   * cat /proc/meminfo | grep -i huge
#   * hugeadm --pool-list
# - ์‚ฌ์šฉ ์‚ฌ๋ก€:
#   * Oracle Database (SGA)
#   * PostgreSQL (shared_buffers)
#   * Redis (๋Œ€์šฉ๋Ÿ‰ ์ธ์Šคํ„ด์Šค)
#   * SAP HANA
# - ์ฃผ์˜: 
#   * ์‹œ์Šคํ…œ ๋ถ€ํŒ… ์‹œ ๋ฏธ๋ฆฌ ํ• ๋‹น (Swap ๋ถˆ๊ฐ€)
#   * ๋„ˆ๋ฌด ๋งŽ์ด ์„ค์ •ํ•˜๋ฉด ์ผ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ
vm.nr_hugepages = 0

# vm.hugetlb_shm_group: Huge Page๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ทธ๋ฃน GID
# - ์„ค๋ช…: ์ด ๊ทธ๋ฃน์— ์†ํ•œ ์‚ฌ์šฉ์ž๋งŒ Huge Page ์‚ฌ์šฉ ๊ฐ€๋Šฅ
# - ์˜ˆ์‹œ: oracle ๊ทธ๋ฃน GID=1001
vm.hugetlb_shm_group = 0

# ===== Transparent Huge Pages (THP) =====

# ์ฐธ๊ณ : THP๋Š” sysctl์ด ์•„๋‹Œ /sys/kernel/mm/transparent_hugepage/์—์„œ ์„ค์ •
# - ํ™•์ธ: cat /sys/kernel/mm/transparent_hugepage/enabled
# - ๋น„ํ™œ์„ฑํ™” (Redis, MongoDB, Oracle ๊ถŒ์žฅ):
#   echo never > /sys/kernel/mm/transparent_hugepage/enabled
#   echo never > /sys/kernel/mm/transparent_hugepage/defrag
# - ์ด์œ : THP๋Š” ๋™์  ํ• ๋‹น์œผ๋กœ ์ง€์—ฐ(latency) ๋ฐœ์ƒ ๊ฐ€๋Šฅ

5. ํŒŒ์ผ ์‹œ์Šคํ…œ ๋ฐ ์ปค๋„ ์ œํ•œ

# ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ ์ œํ•œ
fs.file-max = 2097152                       # ์‹œ์Šคํ…œ ์ „์ฒด ์ตœ๋Œ€ FD
fs.nr_open = 1048576                        # ํ”„๋กœ์„ธ์Šค๋‹น ์ตœ๋Œ€ FD

# inotify ์ œํ•œ (ํŒŒ์ผ ๊ฐ์‹œ)
fs.inotify.max_user_watches = 524288        # ์‚ฌ์šฉ์ž๋‹น ์ตœ๋Œ€ ๊ฐ์‹œ ์ˆ˜
fs.inotify.max_user_instances = 512         # ์ธ์Šคํ„ด์Šค ์ˆ˜

# AIO (๋น„๋™๊ธฐ I/O)
fs.aio-max-nr = 1048576

# ์ปค๋„ ๋ฉ”์‹œ์ง€ ๋ฒ„ํผ
kernel.printk = 4 4 1 7                     # ์ฝ˜์†” ๋กœ๊ทธ ๋ ˆ๋ฒจ

# ์ฝ”์–ด ๋คํ”„ ์„ค์ •
kernel.core_uses_pid = 1                    # ์ฝ”์–ด ๋คํ”„์— PID ํฌํ•จ
kernel.core_pattern = /var/crash/core.%e.%p.%h.%t

6. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค/Docker ํ™˜๊ฒฝ ์ตœ์ ํ™”

# ===== ๋ธŒ๋ฆฟ์ง€ ๋„คํŠธ์›Œํฌ ์„ค์ • (ํ•„์ˆ˜!) =====

# net.bridge.bridge-nf-call-iptables: ๋ธŒ๋ฆฟ์ง€ ํŠธ๋ž˜ํ”ฝ iptables ์ฒ˜๋ฆฌ
# - ๊ธฐ๋ณธ๊ฐ’: 0 (๋น„ํ™œ์„ฑํ™”) ๋˜๋Š” 1
# - ๊ถŒ์žฅ๊ฐ’: 1 (์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํ•„์ˆ˜)
# - ์„ค๋ช…:
#   * Pod ๊ฐ„ ํ†ต์‹  ํŒจํ‚ท์ด Linux ๋ธŒ๋ฆฟ์ง€๋ฅผ ํ†ต๊ณผํ•  ๋•Œ iptables ๊ทœ์น™ ์ ์šฉ ์—ฌ๋ถ€
#   * ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค Service (kube-proxy)๊ฐ€ iptables๋กœ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ๊ตฌํ˜„
# - ๋ฌธ์ œ: ๋น„ํ™œ์„ฑํ™” ์‹œ Service Discovery ์ž‘๋™ ์•ˆ ํ•จ
# - ํ•„์ˆ˜ ์‹œ๋‚˜๋ฆฌ์˜ค:
#   * ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ชจ๋“  ๋…ธ๋“œ (๋งˆ์Šคํ„ฐ + ์›Œ์ปค)
#   * Docker Swarm
#   * Calico, Flannel, Weave ๋„คํŠธ์›Œํฌ ํ”Œ๋Ÿฌ๊ทธ์ธ
# - ํ™•์ธ:
#   * lsmod | grep br_netfilter (๋ชจ๋“ˆ ๋กœ๋“œ ํ™•์ธ)
#   * modprobe br_netfilter (๋ชจ๋“ˆ ๋กœ๋“œ)
# - ์ฃผ์˜: br_netfilter ์ปค๋„ ๋ชจ๋“ˆ์ด ๋จผ์ € ๋กœ๋“œ๋˜์–ด์•ผ ํ•จ
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1

# ===== IP ํฌ์›Œ๋”ฉ (ํ•„์ˆ˜!) =====

# net.ipv4.ip_forward: Pod ๊ฐ„ ํŒจํ‚ท ๋ผ์šฐํŒ…
# - ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ํ•„์ˆ˜ (Pod to Pod, Pod to Service ํ†ต์‹ )
# - ํ™•์ธ: sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1

# ===== Conntrack (์—ฐ๊ฒฐ ์ถ”์ ) ํ…Œ์ด๋ธ” =====

# net.netfilter.nf_conntrack_max: Conntrack ํ…Œ์ด๋ธ” ์ตœ๋Œ€ ํ•ญ๋ชฉ ์ˆ˜
# - ๊ธฐ๋ณธ๊ฐ’: 65536 (๋„ˆ๋ฌด ์ž‘์Œ!)
# - ๊ถŒ์žฅ๊ฐ’: 1048576 (100๋งŒ, ๋Œ€๊ทœ๋ชจ ํด๋Ÿฌ์Šคํ„ฐ)
# - ์„ค๋ช…:
#   * Conntrack: iptables๊ฐ€ ์ƒํƒœ ๊ธฐ๋ฐ˜ ๋ฐฉํ™”๋ฒฝ์„ ์œ„ํ•ด ์—ฐ๊ฒฐ ์ถ”์ 
#   * ๊ฐ TCP/UDP ์—ฐ๊ฒฐ๋งˆ๋‹ค ํ•ญ๋ชฉ ์ƒ์„ฑ (5-tuple: src IP, src port, dst IP, dst port, protocol)
# - ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์‹œ๋‚˜๋ฆฌ์˜ค:
#   * 100๊ฐœ Pod ร— 10๊ฐœ Service ร— 100 ์—ฐ๊ฒฐ = 100,000+ ํ•ญ๋ชฉ
#   * NodePort, LoadBalancer ์‚ฌ์šฉ ์‹œ ๋” ๋งŽ์€ ํ•ญ๋ชฉ
# - ๋ฌธ์ œ: ์ดˆ๊ณผ ์‹œ "nf_conntrack: table full, dropping packet" ์—๋Ÿฌ
# - ํ™•์ธ:
#   * cat /proc/sys/net/netfilter/nf_conntrack_count (ํ˜„์žฌ ์‚ฌ์šฉ)
#   * cat /proc/sys/net/netfilter/nf_conntrack_max (์ตœ๋Œ€๊ฐ’)
#   * conntrack -L | wc -l (์‹ค์ œ ์—ฐ๊ฒฐ ์ˆ˜)
# - ๋กœ๊ทธ: dmesg | grep conntrack
# - ๊ณ„์‚ฐ: ๋Œ€๋žต ๋ฉ”๋ชจ๋ฆฌ 1GB๋‹น 25,000 ํ•ญ๋ชฉ ๊ฐ€๋Šฅ
net.netfilter.nf_conntrack_max = 1048576
net.nf_conntrack_max = 1048576

# net.netfilter.nf_conntrack_tcp_timeout_established: TCP ์—ฐ๊ฒฐ ํƒ€์ž„์•„์›ƒ
# - ๊ธฐ๋ณธ๊ฐ’: 432000 (5์ผ!)
# - ๊ถŒ์žฅ๊ฐ’: 86400 (1์ผ) ๋˜๋Š” 3600 (1์‹œ๊ฐ„)
# - ์„ค๋ช…: ESTABLISHED ์ƒํƒœ TCP ์—ฐ๊ฒฐ์ด Conntrack ํ…Œ์ด๋ธ”์— ์œ ์ง€๋˜๋Š” ์‹œ๊ฐ„
# - ํšจ๊ณผ: ์˜ค๋ž˜๋œ ์—ฐ๊ฒฐ ๋น ๋ฅด๊ฒŒ ์ œ๊ฑฐํ•˜์—ฌ ํ…Œ์ด๋ธ” ๊ณต๊ฐ„ ํ™•๋ณด
# - ์ฃผ์˜: ๋„ˆ๋ฌด ์งง์œผ๋ฉด (์˜ˆ: 300์ดˆ) ์žฅ์‹œ๊ฐ„ ์œ ์ง€๋˜๋Š” ์—ฐ๊ฒฐ ๋Š๊น€
net.netfilter.nf_conntrack_tcp_timeout_established = 86400

# net.netfilter.nf_conntrack_tcp_timeout_time_wait: TIME_WAIT ํƒ€์ž„์•„์›ƒ
# - ๊ธฐ๋ณธ๊ฐ’: 120์ดˆ
# - ๊ถŒ์žฅ๊ฐ’: 30์ดˆ
# - ์„ค๋ช…: TIME_WAIT ์ƒํƒœ ์—ฐ๊ฒฐ์ด Conntrack์— ์œ ์ง€๋˜๋Š” ์‹œ๊ฐ„
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 30

# ===== ARP (Address Resolution Protocol) ํ…Œ์ด๋ธ” =====

# net.ipv4.neigh.default.gc_thresh1: ARP ํ…Œ์ด๋ธ” ์†Œํ”„ํŠธ ์ตœ์†Œ๊ฐ’
# - ๊ธฐ๋ณธ๊ฐ’: 128 (๋„ˆ๋ฌด ์ž‘์Œ!)
# - ๊ถŒ์žฅ๊ฐ’: 8192
# - ์„ค๋ช…: ์ด ๊ฐ’ ์ดํ•˜์—์„œ๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ์‹คํ–‰ ์•ˆ ํ•จ
# - ๋ฌธ์ œ: ๊ฐ’์ด ์ž‘์œผ๋ฉด "Neighbour table overflow" ์—๋Ÿฌ
# - ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค: Pod๋งˆ๋‹ค IP ์ฃผ์†Œ โ†’ ARP ํ•ญ๋ชฉ ๊ธ‰์ฆ
net.ipv4.neigh.default.gc_thresh1 = 8192

# net.ipv4.neigh.default.gc_thresh2: ARP ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ์‹œ์ž‘
# - ๊ธฐ๋ณธ๊ฐ’: 512
# - ๊ถŒ์žฅ๊ฐ’: 32768
# - ์„ค๋ช…: ์ด ๊ฐ’ ์ดˆ๊ณผ ์‹œ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ์‹œ์ž‘ (์˜ค๋ž˜๋œ ํ•ญ๋ชฉ ์ œ๊ฑฐ)
net.ipv4.neigh.default.gc_thresh2 = 32768

# net.ipv4.neigh.default.gc_thresh3: ARP ํ…Œ์ด๋ธ” ํ•˜๋“œ ์ตœ๋Œ€๊ฐ’
# - ๊ธฐ๋ณธ๊ฐ’: 1024
# - ๊ถŒ์žฅ๊ฐ’: 65536
# - ์„ค๋ช…: ์ ˆ๋Œ€ ์ดˆ๊ณผ ๋ถˆ๊ฐ€, ์ดˆ๊ณผ ์‹œ ์ƒˆ ํ•ญ๋ชฉ ๊ฑฐ๋ถ€
# - ํ™•์ธ: 
#   * ip -s neigh show (ARP ํ…Œ์ด๋ธ” ํ™•์ธ)
#   * arp -an | wc -l (ํ•ญ๋ชฉ ์ˆ˜)
net.ipv4.neigh.default.gc_thresh3 = 65536

# ===== ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ =====

# fs.file-max: ์‹œ์Šคํ…œ ์ „์ฒด ์ตœ๋Œ€ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ
# - ๊ธฐ๋ณธ๊ฐ’: ์ˆ˜์‹ญ๋งŒ (์‹œ์Šคํ…œ๋งˆ๋‹ค ๋‹ค๋ฆ„)
# - ๊ถŒ์žฅ๊ฐ’: 2097152 (200๋งŒ)
# - ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค: ๊ฐ Pod๋งˆ๋‹ค ๋‹ค์ˆ˜์˜ FD ์‚ฌ์šฉ (์†Œ์ผ“, ํŒŒ์ผ)
# - ํ™•์ธ:
#   * cat /proc/sys/fs/file-nr (์‚ฌ์šฉ์ค‘ / ์‚ฌ์šฉ๊ฐ€๋Šฅ / ์ตœ๋Œ€)
#   * lsof | wc -l (์—ด๋ฆฐ ํŒŒ์ผ ์ˆ˜)
fs.file-max = 2097152

# fs.inotify.max_user_watches: inotify ๊ฐ์‹œ ํŒŒ์ผ ์ˆ˜
# - ๊ธฐ๋ณธ๊ฐ’: 8192 (๋งค์šฐ ์ž‘์Œ!)
# - ๊ถŒ์žฅ๊ฐ’: 524288
# - ์„ค๋ช…: ํŒŒ์ผ ๋ณ€๊ฒฝ ๊ฐ์ง€ (kubectl logs -f, ConfigMap ์ž๋™ ๋ฆฌ๋กœ๋“œ)
# - ๋ฌธ์ œ: ์ดˆ๊ณผ ์‹œ "too many open files" ๋˜๋Š” "no space left on device" (๋””์Šคํฌ๋Š” ์ถฉ๋ถ„ํ•œ๋ฐ๋„)
# - ์‚ฌ์šฉ ์‚ฌ๋ก€:
#   * kubectl logs -f (์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ)
#   * Prometheus ํŒŒ์ผ ๊ฐ์‹œ
#   * IDE (VS Code, IntelliJ)
# - ํ™•์ธ: 
#   * cat /proc/sys/fs/inotify/max_user_watches
#   * find /proc/*/fd -lname anon_inode:inotify | wc -l (์‚ฌ์šฉ ์ค‘)
fs.inotify.max_user_watches = 524288
fs.inotify.max_user_instances = 512

# ===== Swap ๋น„ํ™œ์„ฑํ™” (์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ถŒ์žฅ) =====

# vm.swappiness: ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ๋Š” 0 ๊ถŒ์žฅ
# - ์„ค๋ช…: 
#   * ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ฆฌ์†Œ์Šค ์ œํ•œ(limits)์„ ์ •ํ™•ํžˆ ์ถ”์  ํ•„์š”
#   * Swap ์‚ฌ์šฉ ์‹œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์˜ˆ์ธก ๋ถˆ๊ฐ€ โ†’ Pod Eviction ์˜ค์ž‘๋™
# - ๊ณต์‹ ๊ถŒ์žฅ: Swap ์™„์ „ ๋น„ํ™œ์„ฑํ™” (swapoff -a)
# - ๋Œ€์•ˆ: vm.swappiness=0 (์ปค๋„์— ๋”ฐ๋ผ ์—ฌ์ „ํžˆ ์ผ๋ถ€ Swap ์‚ฌ์šฉ ๊ฐ€๋Šฅ)
vm.swappiness = 0

# ===== PID ์ œํ•œ =====

# kernel.pid_max: ์‹œ์Šคํ…œ ์ตœ๋Œ€ ํ”„๋กœ์„ธ์Šค ID
# - ๊ธฐ๋ณธ๊ฐ’: 32768
# - ๊ถŒ์žฅ๊ฐ’: 4194304 (๋Œ€๊ทœ๋ชจ ํด๋Ÿฌ์Šคํ„ฐ)
# - ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค: ๋งŽ์€ Pod + Container โ†’ ๋งŽ์€ ํ”„๋กœ์„ธ์Šค
# - ํ™•์ธ: cat /proc/sys/kernel/pid_max
kernel.pid_max = 4194304

# ===== ๋„คํŠธ์›Œํฌ ์„ฑ๋Šฅ =====

# net.core.somaxconn: Ingress Controller, Service ์ฒ˜๋ฆฌ๋Ÿ‰
# - ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค Ingress (Nginx, Traefik)๋Š” ๋†’์€ backlog ํ•„์š”
net.core.somaxconn = 65535

# net.ipv4.tcp_max_syn_backlog: NodePort, LoadBalancer ํŠธ๋ž˜ํ”ฝ
net.ipv4.tcp_max_syn_backlog = 8192

# ===== ๋ณด์•ˆ (์„ ํƒ์ ) =====

# net.ipv4.conf.all.rp_filter: Calico, Flannel์—์„œ ๋ฌธ์ œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ
# - Loose Mode (2) ๊ถŒ์žฅ (๋น„๋Œ€์นญ ๋ผ์šฐํŒ… ํ—ˆ์šฉ)
net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋…ธ๋“œ ์ ์šฉ ์˜ˆ์‹œ:

# /etc/sysctl.d/99-kubernetes.conf
# ๋ธŒ๋ฆฟ์ง€ ๋„คํŠธ์›Œํฌ (ํ•„์ˆ˜)
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1

# IP ํฌ์›Œ๋”ฉ (ํ•„์ˆ˜)
net.ipv4.ip_forward = 1

# Conntrack (๋Œ€๊ทœ๋ชจ ํด๋Ÿฌ์Šคํ„ฐ)
net.netfilter.nf_conntrack_max = 1048576
net.netfilter.nf_conntrack_tcp_timeout_established = 86400

# ARP ํ…Œ์ด๋ธ”
net.ipv4.neigh.default.gc_thresh1 = 8192
net.ipv4.neigh.default.gc_thresh2 = 32768
net.ipv4.neigh.default.gc_thresh3 = 65536

# ํŒŒ์ผ ์‹œ์Šคํ…œ
fs.file-max = 2097152
fs.inotify.max_user_watches = 524288

# ๋ฉ”๋ชจ๋ฆฌ
vm.swappiness = 0
vm.overcommit_memory = 1

# ํ”„๋กœ์„ธ์Šค
kernel.pid_max = 4194304

# ๋„คํŠธ์›Œํฌ
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 8192

# ์ ์šฉ
sudo modprobe br_netfilter
sudo sysctl --system

ํ™•์ธ ์Šคํฌ๋ฆฝํŠธ:

#!/bin/bash
echo "=== ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์ปค๋„ ํŒŒ๋ผ๋ฏธํ„ฐ ํ™•์ธ ==="

echo "1. ๋ธŒ๋ฆฟ์ง€ ์„ค์ •:"
sysctl net.bridge.bridge-nf-call-iptables
sysctl net.bridge.bridge-nf-call-ip6tables

echo "2. IP ํฌ์›Œ๋”ฉ:"
sysctl net.ipv4.ip_forward

echo "3. Conntrack:"
echo "  ํ˜„์žฌ: $(cat /proc/sys/net/netfilter/nf_conntrack_count)"
echo "  ์ตœ๋Œ€: $(cat /proc/sys/net/netfilter/nf_conntrack_max)"

echo "4. ARP ํ…Œ์ด๋ธ”:"
echo "  ํ•ญ๋ชฉ ์ˆ˜: $(ip neigh show | wc -l)"
sysctl net.ipv4.neigh.default.gc_thresh3

echo "5. ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ:"
cat /proc/sys/fs/file-nr
sysctl fs.inotify.max_user_watches

echo "6. Swap:"
sysctl vm.swappiness
free -h | grep Swap

7. ์‹ค๋ฌด ์ ์šฉ ์˜ˆ์ œ

๊ณ ์„ฑ๋Šฅ ์›น ์„œ๋ฒ„ (Nginx/Apache):

# /etc/sysctl.d/99-web-server.conf
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 100000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 10000 65535
vm.swappiness = 10
fs.file-max = 2097152

# ์ ์šฉ
sudo sysctl -p /etc/sysctl.d/99-web-server.conf

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„ (MySQL/PostgreSQL):

# /etc/sysctl.d/99-database.conf
vm.swappiness = 1                           # Swap ์ตœ์†Œํ™”
vm.dirty_ratio = 15
vm.dirty_background_ratio = 5
kernel.shmmax = 68719476736                 # ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ์ตœ๋Œ€๊ฐ’ (64GB)
kernel.shmall = 4294967296
fs.file-max = 2097152

# Huge Pages (์˜ˆ: 10GB)
vm.nr_hugepages = 5120

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์›Œ์ปค ๋…ธ๋“œ:

# /etc/sysctl.d/99-kubernetes.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
net.netfilter.nf_conntrack_max = 1048576
vm.swappiness = 0
fs.inotify.max_user_watches = 524288
fs.file-max = 2097152

8. ์ปค๋„ ํŒŒ๋ผ๋ฏธํ„ฐ ํ™•์ธ ๋ฐ ๊ฒ€์ฆ

# ํ˜„์žฌ ์„ค์ • ํ™•์ธ
sysctl -a | grep tcp_rmem
sysctl net.ipv4.tcp_tw_reuse

# ์ ์šฉ๋œ ์„ค์ • ๊ฒ€์ฆ
cat /proc/sys/net/ipv4/tcp_tw_reuse
cat /proc/sys/vm/swappiness

# ๋ถ€ํŒ… ์‹œ ์ž๋™ ์ ์šฉ ํ™•์ธ
sudo sysctl --system

# ์„ค์ • ํŒŒ์ผ ์œ„์น˜
/etc/sysctl.conf                # ์ „ํ†ต์  ์œ„์น˜
/etc/sysctl.d/*.conf            # ์šฐ์„  ์ ์šฉ (๊ถŒ์žฅ)
/run/sysctl.d/*.conf            # ๋Ÿฐํƒ€์ž„ ์„ค์ •
/usr/lib/sysctl.d/*.conf        # ์‹œ์Šคํ…œ ๊ธฐ๋ณธ๊ฐ’

9. ์ฃผ์š” ํŒŒ๋ผ๋ฏธํ„ฐ ๋น ๋ฅธ ์ฐธ์กฐํ‘œ

ํŒŒ๋ผ๋ฏธํ„ฐ ๊ธฐ๋ณธ๊ฐ’ ๊ถŒ์žฅ๊ฐ’ ์šฉ๋„
vm.swappiness 60 10 ์›น/DB ์„œ๋ฒ„
net.core.somaxconn 128 65535 ๊ณ ์„ฑ๋Šฅ ์›น ์„œ๋ฒ„
net.ipv4.tcp_tw_reuse 0 1 TIME_WAIT ์žฌ์‚ฌ์šฉ
fs.file-max ์ˆ˜์‹ญ๋งŒ 2097152 ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ
net.ipv4.ip_forward 0 1 ๋ผ์šฐํ„ฐ/์ฟ ๋ฒ„๋„คํ‹ฐ์Šค
net.netfilter.nf_conntrack_max 65536 1048576 ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค
fs.inotify.max_user_watches 8192 524288 IDE/๋นŒ๋“œ ํˆด

์ฃผ์˜์‚ฌํ•ญ:

  • ๋ณ€๊ฒฝ ์ „ ๋ฐ˜๋“œ์‹œ ๋ฐฑ์—… ํ•„์š”
  • ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์€ ํ…Œ์ŠคํŠธ ํ›„ ์ ์šฉ
  • ์‹œ์Šคํ…œ ์žฌ๋ถ€ํŒ… ์‹œ์—๋„ ์œ ์ง€๋˜๋Š”์ง€ ํ™•์ธ (/etc/sysctl.conf ๋˜๋Š” /etc/sysctl.d/)

์ฐธ๊ณ  ์ž๋ฃŒ

์ฐธ๊ณ  ์ž๋ฃŒ

โš ๏ธ **GitHub.com Fallback** โš ๏ธ