موارد العملية
موارد العملية
تحتاج العملية إلى موارد معينة مثل وحدة المعالجة المركزية والذاكرة لأداء المهام. الآن سننظر في الأوامر ذات الصلة واستدعاءات النظام لمعرفة المعلومات المتعلقة باستخدام الموارد والمراقبة. هناك أيضًا حدود معينة بشكل افتراضي لكل عملية على الموارد ، وإذا لزم الأمر ، يمكن تحسين الحدود لاستيعاب متطلبات التطبيق.
فيما يلي معلومات النظام الأساسي أو موارد العملية باستخدام الأوامر -
القيادة العليا
$ top
يعرض الأمر العلوي باستمرار استخدام موارد النظام. إذا أدت أي عملية إلى وضع النظام في حالة تعليق (تستهلك المزيد من وحدة المعالجة المركزية أو الذاكرة) ، فمن الممكن ملاحظة معلومات العملية واتخاذ الإجراء المناسب (مثل قتل العملية ذات الصلة).
الأمر ps
$ ps
يوفر الأمر ps معلومات حول جميع العمليات الجارية. هذا يساعد على مراقبة العمليات والتحكم فيها.
الأمر vmstat
$ vmstat
يقوم الأمر vmstat بالإبلاغ عن إحصائيات النظام الفرعي للذاكرة الظاهرية. يُبلغ عن معلومات العمليات (في انتظار التشغيل ، والنوم ، والعمليات القابلة للتشغيل ، وما إلى ذلك) ، والذاكرة (معلومات الذاكرة الافتراضية مثل المجانية ، والمستخدمة ، وما إلى ذلك) ، ومنطقة المبادلة ، وأجهزة الإدخال / الإخراج ، ومعلومات النظام (عدد المقاطعات ، ومفاتيح السياق ) ووحدة المعالجة المركزية (المستخدم والنظام ووقت الخمول).
الأمر lsof
$ lsof
يقوم الأمر lsof بطباعة قائمة الملفات المفتوحة لجميع العمليات الجارية حاليًا ، بما في ذلك عمليات النظام.
الأمر getconf
$ getconf –a
يعرض الأمر getconf معلومات متغيرات تكوين النظام.
الآن ، دعونا نلقي نظرة على مكالمات النظام ذات الصلة.
استدعاء النظام getrusage () ، والذي يوفر معلومات حول استخدام موارد النظام.
استدعاءات النظام المتعلقة بالوصول إلى حدود الموارد وتعيينها ، بمعنى ، getrlimit () ، setrlimit () ، prlimit ().
استدعاء استخدام موارد النظام
#include <sys/time.h> #include <sys/resource.h> int getrusage(int who, struct rusage *usage);
يقوم استدعاء النظام getrusage () بإرجاع المعلومات حول استخدام موارد النظام. يمكن أن يتضمن ذلك معلومات عن الذات أو الأطفال أو مؤشر ترابط الاستدعاء باستخدام العلامات RUSAGE_SELF و RUSAGE_CHILDREN و RUSAGE_THREAD للمتغير "who". بعد المكالمة ، تقوم بإرجاع المعلومات في هيكل rusage.
ستعيد هذه المكالمة "0" عند النجاح و "-1" عند الفشل.
دعونا نلقي نظرة على نموذج البرنامج التالي.
/ * اسم الملف: sysinfo_getrusage.c * /
#include<stdio.h> #include<sys/time.h> #include<sys/resource.h> void main(void) { struct rusage res_usage; int retval; retval = getrusage(RUSAGE_SELF, &res_usage); if (retval == -1) { perror("getrusage error"); return; } printf("Details of getrusage:\n"); printf("User CPU time (seconds) is %d\n", (int)res_usage.ru_utime.tv_sec); printf("User CPU time (micro seconds) is %d\n", (int)res_usage.ru_utime.tv_usec); printf("Maximum size of resident set (kb) is %ld\n", res_usage.ru_maxrss); printf("Soft page faults (I/O not required) is %ld\n", res_usage.ru_minflt); printf("Hard page faults (I/O not required) is %ld\n", res_usage.ru_majflt); printf("Block input operations via file system is %ld\n", res_usage.ru_inblock); printf("Block output operations via file system is %ld\n", res_usage.ru_oublock); printf("Voluntary context switches are %ld\n", res_usage.ru_nvcsw); printf("Involuntary context switches are %ld\n", res_usage.ru_nivcsw); return; }
خطوات التجميع والتنفيذ
Details of getrusage: User CPU time (seconds) is 0 User CPU time (micro seconds) is 0 Maximum size of resident set (kb) is 364 Soft page faults (I/O not required) is 137 Hard page faults (I/O not required) is 0 Block input operations via file system is 0 Block output operations via file system is 0 Voluntary context switches are 0 Involuntary context switches are 1
دعونا نلقي نظرة الآن على مكالمات النظام المتعلقة بالوصول إلى حدود الموارد وتعيينها.
#include <sys/time.h> #include <sys/resource.h> int getrlimit(int resource, struct rlimit *rlim); int setrlimit(int resource, const struct rlimit *rlim); int prlimit(pid_t pid, int resource, const struct rlimit *new_limit, struct rlimit *old_limit);
يحصل استدعاء النظام getrlimit () على حدود الموارد في بنية rlimit عن طريق إدخال المورد الذي يحتاجه المرء مثل RLIMIT_NOFILE و RLIMIT_NPROC و RLIMIT_STACK وما إلى ذلك.
يحدد استدعاء النظام setrlimit () حدود الموارد كما هو مذكور في بنية rlimit بقدر ما هو داخل الحدود.
يتم استخدام prlimit () استدعاء النظام لأغراض متنوعة ، مثل إما لاسترداد حدود الموارد الحالية أو لتحديث حدود الموارد إلى قيم جديدة.
يحتوي هيكل rlimit على قيمتين -
حد ضعيف - الحد الحالي
الحد الصعب - الحد الأقصى الذي يمكن تمديده إليه.
RLIMIT_NOFILE - إرجاع الحد الأقصى لعدد واصفات الملفات التي يمكن فتحها بواسطة هذه العملية. على سبيل المثال ، إذا تم إرجاع 1024 ، فإن العملية تحتوي على واصفات ملفات من 0 إلى 1023.
RLIMIT_NPROC - الحد الأقصى لعدد العمليات التي يمكن إنشاؤها لمستخدم لهذه العملية.
RLIMIT_STACK - الحد الأقصى للحجم بالبايت الخاص بمقطع المكدس لتلك العملية.
كل هذه المكالمات ستعيد "0" عند النجاح و "-1" عند الفشل.
دعونا ننظر في المثال التالي حيث نستخدم استدعاء النظام getrlimit ().
/ * اسم الملف: sysinfo_getrlimit.c * /
#include<stdio.h> #include<sys/time.h> #include<sys/resource.h> void main(void) { struct rlimit res_limit; int retval; int resources[] = {RLIMIT_NOFILE, RLIMIT_NPROC, RLIMIT_STACK}; int max_res; int counter = 0; printf("Details of resource limits for NOFILE, NPROC, STACK are as follows: \n"); max_res = sizeof(resources)/sizeof(int); while (counter < max_res) { retval = getrlimit(resources[counter], &res_limit); if (retval == -1) { perror("getrlimit error"); return; } printf("Soft Limit is %ld\n", res_limit.rlim_cur); printf("Hard Limit (ceiling) is %ld\n", res_limit.rlim_max); counter++; } return; }
خطوات التجميع والتنفيذ
Details of resource limits for NOFILE, NPROC, STACK are as follows: Soft Limit is 516 Hard Limit (ceiling) is 516 Soft Limit is 256 Hard Limit (ceiling) is 256 Soft Limit is 33554432 Hard Limit (ceiling) is 33554432
دعونا ننظر في مثال آخر مع استدعاء النظام getrlimit () ولكن الآن مع استدعاء النظام prlimit ().
/ * اسم الملف: sysinfo_prlimit.c * /
#include<stdio.h> #include<unistd.h> #include<sys/time.h> #include<sys/resource.h> void main(void) { struct rlimit res_limit; int retval; int resources[] = {RLIMIT_NOFILE, RLIMIT_NPROC, RLIMIT_STACK}; int max_res; int counter = 0; printf("Details of resource limits for NOFILE, NPROC, STACK using prlimit are as follows: \n"); max_res = sizeof(resources)/sizeof(int); while (counter < max_res) { retval = prlimit(getpid(), resources[counter], NULL, &res_limit); if (retval == -1) { perror("prlimit error"); return; } printf("Soft Limit is %ld\n", res_limit.rlim_cur); printf("Hard Limit (ceiling) is %ld\n", res_limit.rlim_max); counter++; } return; }
خطوات التجميع والتنفيذ
Details of resource limits for NOFILE, NPROC, STACK using prlimit are as follows: Soft Limit is 516 Hard Limit (ceiling) is 516 Soft Limit is 256 Hard Limit (ceiling) is 256 Soft Limit is 33554432 Hard Limit (ceiling) is 33554432
<< الصفحة الرئيسية