در مورد لود سرور میخوایم صحبت کنیم به نقل از wikipedia در اصل server load یعنی یک معیار دجیتال برای اندازه گیری مقدار و حجم عملیات هایی که در حال انجام روی سرور یا کامپیوتر شخصی انجام میشه و معمولا به صورت درصد و عددی بیان میشه خوب این رو میشه توی لینوکس با یکی از دستور ها ی uptime یا w با top فهمید .
به عنوان مثال

کد:

root@cpanel-4 [/home]# uptime 15:35:20 up 9 days, 4:55, 1 user, load average: 0.83, 1.20, 1.22 root@cpanel-4 [/home]#

اون ۳ عددی که اونجای می بینید نشون دهنده ی لود سرور در ۱ ؛ ۵ ؛ ۱۵ دقبقیه اخیره … یعنی در یک دقیقه ی پیش لود سرور ۴ ما ۰٫۸۳ درصد بود و در ۱۵ دقیقه ی گذشته ۱٫۲۲ درصد بوده .
server load چه عددی باشه یعنی خوبه؟ لود متعادل یعنی یک عدد بین ۱ و ۱٫۵ درصد برای هر CPU معمولی ( به کلمات دقت کنید .. .) وقتی واسه یه همچین سروری لود روی این اعداد باشه یعنی cpu داره همه ی task ها رو به خوبی و بدون مشکل انجام میده و به هیچ task ی wait نمیده …
اگه یه سرور با ۱۰۰ تا سایت داشتیم لود سرور روی ۰ بود یعنی خوبه ؟ نه اگه یک همچین اتفاقی براتون افتاد بدونید وب سرورتون down هست چون با ۱۰۰ تا سایت امکان نداره لود سرور ۰٫۰۰ باشه ..
خوب حالا اگه لود سرور از این اعداد استاندارد بالاتر بود , چه اتفاقی میفته؟ برای این سرور اگه لود از ۱ بالاتر بره task های اضافی میمونن توی صف (queue) بعد به نوبت میرن و انجام میشن .
خب مشکل خاصی پیش نمیاد همه کارشون رو انجام میدن فقط صدای مشتری ها درمیاد که سرور کند شده…. ولی وای به روزی که لود سرور از ۱۰ درصد (یعنی ۴-۵ برابر لود استاندارد اون سرور) این همون موقعیه که service هایی مثل apache و mysql شروع میکنند به fail شدن چون زیاد نمیتونند تو wait بمونند.
معمولا زودرنج ترین service ها به ترتیب mysql , mail server , apache هستند که سریع fail میشن و صدای همه در میاد.
ما یه سرور داریم از کجا بدونیم لودش چنده ؟ معمولا مشخص می کنند اون سرور چندتا cpu داره به عنوان مثال اگه یه سرور dual core باشه سرور لود اصلی اون عددی که اونجا نشون داده میشه تقسیتم بر ۲ هست .
این برای اینه که وقتی ما چند تا cpu داشته باشیم task ها بین این cpu ها تقسیم میشن و دستور های uptime و top و w مجموعشون رو نشون میده که عدد واقعی رو باید از تقسیم اون عدد بر تعداد cpu ها بدست اورد. سرور های xeon هر cpu به اندازه ۲ تا cpu کار می کنه یعنی dual xeon ها درواقع ۴ تا cpu حساب میشن.
مثلا در مثال بالا لود واقعی سرور ۴ ما در ۱۵ دقیقه ی گذشته ۰٫۳۰۵ درصد بوده چرا لود سرور بعضی وقت ها به طور ناگهانی زیاد میشه !؟ خوب این چیزیه که اکثر همکاران ما و مشتریانی که با سرور های dedicated و vps باهاش درگیر هستند .
لود بالای سرور دلایل مختلفی داره مه در زیر به اونها اشاره می کنم.
۱- سایت های بزرگ و فروم های پر تراکم:
اگر روی سرورتون سایت پربازدیدی مثل سایت های ماهواره ی یا تالار های گفتمان یا سایت های خدماتی دارید هاست می کنید یا به تازگی یکی از reseller های شما از این قبیل سایت ها هاست کرده شما با pick های cpu مواجه خواهید شد. دیلیلش اینه که معمولا این script ها برای این حجم کاربر optimize نشده و تعداد connection هایی که برای هرکاربر باز می کنه تا اطلاعات رو بهش نشون بده به قدری بالا میره که در یک لحظه سرویس mysql شاید بیش از ۱۰۰۰۰ task برای cpu داشته اونم فقط واسه یک سایت .
ما این مشکل رو برای سایت های phpnuke قدیمی داشتیم – در ابتدای کار هیچ مشکلی پیش نمیاد چون سایت طرف visitor ی نداره ولی بعد از ۵ -۶ ماه تا سایت پر بازدید میشه می بینیم حجم زیادی از resource بابت یه سایت کوچیک اشغال شده … (راه حلش اینه که این به ورژن optimize شده nuke که در ایجاد connection سرویس mysql بسیار خوب عمل میکمه ارتقا بدید مثل EVO nuke) بعضی وقت ها هم ایراد از script نیست واقعا حجم زیادی بازدید کننده داره سایت؛ مثل سایت p30download.com خوب هاست کردن چنین سایتی روی سرور shared ی که ازش انتظار پشتیبانی ۳۰۰-۴۰۰ سایت قدونیم قد دیگه داریم دیوانگیه … به طور کلیه هر سرور باید در حدی روش هاست بشه که هیچ سایتی برای سایت دیگر اختلالی ایجاد نکنه و همه به طور عادلانه از resource استفاده کنن.
نمیشه گفت روی هر سرور چند تا سایت میشه هاست کرد این به تجربه شما بستگی داره و اگر ۴-۵ سال به اصطلاح ما خاک سرور خورده باشید میتونید راحت حدث بزنید چند تا از چه نوع سایتی روی این سرور میشه هاست کرد.(اکثر شرکت های کم تجربه ی همکار هروفقت سرور شروع به fail کردن و down شدن کرد به فکر سرور جدید و balancing می افتند) البته ما برای شروع کار هر سرور طبق یک فرمولی تعداد سایت های مجاز رو حدث میزنیم و معمولا ۳۰ % از resource رو باز میگزاریم برای رشد احتمالی سایت ها و reseller های روی اون سرور یعنی از ۱۰۰ درصد روی ۷۰ درصد برنامه ریزی می کنیم .
۲- script های غیرمجاز و spammer ها اگر از ما سرویس داشته باشید میبینید در بالای همه ی سرور های cpanel به هقت زبان زنده ی دنیا و با warnning قرمز رنگ نوشتیم phpproxy, spamming و script هایی که از resource سرور بیش از حد استفاده می کنند upload نکنید . ولی باز هم کاربر ها با آگاهی یا بدون اگاهی از این فعالیت ها انجام میدن . اصولا سرور های shared برای سرویس های ارسال ایمل و خبرنامه یا proxy در نظر گرفته نشده و بی توجهی شما به این گونه موارد باعث میشه که سرور به مشکل بر بخوره..
بنابراین اگر خواهان سرویس stable هستید این موارد رو جدی بگیرید.
۳- بعضی وقت ها لود بالای سرور به خاطر اجرا شدن task های crontab خود سرور هست … به عنوان مثال backup گیری تولید stats ها از log های سرور و بقیه کارهای روزمره از این قبیل هستند. که ادمین سرور باید بر اساس تجربه و شناختی که روی این سرور داره ساعات خاصی رو برای انجام این کار ها تنظیم کنه مه هم روی هم نیافته و هم در ساعات پرترافیک باعث اختلال کار سرویس های مختلف نشه .
۴- زیاده فروشی؟؟؟ یا oversalling خب اکثر ما ایرانیا عادت داریم حداکثر استفاده رو از چیزی که داریم بکنیم . بعضی از این مسافر کش ها در سطح شهر ادم رو بیاد این مسئله میاندازند .
در بیشتر اوقات لود بالای سرور به همین خاطر هست ، و این هم به این دلیل است که شرکت ها بیش از اون resource که در دست دارند ارائه خدمات می کنند و این بعد از گذشت چند ماه خودش رو به صورت لود بالا و به مراتب down شدن سرویس ها نشون میده .
این تفکر که کاربر از این مقدار فضایی مه خریده استفاده نمیکنه غلط ترین تفکر یک مدیر سرور ه. اگر شما به عنوان مدیر سرور تمایل داشتید چنین کاری کنید باید چند نکته را در نظر داشته باشید . اول باید monitoring سرور ۲۴ ساعته باشه روی ۳ سرویس اصلی mysql – apache – mail تا به محض احساس مشکل بتونید دست به کار بشید. دوم بیش از ۷۰ – ۷۵ درصد از چیزی که فکر می کنید سرور میتونه تحمل کنه رو روش حساب نکیند. همیشه reseller ها و سایت هایی که هنوز شروع به کار نکردند رو در نظر بگیرید هیج وقت به مشکل بر نمی خورند.
گاهی اوقات لود بالا به خاطر restart شدن مدام سرویس هاست . بهترین راه برای کاهش فشار روی سرور restart کردن سرویس هاست این باعث میشه که memory cache مربوط به اون سرویس از حافظه پاک بشه و جا برای request های جدید باز بشه . باید بگم که زمان این restart ها بسیار مهمه – بعضی از مدیران برای استفاده هرچه بیشتر در یک بازه ی زمانی بسیار کم سرویس ها رو restart می کنند این باعث میشه در لحظه start شدن سرویس لود سرور بالا بره و این بستگی به حجم request های اون سرویس در اون لحظه داره – اگر حجم خیلی زیاد باشه شاید با چنیدن باز restart هم سرویس start نشه . (البته فقط قرار بود دلیل لود بالا رو توضیح بدیم و وارد مسائل جانبی نشیم .
با این حال بزودی مطالب مفیدی در مورد مدیریت سرور های لینوکس ارادئه میدیم ) – لطفا غلط املائی و تایپی رو به بزرگواری خودتون ببخشید.

یا حق

نگارش یافته توسط فرشاد اسماعیلیان در ۲۰ فروردین ۱۳۸۸ ، ساعت ۴:۱۳ بعد از ظهر - آموزش هاي لينوكس - نظرات (بدون نظر)
می توانید نظرات این نوشته را با خوراک RSS 2.0 پیگیری کنید. شما می توانید نظر خود را ثبت کنید.

نظرات (بدون نظر)
ثبت نظر
متن نظر: