خوب قبلا در این مورد کامل توضیح داده بودم که Memory در سیستم مجازی سازی چجوری هست.
یه بار دیگه هم می گم به طور کامل :
ابتدا باید بدونیم UBC یا User BeanCounter چی هست.
تعریف : تنظیماتی برای محدود سازی یا گارانتی های کنترل شده برای هر Container در سیستم های مجازی و ...
پارامتر های UBC در 3 دسته تقسیم می شود. primary parameters, secondary parameters و auxiliary parameters
آدرس فایل به /proc/user_beancounters می باشد که با CAT کردن می تونید اطلاعات رو برای تک تک Container ها بخونید و تحلیل کنید.
برای خوندن هر Container می توانید به شکل زیر عمل کنید و VEID اون رو وارد کنید.
egrep -A23 '^[[:space:]]+${CTID}:' /proc/user_beancounters
تحلیل به این شکل به شما این امکان رو می دهد که به طور مثال با زبان Ruby کدی نوشته و توی کنترل پنل های VPS از اون استفاده کنید و یا برای مشتری هاتون هر شب ایمیل کنید.
Field ها به صورت زیر هستند :
held : مقدار فعلی مصرفی
Maxheld : بیشترین مقدار مصرف شده
( توجه داشته باشید دوره این مقدارین به صورت Lifte Time می باشد، یعنی تا زمانی که سرور شما ریبوت نشده است )
دو پارامتر دیگر هم داریم که به نام های barrier و limits می باشند که مقادیر گارانتی با محدودیت نام دارند. فرق این مقادیر به شرح زیر هستند.
* limits, : بیش ترین مقدار مصرفی توسط Container
* guarantees, : این مقدار هم مثل Limit هست ولی بستگی به بقیه Container ها هم دارد. اگه توجه کرده باشید guar مخفف این کلمه هست و در مقدار های Resource مقادیری به نام های vmguarpages و oomguarpages
بعضی از مقادیر مثل kmemsize در صورتی که مقدار barrier آن ها گذرانده شود هیچ گاه به مقدار limits نخواهند رسید و سریعا Crash می کنند.
حال هر کدوم از این مقادیر واحد های مختص خودشون رو دارند. به طور مثال pieces و bytes و pages
2 حالت اول که همه بلد هستند و خدارو شکر همه سرور های TByte دارند که اشنایی کامل هم به مقادیر و نحوه محاسبه دارند.
page به این گونه هست :
is a range of consecutive addresses in the virtual address space whose size is a power of two. Those virtual addresses are translated in a corresponding range of consecutive physical addresses. The memory referenced by such a range is called a page.
برای سیستم های x86 و x86_64 برابر 4KB می باشد و روی سیستم های Intel Itanium (IA64) برابر 16KB هست.
برای اینکه روی سرور خودتون چک کنید می تونید از دستور C زیر استفاده کنید :
#include <unistd.h>
#include <stdio.h>
int main(int argc, char* argv[])
{
long sz = sysconf(_SC_PAGESIZE);
printf("memory pagesize on this box : %i\n", sz);
return 0;
}
و این جوری کامپایل کنید : gcc -o getpagesize getpagesize.c
ولی مطمئن باشید 4KB هست روی سرور شما
خوب برسیم به بقیه ماجرا که اصل کار این جاست که این پارامتر ها هر کدوم به چه درد می خورن !
Primary parameters
numproc : تعداد Task های روی سیستم عامل ( تعداد Process ها به طور کلی )
numtcpsock : تعداد Socket های TCP روی کانکشن شما
numothersock : تعداد Socket های دیگر روی کانکشن مثل UDP
vmguarpages : گارانتی Memory مصرفی
این مقدار کنترل مقدار موجود برای Virtual Environment ها هست. به طور کلی مقداری که Applications هی توسط malloc مصرف می کنند یا مقدار مصرفی سرویس های استاندارد لینوکس
Secondary parameters
kmemsize : مقدار Memory غیر قابل Swap که سیستم عامل استفاده می کند. این مقدار unswappable هست !
tcpsndbuf: مقدار کلی بافر مصرف شده برای ارسال داده از Protocolهای TCP
مقدار tcpsndbuf(limit) - tcpsndbuf(barrier) > 2.5KB * numtcpsock
حداقل مقدار برای ارسال 1 Packet
tcprcvbuf : مقدار کلی بافر مصرف شده برای دریافت داده از Protocolهای TCP
مقدار tcprcvbuf (limit) - tcprcvbuf (barrier) > 2.5KB * numtcpsock
dgramrcvbuf: مقدار بافر برای پکت های ورودی برای UDP و Protocols های دیگر
احتیاجی نیست این مقدار خیلی زیاد باشد !
oomguarpages : مقدار گارانتی شده Memory که به Over-Booked معروف می باشد. به طور کلی : out-of-memory kill guarantee
در صورتی که این مقدار کم باشد سیستم عامل به صورت اتوماتیک برای خالی کردن Memory یک سری از Process هارو Kill می کند.
privvmpages: کنترل مقدار Memory مصرفی برای Applications ها ( Memory اصلی برای کار هاستینگ )
Auxiliary parameters
lockedpages : به طور کلی Processهایی که قابل ذخیره و دسترسی به Swap رو ندارند.
shmpages : فضای Memory مشترک و Shared Memory
physpages : مقدار RAM مصرفی توسط Process ها در Container
numfile : تعداد open files
numflock: . تعدادfile locks.
numpty: من درست نمی دونم کارش چی هست !
numsiginfo: تعداد siginfo که توضیح خاصی براش ندارم و مربوط به Kmem و سیستم عامل هست.
dcachesize: مقدار Inodes های قفل شده در Memory
numiptent : تعداد NETFILTER (IP packet filtering) که در Iptables ها مورد استفاده قرار می گیرد.
swappages : مقدار SWAP در یک Container
برای آشنایی کلی پیشنهاد می کنم به این آدرس هم یه نگاه بندازید : maxgarrick.com Understanding OpenVZ resource limits
این جارو به فوت بزرگ می نویسم که برای همه خیلی جالب هست که یه مثال کلی می زنم که این اطلاعاتی که دادم چقدر مهم هست و چجوری می شه 400 VPS رو روی یه سرور به 2 گیگابایت رم راه اندازی کرد.
حالت A
یه VPS داریم به 2 گیگابایت رم و 4 گیگابایت Swap هم چنین 400 VPS که این گونه هستند :
یک HTTPD سرور سبک با 40 کانکشن به همراه FTP و دارای 15 Task باز !
یعنی به طور کلی 16000 تا Connection روی این سرور هست و حدود 6000 Task قابل Process
قابل توجه سایت های دانلود ! 16000 تا کانکشن باز کنید و به هیچ وجه دان نمی شوید.
حالت B
به مقدار های رم و SWAP قبلی این بار 120 VPS که هر کدام Web server, mail, FTP و DNS دارند و حدود 40 Task باز و 80 کانکشن باز روی این سرویس ها
باز هم دان نمی شوید
حالت C
با مقدار رم و SWAP قبلی این بار 8 VPS که هر کدوم از VPS ها از طریق FTP و Mail به 200 کاربر همزمان دیتا ارسال می کنند و دارای DATABASE ها سنگین هستند و هر کدام 200 Process دارند و بیش تز 500 کانکشن باز روی هر کدام هست !
جالب این جاست که خیلی از بچه هایی که کار هاستینگ می کنن روی یه سرور اختصاصی هم این قدر Task باز ندارند ولی همیشه Load سرور شون بالا هست.
باز هم دان نمی شوید !
حالت D
پدر یه سرور در بیاریم و روش فقط یه VPS اجرا کنیم !
سوال : آیا این حالت قوی تر از حالتی هست که از سرور Dedicated داریم استفاده می کنیم ؟
جواب : در بسیاری حالات تا 3 برابر قدرت شما بیشتر می شود !
سوال : خوب چرا این کار رو کسی نمی کنه ؟
جواب : VPS یه چیزه , Dedicated یه چیز دیگه ( تحقیقش رو یکی بکنه به همه اطلاع بده چه فرقی داره - ضمنا جناب آقای میرزاخانی می دونن که چرا ! ولی از ایشون سوال نکنید و خودتون تحقیق کنید )
جدول تنظیمات این حالات رو براتون گذاشتم یه چک کنید به دردتون می خوره !
سوال اساسی بعدی اینه که چه سروری بخریم و از کجا بخریم !
پیشنهاد من از کسی بخرید که اطلاعات کافی در مورد سیستم مجازی سازی داشته باشه.
من خودم با کسانی که صحبت کردم بدون اغراق می گم که حرف های آقای میرزاخانی برام جالب بود و پیشنهاداتی که روی CPU های سرور ایشون می دادن و اطلاعات کامل از سخت افزار داشتند. این بدین معنی نیست من تبلیغ ایشون رو می کنم ولی می تونید از ایشون اطلاعات خودتون رو بگیرید و برید از دیتاسنتر دیگری خرید کنید !
کلیه اطلاعات در سایت OpenVZ قابل مشاهده می باشد و یک سری از این اطلاعات رو هم گروه OpenVZ به contributor هاش داده بود که توی سیستم OpenVZ گروه ما Donate کرده بود برخی اطلاعات رو در اختیار ما قرار دادند.
اگه کسی می خواد باز به من بد و بی راه بگه لطفا در پیغام خصوصی مسائل شخصی تون رو ارسال کنید و آمادگی شو دارم.
با تشکر از دوستان





پاسخ با نقل قول