در برخی از چارچوبهای پیشرفته (مثل Node.js) قابلیت بندکشی (threading) برایتان انجام میشود. سعیتان بر این است که برای انجام کارهای خود فراخوانیهای ورودی/خروجی (I/O) غیر بلوکی درست را در زمان درست به انجام برسانید و خط اصلی برنامه خود را از انجام بیش از اندازه بارهای سنگین مصون نگه دارید. به نتیجه نرسیدن این کار میتواند باعث نرسیدن ریسمانهای واقعی به سیستم شود.
دلایل بسیار زیادی وجود دارد که میتواند باعث کند شدن بیش از اندازه پایگاه داده شود. نخستین و مشخصترین عامل کمبود ایندکس است. اگر از یک پایگاه داده SQL استفاده میکنید، باید یاد بگیرید که ایندکسها چگونه کار میکنند. اگر از شرط where با سه جفت کلید/مقدار در آن استفاده میکنید و آن را بارها و بارها با مقادیر مختلف اجرا میکنید، احتمالا مشکلتان به یک ایندکس مربوط میشود. بهعنوان مثال:
-
اگر محاورههای سلسله مراتبی انجام میدهید یا رابطه بین دو ردیف را پیدا میکنید از RDBMS استفاده نکنید.
-
اگر معمولا روی یک پایگاه داده مبتنی بر کلید / ارزش جدولها را دوباره پیادهسازی میکنید، این کار را انجام ندهید. -
اگر اغلب با محاورههایFOAF (سرنام friend-of-a-friend) سر و کار دارید، شاید به یک نمودار نیاز داشته باشید. -
اگر با محاورههای بسیار زیادی با نام فیلد شرطی مثل Foo% سروکار دارید از یک ایندکس مثل Apache Solr (لااقل برای این قسمت) استفاده کنید.
اغلب نرمافزارهای تجاری پیشرفته روی نوعی ماشین مجازی مبتنی بر پشته (Stack) اجرا میشوند. منظور ما VMware یا Docker نیست، ما در مورد چیزی فراتر مثل ماشین مجازی جاوا JVM (سرنام Java Virtual Machine) صحبت میکنیم. بدون پرداختن به جزئیات نحوه عملکرد داخلی ماشینهای مجازی، باید بدانید که تقریبا تمام آنها نیاز دارند تا میزان مشخصی از حافظه را که پشته (Heap) نام دارد، به آنها اختصاص دهید. همچنین آنها هر زمان که یک ریسمان را اجرا میکنند انواع دیگری از حافظه را استفاده میکنند. اگر حافظه پشته آنها با کمبود مواجه شود، زمان بسیار زیادی را صرف مدیریت حافظه میکنند که باعث کند شدن عملکرد اپلیکیشن (تا زمانیکه کاملا از کار بیفتد) میشود. روی ماشین مجازی جاوا میتوانید رویداد گزارش Garbage-Collection را فعال کنید تا ببینید که چه میزان Collection در حال اجرا است. همچنین شما میتوانید میزان حافظه پشته را افزایش دهید، اما باید این کار را با دقت انجام دهید. خیلی از مردم فکر میکنند پشته تنها نوعی از حافظه است، اما یک گزینه اندازه استک –xss مربوط به ماشین مجازی جاوا وجود دارد. هر ریسمان مقدار مشخصی از حافظه استک را به خود اختصاص میدهد. اگر از دستوری همانند کد زیر استفاده کنید.
اگر 1000 کاربر همزمان و اتصال پنج پایگاه داده در pool داشته باشید، احتمالا در این pool با شرط انتظار مواجه خواهید شد. اگر روی همه اینها 100 ریسمان HTTP داشته باشید و تنظیمات صف انتظار اتصال TCP روی 5 باشد، بعد از اینکه 105 نفر تلاش کردند به پایگاه داده متصل شوند،احتمالا با پیغام connection refused مواجه خواهید شد، اما قبل از اینکه به این مرحله برسید کارها بهکندی انجام خواهد شد. علاوه بر این، بعضی از نرمافزارها یک رقم برای ریسمانهای قابلپذیرش دارند که اصولا به درخواست پاسخ داده و آن را به یکی دیگر از این ریسمانها ارجاع میدهد. معمولا یک یا دو نمونه از آنها وجود دارد. هیچ قانون ثابت و مشخصی برای تعیین کردن این ارقام وجود ندارد، اما باید مقدار آن را معقولانه انتخاب کرد. همچنین زمانیکه این کار را انجام میدهید دلیل 3 را هم در نظر داشته باشید، زیرا ممکن است با محدودیتهای دیگری مواجه شوید.
اغلب سیستمعاملها در تعداد ریسمانها و فایلهایی که یک کاربر سیستمعامل اجازه باز کردن آن را دارد، محدودیتهایی را اعمال میکنند. اگر در زمان اجرای اپلیکیشن به این محدودیت برسید، قبل از خطا با کندی سرعت مواجه خواهید شد. میتوانید این مسئله را در فایل گزارش مشاهده کنید. همچنین ابزارهایی وجود دارد که نشان میدهد چه فایلهایی قفلشده و چه فایلهای فعالی در حال استفاده هستند.
منبع: شبکه