skip to Main Content

بررسی تعداد ورکرها در بهینه سازی nginx

تنظیمات مناسب برای تعیین تعداد ورکرها به چه صورت هست ؟‌

در ابتدا با استفاده از دستور زیر در لینوکس تعداد هسته های سی پی یو سرور رو در بیارید که این دستور فقط یک عدد برمیگرداند،

[php] nproc

۴

[/php]

در صورتی که نیاز به اطلاعات بیشتری دارید از دستور زیر استفاده کنید.

[php] lscpu

Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 2
Core(s) per socket: 2
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 94
Model name: Intel(R) Core(TM) i3-6100 CPU @ 3.70GHz
Stepping: 3
CPU MHz: 1352.957
CPU max MHz: 3700.0000
CPU min MHz: 800.0000
BogoMIPS: 7392.66
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 3072K
NUMA node0 CPU(s): 0-3
[/php]

اینکه تعداد ورکرها هر چه بیشتر باشد سرعت دست گرفتن پردازش و انجام آنها بالاتر است درست نیست و اگر ما تعداد ورکرها را در یک cpu تک هسته ای روی عدد دو بگذاریم هسته پردازش انگار به دو ورکر جواب میدهد و نیمی از هسته را به هر ورکر تخصیص میدهد و تاثیری در پرفرمنس ندارد.

روش :

بهترین روش برای تعیین ورکرها به ازای تعداد هسته های cpu هست .

برای اینکه بدانید در حال حاضر nginx چند ورکر دارد از دستور زیر استفاده کنید تا  بعد تعداد ورکرهای ایجاد شده  را ببینید.

[php] systemctl status nginx

nginx.service – A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2020-02-15 08:16:10 +0330; 3 days ago
Main PID: 1321 (nginx)
Tasks: 5
Memory: 3.1M
CPU: 25.246s
CGroup: /system.slice/nginx.service
├─۱۳۲۱ nginx: master process /usr/sbin/nginx -g daemon on; master_process on
├─۱۳۲۲ nginx: worker process
├─۱۳۲۳ nginx: worker process
├─۱۳۲۴ nginx: worker process
└─۱۳۲۵ nginx: worker process
[/php]

روش بی دغدغه تر برای تنظیم این عدد در فایل کانفیگ nginx این است که مقدار را برابر auto قرار دهید تا مقدار هسته های cpu را برای ایجاد تعداد ورکرها در نظر میگیرد.

[php] worker_processes auto;
[/php]

خوب نوبت اینه که بررسی کنیم ببینیم یک ورکر چند پروسس را میتواند همزمان انجام دهد. این عدد به یک پارامتر از سرور بستگی دارد که حداکثر تعداد فایلهای باز را مشخص میکند

برای به دست آوردن این عدد از دستور ulimit -n استفاده میکنیم که عددی که بر میگرداند ماکسیمم تعداد فایلی هست که میتواند به ازای یک هسته از cpu باز بماند.

[php]

ulimit -n

۱۰۲۴

[/php]

عدد به دست امده را به مقدار worker_connections در فایل تنظیمات nginx نسبت میدهیم که بیانگر این است که یک worker در لحظه چند فایل همزمان را میتواند پردازش کند

 

[php]

event {

worker_connections 1024;

}

[/php]

که فرمول زیر حاصل این توضیحات بالا میباشد:

[php]

worker_processes * worker_connections = max connections

[/php]

 

 

Back To Top