تعیین حداکثر تعداد کلاینت ها برای Apache/Prefork


چگونه حداکثر کلاینت ها را برای Apache/Prefork تنظیم کنیم :


اصول اولیه :
1-    تعیین مقدار RAM که برای آپاچی در دسترس است.
2-    تعیین مقدار RAM برای هر کاربر آپاچی
3-    تنظیم حداکثر تعداد کلاینت ها به : (مقدار RAM در هر فرآیند آپاچی) /(مقدار RAM در دسترس آپاچی)
4-    نظارت و تنظیم

چگونه مقادیر را تغییر دهیم :

مقادیر حداکثر تعداد کلاینت ها (MaxClients) در فایل اصلی main Apache configuration قرار گرفته است. بعنوان مثال /etc/apache2/apache2.conf یا /etc/httpd/httpd.conf .

بخش مربوطه مانند شکل زیر می باشد :




بعد از تغییر مقادیر فایل را دخیره کنید و Apache را با دستور apache2ctl graceful-stop && apache2ctl start ریستارت نمائید.


چرا این موضوع مهم است؟

یکی از شایع ترین دلایل سقوط یک وب سرور این است که تمام حافظه فیزیکی (RAM) موجود را مصرف می کند. وقتی که این اتفاق پیش می آید ، سیستم عامل با حرکت بر روی دیسک تلاش می کند مقداری از این فضا را آزاد کند. در لینوکس این عمل Swap Space و در ویندوز Page File نامیده می شود.  این فرآیند به منظور شکست دادن RAM  ( که دسترسی سریع به داده ها را فراهم کرده است) می باشد و نیاز به منابع ( CPU ، دیسک I/O ) برای انجام مبادله داده ها بین دیسک  و RAM دارد. فضای جابجایی هم می تواند بطور کامل مصرف شود، اما مشکل اصلی این است که در یک محیط با سرعت بالا مانند وب سرور ، سیستم به سرعت می تواند سرزیر شود و فقط تلاش برای مدیریت حافظه می تواند برای این سقوط موثر باشد. به همین دلیل به آن Thrashing می گویند.
به این کار اجتناب از شکست گفته می شود و تنها راه برای انجام این کار این است که آپاچی را از مصرف تمام RAM در دسترس نگهداری شود.


چگونه مقدار RAM موجود برای آپاچی را تعیین کنیم :

مقدار حافظه در دسترس برای آپاچی مجموع مقدار RAM روی سیستم منهای مقداری است که توسط تمام فرآیندهای دیگر استفاده می شود. متاسفانه ، تعیین مقدار RAM که بر روی سیستم استفاده می شود دشوار است. این مورد حتی از تعیین حداکثر حافظه ای که توسط دیگر فرآیندها زمانی که سرور تحت بار سنگین قرار دارد مشکل تر می باشد. حتی زمانی که شما در حال اجرای Mysql بر روی همان سیستم هستید کار محاسبه دشوار تر می شود. بطور معمول هر درخواست که توسط آپاچی بکار گرفته می شود حداقل یک اتصال با Mysql را باز می کند، بنابراین بعنوان یک درخواست آپاچی میزان مصرف RAM توسط Mysql افزایش می یابد. در کوتاه مدت، میزان مصرف حافظه Mysql بستگی دارد به اینکه چگونه آنرا توسط نرم افزار خود استفاده می شود. شما می توانید از اسکریپت mysqltuner  برای دریافت حداکثر مقدار Mysql استفاده کنید. اما اگر تنظمیات آپاچی شما به درستی صورت گرفته باشد به ندرت مشکلی درباره میزان حافظه خواهید داشت.

بهترین راهکار این است که Mysql را که مصرف بالایی دارد در یک سرور جداگانه قرار دهیم و بیشترین مقدار را برای آن سرور در نظر بگیریم و با توجه به Server load تنظیمات را انجام دهیم.
برای تمامی فرآیندهای دیگر مقدار 256MB را در نظر بگیرید.اگر شما در حال استفاده از خدمات دیگری همانند ماشین میزبانی مجازی هستید، ممکن است تمایل داشته باشید که از مقدار بیشتری استفاده کنید.
بنابراین در ابتدا برای یک سیستم معمولی 256MB +  حداکثر استفاده حافظه Mysql را در نظر بگیرید.


چگونه میزان RAM را برای مصرف هر فرآیند آپاچی تعیین کنیم :

باز هم، به حافظه مشترک (مخصوصا اگر از APC استفاده می کنید) بافر، دخیره و غیره توجه کنید. تعیین این موارد خیلی دشوار است. در تجربه ما، بهترین ابزار تعیین مصرف حافظه برای هر فرآیند  ps_mem.py می باشد.

خروجی ps_mem.py شبیه شکل زیر می باشد :


در اینجا مشاهده می کنید که 123 فرآیند Apache2 وجود دارد که در مجموع 4.3GB مصرف حافظه دارند بنابراین هر فرآیند آپاچی حدود 28MB از فضای RAM را استفاده می کنند. این سیستم حدود 8GB حافظه (RAM) دارد و اگرچه ysqltuner.pl گزارش می دهد که Mysql حداکثر 1GB از حافظه را مصرف می کند، ما می توانیم ببینم که مقداری که مصرف شده خیلی کمتر از 1GB می باشد. برای اطمینان برای دیگر فرآیندها 1.5GB حافظه در نظر می گیریم و میانگین مصرف آپاچی را به 32MB گرد می کنیم.
(6.5 x 1024) / 32 = 208
برای اطمینان بیشتر آنرا به 200  گرد می کنیم، زیرا بهتر است که کمتر تخمین زده شود.


نظارت کردن بر سرور :

فرآیندهای آپاچی و مجموع حافظه مصرف شده را مشاهده کنید . در اینجا دستوری داریم که خروجی یکسانی را نشان میدهد که هر ثانیه بروز رسانی می شود.
watch -n 1 "echo -n 'Apache Processes: ' && ps -C apache2 --no-headers | wc -l && free -m"

خروجی تولید شده مانند شکل زیر می باشد :



با استفاده از +/- سطر را بافر / ذخیره کنید. مقادیر برحسب MB می باشد. شما می توانید در یک نقطه از زمان ببینید که حدود 2.3GB  از حافظه استفاده می شود و 5.7GB از حافظه آزاد می باشد. اگر فرآیندهای آپاچی به تنظیمات حداکثر تعداد کلاینت ها نزدیک شوند و مقدار زیادی حافظه در دسترس خواهید داشت که شما می توانید قدم به قدم این مقدار راافزایش دهید تا این مقدار به کمتر از حداکثر تعداد کلاینت ها برسد و سپس آنرا Restart  کنید.

آیا این پاسخ به شما کمک کرد؟


 چاپ این مقاله

خوانده شده

18 دستور برای نظارت بر پهنای باند شبکه در سرور های لینوکسی

نظارت بر شبکه های لینوکسی: این مقاله به برخی از ابزارهای خط فرمان لینوکس اشاره میکند که می...

کانفیگ Name Server با استفاده از BIND بر روی CentOS 7

BIND یکی از محبوبترین سرورهای DNS است که در شبکه اینترنت استفاده می شود. این سرور میتواند...

بررسی فرآیندهای در حال اجرا بر روی لینوکس با استفاده از دستورات PS

دستورات بسیاری وجود دارد که با استفاده از آنها می توان فرآیندهای درحال اجرای بر روی سیستم لینوکس...

آموزش نصب Apache، MySQL و PHP بر روی سیستم عامل های لینوکس RHEL/CentOS و Fedora

در این مقاله نحوه نصب وب سرور آپاچی (آخرین نسخه)، بانک اطلاعاتی مای اس کیو ال (آخرین نسخه) و پی...

نصب ZFS بر روی یک سرور لینوکس CentOS6

فایل سیستم ZFS برای لینوکس بصورت source code وجود دارد که شما می توانید بصورت ماژول کرنل آنرا...

Powered by WHMCompleteSolution