پیکربندی استخر نخ برای وب سرورهای جاوا – راهنمای پیشرفته
در این راهنما به بررسی روش پیکربندی استخر نخ برای وب سرورهای جاوا مانند Apache Tomcat، Glassfish Server و Oracle Weblogic میپردازیم.
استخرهای نخ سرور
استخرهای نخ سرور از سوی سرور وباپلیکیشن برای اپلیکیشنهای توزیعیافته استفاده و مدیریت میشوند. این استخرهای نخ خارج از کانتینر وب یا سرورلت قرار دارند و از این رو در معرض همان کران کانتکست قرار ندارند.
برخلاف نخهای اپلیکیشن، نخهای سرور حتی پس از توقف اپلیکیشن توزیعیافته نیز به حضور خود ادامه میدهند.
آپاچی تامکت
ابتدا میتوانیم استخر نخ سرور تامکت را از طریق کلاس پیکربندی Executor در فایل server.xml به صورت زیر پیکربندی کنیم:
minSpareThreads برابر با کوچکترین استخری است که در زمان آغاز به کار وجود خواهد داشت. maxThreads بزرگترین استخری است که پیش از آغاز صفبندی درخواستها از سوی سرور وجود خواهد داشت.
مقادیر پیشفرض تامکت برای این دو گزینه به ترتیب برابر با 25 و 200 است. در این پیکربندی ما استخر نخ را به طور پیشفرض کمی کوچکتر کردیم.
تامکت Embed –شده
به طور مشابه میتوانیم یک سرور تامکت Embed-شده برای Spring Boot را ویرایش کنیم تا استخر نخ را با تعیین مشخصه اپلیکیشن تعیین نماییم:
Glassfish
در این بخش سرور Glassfish را بهروزرسانی میکنیم. Glassfish برخلاف فایل پیکربندی XML در تامکت، از یک دستور ادمین استفاده میکند. بنابراین در اعلان دستور زیر را اجرا میکنیم:
میتوانیم فلگهای create-threadpool و minthreadpoolsize را به create-threadpool اضافه کنیم. این فلگها عملکردی مشابه minSpareThreads و maxThreads در تامکت دارند:
همچنین میتوانیم طول مدتی که یک نخ میتواند پیش از بازگشت به استخر بیکار بماند را به صورت زیر تعیین کنیم:
سپس نام استخر نخ را به انتها اضافه میکنیم:
Weblogic
Oracle Weblogic به ما امکان میدهد که استخر نخ خود-تنظیم را با یک WorkManager تغییر دهیم. WorkManager مشابه صفهای نخ استخر نخ را مانند یک صف مدیریت میکند. با این حال، WorkManager نخهای دینامیک را بر اساس نرخ عملکرد آنی اضافه میکند. Weblogic به طور مرتب عملکرد را تحلیل میکند تا کاربرد نخها را بهینهسازی نماید.
معنی این حرف آن است که وقتی اقدام به دستکاری استخر نخ بکنیم، وبسرور در نهایت در مورد این که باید نخهای جدیدی ایجاد کند یا نه تصمیم میگیرد. ما میتوانیم استخر نخ را در کنسول ادمین Weblogic پیکربندی کنیم:
با بهروزرسانی مقادیر Self Tuning Minimum Thread Pool Size و Self Tuning Thread Maximum Pool Size کرانهای کمینه و بیشینه را برای WorkManagers تعیین میکنیم. به مقادیر Stuck Thread Max Time و Stuck Thread Timer Interval توجه کنید. این مقادیر به WorkManager کمک میکنند تا WorkManager نخهای گیرکرده را دستهبندی کند.
برخی اوقات یک پردازش که از مدتها قبل اجرا شده ممکن است موجب انباشته شدن نخهای گیر افتاده شود. WorkManager برای جبران این موضوع نخهای جدید را از استخر نخ ایجاد میکند. هر بهروزرسانی در این مقادیر میتواند روی مدت زمانی که طول میشد تا پردازش پایان یابد، تأثیر بگذارد.
نخهای گیر افتاده میتوانند نشانی از مشکلات کد باشند، از این رو همواره بهتر است که ریشه اصلی را حل کنید تا این که به دنبال روشی برای دور زدن باشید.
سخن پایانی
در این راهنما به بررسی روشهای مختلف پیکربندی استخرهای نخ سرور اپلیکیشن پرداختیم. با این که تفاوتهایی در روش مدیریت استخرهای نخ از سوی سرورهای اپلیکیشن مختلف وجود دارد، اما آنها با استفاده از مفاهیم مشابهی پیکربندی میشوند.
در نهایت به خاطر داشته باشید که کش کردن مقادیر پیکربندی برای وبسرورها، روش مناسبی برای اصلاح عملکرد ضعیف کد و طراحی بد اپلیکیشن محسوب نمیشود.