NGINX๋ Master Process์๋ ์ฌ๋ฌ worker์ helper๊ฐ ์๋ค.
# ps -ef --forest | grep nginx
root 32475 1 0 13:36 ? 00:00:00 nginx: master process /usr/sbin/nginx
-c /etc/nginx/nginx.conf
nginx 32476 32475 0 13:36 ? 00:00:00 _ nginx: worker process
nginx 32477 32475 0 13:36 ? 00:00:00 _ nginx: worker process
nginx 32479 32475 0 13:36 ? 00:00:00 _ nginx: worker process
nginx 32480 32475 0 13:36 ? 00:00:00 _ nginx: worker process
nginx 32481 32475 0 13:36 ? 00:00:00 _ nginx: cache manager process
nginx 32482 32475 0 13:36 ? 00:00:00 _ nginx: cache loader process
๋๋ ์ด NGINX์ process์ worker์ ํจ๊ณผ๋ฅผ Apache JMeter๋ฅผ ํตํด์ ํ ์คํธ ํด๋ณด๋ ค๊ณ ํ๋ค.
- Apache JMeter ์ค์น
brew install jmeter
์ ๋ช ๋ น์ด๋ฅผ ํตํด JMeter๋ฅผ ์ค์นํ ์ ์๋ค.
jmeter
์ ๋ช ๋ น์ด๋ก JMeter๋ฅผ ์ผ์ฃผ์.
- JMeter ์ค์
Thread Group ๋ง๋ค๊ธฐ
Test Plan์ ํ ์คํธ๋ฅผ ํด๋ณผ ๊ณํ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
์ฐํด๋ฆญ -> Add -> Threads -> Thread Group์ ๋๋ฌ์ ์๋ก์ด Thread Group์ ์์ฑํด์ค๋ค.
๊ทธ๋ฌ๋ฉด ์๋ก์ด ์ค๋ ๋ ๊ทธ๋ฃน์ ๋ง๋ค ์ ์๋๋ฐ,
์ฌ๊ธฐ์ ํด๋นํ๋ ์ต์ ๋ค์ ๋ณด์.
Number of Threads
๋ง ๊ทธ๋๋ก ์ค๋ ๋์ ์์ด๋ค. HTTP์์ฒญ์ ํ๋ ์ ์ ์ ์๋ผ๊ณ ์๊ฐํ๋ฉด ๋๊ฒ ๋ค.
1000์ผ๋ก ์ค์ ํ๋ฉด 1000๋ช ์ ์ ์ ๊ฐ HTTP์์ฒญ์ ํ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
Ramp-up peroid
์ค๋ ๋๊ฐ ์์ฑ๋๋ ์๊ฐ์ ๋ปํ๋ค.
์ฆ, Number of Threads = 1000, Ramp-up = 10์ด๋ฉด
1000๋ช ์ ์ ์ ๊ฐ ์์ฑ๋๋๋ฐ 10์ด๊ฐ ๊ฑธ๋ฆฐ๋ค.
์ฆ 1์ด์ 100ํ์ HTTP์์ฒญ์ด ์ผ์ด๋ ๊ฒ์ด๋ค.
๋๋ Ramp-up์ 0์ผ๋ก ์ ์ํด์ 1000๋ช ์ ์ ์ ๊ฐ ๋์์ ์ํ๋ ํ ์คํธ๋ฅผ ํด๋ณผ ๊ฒ์ด๋ค.
Loop Count
๋ฐ๋ณต ํ์์ด๋ค.
ํ ์ค๋ ๋๊ฐ ํด๋น ์์ ์ ๋ฐ๋ณตํ ํ์๋ฅผ ๋ปํ๋ค.
Number of Threads = 1000, Loop Count =10 ์ด๋ฉด ์ด 10000๋ฒ ์์ฒญ์ด ์์ฑ๋๋ค.
HTTP Request ๋ง๋ค๊ธฐ
์ด์ ๋ง๋ค์๋ Thread Group ์ฐํด๋ฆญ -> Add -> Sampler -> HTTP Request๋ฅผ ๋๋ฌ์ Request ์ค์ ์ ํด์ฃผ์.
์ฌ๊ธฐ๋ค๊ฐ HTTP ์์ฒญ์ ํ ์คํธํ Request ์ค์ ์ ์ ์ด๋ฃ์ผ๋ฉด ๋๊ฒ ๋ค.
Listener ๋ง๋ค๊ธฐ
์ด์ HTTP ์์ฒญ์ ํตํด ๋ง๋ค์ด์ง๋ ๊ฒฐ๊ณผ๋ฅผ ๋ถ์ํ ์๋ฃ๋ฅผ ๋ณด๊ธฐ ์ํด Listner๋ฅผ ๋ง๋ค์ด์ค์ผํ๋ค.
์ํ๋ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ์ ์ ํํ๋ฉด ๋๋ค(์ฌ๋ฌ๊ฐ๋ฅผ ๋ง๋ค ์ ์๋ค).
์ด์ ๋ชจ๋ ์ค๋น๋ ์๋ฃ๋๋ค. Start๋ฒํผ์ ๋๋ฅด๋ฉด ํ ์คํธ๋ฅผ ํด๋ณผ ์ ์๋ค.
ํ ์คํธ ํ๊ธฐ์ ์ ์ด์ ๊ธฐ๋ก๋ค์ ์ง์ฐ๊ณ ํ ์คํธ ํ์.
- ์ฑ๋ฅ ํ ์คํธ
Settings
CPU : AWS t2.medium - 2 vCPU
Framework : Django
Protocol : uWSGI
Request:
์ด 10000๋ช
์ ์ ์ ๊ฐ html, js, cssํ์ผ ์ธ ๊ฐ๋ฅผ ๋ฐ๋๋ค๊ณ ๊ฐ์ ํด์ Loop Count๋ฅผ 3์ผ๋ก ์ ํ๋ค.
๋ชจ๋ ์ ์ ๊ฐ ๋์ ์ ์์ ํ๋ค.
case 1.
[NGINX]
worker_processes : 1
worker_connections : 1024
[uWSGI]
processes : 5
- ๊ฒฐ๊ณผ
๋ฌด๋ ค 32%, ์ฝ 1/3์ด Error๋ฅผ ๋ฐ์ ๊ฒ์ ๋ณผ ์ ์๋ค. Error ๋ก๊ทธ๋ Socket Closed์๋ค.
๋์ ์ ์์ด ๊ฐ๋ฅํ ์๋ฅผ ์ด๊ณผํ๊ธฐ ๋๋ฌธ์ ์์ผ์ด ๋ซํ ๊ฒ์ด๋ค.
์ ์ ๊ฐ ๋ง์ด ๋ชฐ๋ฆฌ๋ ์ด๋ฐ, ์๋ต ์๊ฐ์ด ์ฝ 3000ms(3์ด)๋์ธ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ด๋ฐ ์ ์ ๊ฐ ์ฒ๋ฆฌ๋ ์ดํ๋ก๋ 1000ms(1์ด)์ด๋ด๋ฅผ ๋จธ๋ฌผ๋ค๊ฐ ์์ ํ๋ ๋ชจ์ต์ ๋ณผ ์ ์๋ค.
case 2.
[NGINX]
worker_processes : 2
worker_connections : 1024
[uWSGI]
processes : 5
process๋ฅผ ํ๋ ๋ ๋๋ ธ๋ค.
- ๊ฒฐ๊ณผ
Error๊ฐ 32% -> 28%๋ก ์กฐ๊ธ ์ค์ด๋ ๋ชจ์ต์ ๋ณผ ์ ์๋ค.
ํจ๊ณผ๊ฐ ๊ทธ๋ ๊ฒ ๋ง์ด ๋ฌ๋ผ์ง์ง ์์๋ค. ์คํ๋ ค ์๋ต์๊ฐ์ด ๋์ด๋๊ธด ํ์ง๋ง, ๋น์ทํ๋ค๊ณ ๋ณด๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
case 3.
[NGINX]
worker_processes : 2
worker_connections : 4000
[uWSGI]
processes : 5
worker๋ฅผ 4000์ผ๋ก ๋๋ ธ๋ค.
- ๊ฒฐ๊ณผ
Error๊ฐ ์ฝ 13%๋ก ๋์๋ค. ๋ง์ด ์ค์ด๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์๋ต ์๋๊ฐ 1600ms(์ฝ 1.6์ด) ์ ๋์ ์ต๋๋ฅผ ์ฐ์์ง๋ง, ์๋ต ์๋๊ฐ ๋ง์ด ์ข์์ง ๊ฒ์ ๋ณผ ์ ์๋ค.
case 4.
[NGINX]
worker_processes : 2
worker_connections : 4000
[uWSGI]
processes : 10
uwsgi์ process๋ฅผ ๋๋ ธ๋ค.
- ๊ฒฐ๊ณผ
Error๊ฐ ๋ง์ด ์ค์๋ค.
์๋ต ์๊ฐ์ ์ ๊ณผ ๋น์ทํ๋ค.
- ๊ฒฐ๊ณผ
ํ๋ก ์ ๋ฆฌํด๋ณด๋ฉด ๋๋ต ์ด๋ ๋ค.
[NGINX] processes : 1 connections : 1024 [uWSGI] processes : 5 |
[NGINX] processes : 2 connections : 1024 [uWSGI] processes : 5 |
[NGINX] processes : 2 connections : 4000 [uWSGI] processes : 5 |
[NGINX] processes : 2 connections : 4000 [uWSGI] processes : 10 |
|
Error (%) | 32 | 28 | 12 | 3 |
Max Response Time | 3.2s | 4.8s | 1.4s | 1.7s |
์ฌ๊ธฐ์ ๋์ฌ๊ฒจ ๋ณผ ๊ฒ์ด ์๋ค.
1. NGINX์ process๊ฐ 1 -> 2๋ก ๋์ด๋ฌ์์๋ ์ Error๋ Response Time์ด ๋์ ๋๊ฒ ๊ฐ์ ๋์ง ์์์๊น?
NGINX process๋ ๋ชจ๋ request๋ฅผ ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌํ๋ค.
๋ฐ๋ผ์, worker์ ๊ฐ์๊ฐ ํ๋์ฌ๋ ์๋ฒ๋ ์ต๋ํ์ ์ฑ๋ฅ์ ์ฌ์ฉํ์ฌ ์ฒ๋ฆฌํ๋ค.
worker์ ๊ฐ์๋ฅผ ๋๋ฆฌ๋ ๊ฒ์ด ์ฑ๋ฅ ํฅ์์ ํจ๊ณผ๊ฐ ์๋ค.
2. NGINX์ connections๊ฐ 1024 -> 4000์ผ๋ก ๋์ด๋ ๋ ์ฑ๋ฅ์ด ํฅ์๋๋ค.
connections๋ ๋์์ ์ ์ ๊ฐ๋ฅํ connection์ ์๋ฅผ ๋ปํ๋ค.
๋ฐ๋ผ์, ์ต๋ ์ฐ๊ฒฐ ์๋ ๋ค์๊ณผ ๊ฐ๋ค.
Max Connections = worker_processes * worker_connections
์ด๋ก์จ process๊ฐ ๋์ด๋๋ ์ฑ๋ฅ์ด ํฅ์๋์ง ์์๊ณ ,
connections๊ฐ ๋์ด๋ฌ์์ ๋ฐ๋ผ ์ต๋ connection์ด ๋์ด๋ฌ์ผ๋ฏ๋ก, ๋์ ์ ์์ ๋ํ ์๊ตฌ๋ ์ถฉ์กฑ์ด ๋ง์์ก๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์ด ํฅ์๋ ๊ฒ์ผ๋ก ๋ณผ ์ ์๋ค.
'BackEnd > Server' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
MSA๊ตฌ์กฐ ๋ด์์ JPA ์ฐ๊ด๊ด๊ณ (0) | 2024.01.30 |
---|---|
[NGNIX] ์๋ฒ SSL ์ค์ (0) | 2023.09.02 |
[SLASH23] ์ค์๊ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ (0) | 2023.09.02 |
[SLASH 23] PinPoint๋ฅผ ์ฌ์ฉํ์ฌ ๋ถ์ฐ์ถ์ ํ๊ธฐ (0) | 2023.09.02 |
CORS (0) | 2023.09.02 |