PDA

View Full Version : optimize كردن tomcat



amirjalili
پنج شنبه 21 آبان 1388, 10:48 صبح
با سلام خدمت دوستان..
همونطور كه ميدونيد تنظيمات default در tomcat مناسب براي سايت هايي با استرس كم هست و در ترافيك هاي بالاي شبكه ايجاد مشكل خواهد شد.
در اين صورت بايد تنظيماتي رو انجام داد كه سايت در اين صورت مشكل نداشته باشه.

در زير راهكارهايي رو براي اين كار بيان ميكنيم.

1:افزايش heap جاوا با دستور زير در command:


-Xms32m -Xmx128m


در اين مثال 32 حداقل مقدار heap و 128 حداكثر مقدار heap هست .
اين افزايش Heap رو ميتوانيد از قسمت config هاي tomcat در تب java نيز انجام بدهيد..
توجه كنيد كه ماكزيمم مقدار heap تا هشتاد درصد ram شما هست. (با توجه به چيزي كه در سايت هاي مرجع نوشته بود.)


2: در فولدر config تام كت در server.xml بايد مقاديري از كامبونت هاي tomcat را تغيير دهيد يا اضافه كنيد.
در زير ابتدا يك أشنايي كلي با component هاي tomcat خواهيم داشت :
همانطور كه ميدانيد انواع pool ها نقش مهمي در افزايش كارايي web application دارد.

انواع pool هاي تعريف شده در component هاي موجود در SERVER.XML عبارتند از :

1:Connector Thread Pool
Connector Thread Pool استخري از thread ها هست كه كانكشن هاي را از port هاي استاندارد tomcat قبول ميكند.
Connector Thread Pool نقش مهمي رو در ظرفيت عبور دهي tomcat دارد و هر درخواست منفرد به connector pool هدايت ميشود.
درصورتيكه اين pool كم باشد و تعداد request ها زياد باشد درخواست رد(deny) ميشود.

دو attribute در اين بخش وجود دارد كه عبارتند از :
- Minimum number of spare threads با مقدار پيش فرض 4
-Maximum number of threads in the pool با مقدار پيش فرض 200

طبق چيزي كه من در سايت ها ديدم مقدار اين Maximum number of threads بين 500 تا 750 اگر تنظيم بشه مناسبه و اگر 1000باشه بايد tomcat رو cluster كرد. اميدوارم دوستان هم در اين مورد كمك كنند.


2:Database Connection Pool

كامپونت Database Connection Pool در همه اپليكيشن هاي j2ee بسيار مهم است.
به صورت پيش فرض دو attribute وجود دارد :

idle connections: كانكشن هاي أزاد در استخر
max active connection : كانكشن هاي فعال در استخر

اگر connction ها تحليل برود application قادر به ارتباط با ديتابيس نخواهد بود.
شما بايد با توجه به werb application خود اين مقادير رو تنظيم كنيد.

باز هم اگر دوستان و اساتيد تجربه اي راجع به مقدار اين attribute ها دارند بيان كنند.
من خود حداكثر مقدار max active connection رو كه ديدم 100 بوده اما با توجه به نوع سايت و حجم استفاده از ديتابيس متفاوته.
البته attribute هاي ديگه اي هم وجود داره كه بعدا راجع بهشون صحبت خواهيم كرد.

از دوستان هم ميخوام اگر اطلاعاتي دارن در اختيار دوستان قرار دهند.

اميدوارم مفيد بوده باشه.

amirjalili
شنبه 23 آبان 1388, 11:47 صبح
اينم يه لينك خوب براي اطلاعات كاملتر :
http://www.devx.com/Java/Article/32730

ناصرقلی
یک شنبه 24 آبان 1388, 10:26 صبح
در نظر داشته باشید که حد اکثر مقدار هیپ در یک دستگاه با سیستم عامل 32 بیتی در حدود 1700 مگابایت می تواند باشد (البته از نظر تیوری این مقدار روی دستگاه 32 بیتی 2 گیگ است) بنابر این برای استفاده بیشتر از حافظه باید از سیستم عامل 64 بیتی روی دستگاه 64 بیتی استفاده کنید.
برای افزایش سرعت تامکت روی ویندوز می توانید dll های تامکت را نیز گرفته و در جای مناسب قرار دهید تا برخی از دسترسی های تامکت به سیستم عامل به صورت native صورت گیرد.

amirjalili
دوشنبه 25 آبان 1388, 18:46 عصر
با تشکر از جناب ناصر قلی
از دوستان عزیز میخواهم اگر تجربه ای هم درباره افزایش کارایی web application در request های بسیار زیاد دارند مطرح کنند.
optimize کردن tomcat یکی از راههای بهینه سازی کارکرد web application بود. بقیه را دوستان و اساتید گرامی لطف کنند و در اختیار برنامه نویسان جاوا قرار بدهند.
مثلا چطوری yahoo میتونه درخواست های بالا رو پاسخگو باشه اما همین سایت برنامه نویس گاهی پیغام سیستم نشون بده و نتونه از یه مقداری بیشتر رو پاسخگو باشه. ما بیایم و همینو در جاوا مورد بررسی قرار بدهیم.
ممنون.

ناصرقلی
سه شنبه 26 آبان 1388, 15:54 عصر
من سیستمی که بتواند با سرعت و اطمینان بالا به درخواستهای زیاد پاسخ دهد و از کلاسترینگ و یا توزیع بار استفاده نکرده باشد. البته کلاسترینگ می توان به راههای ساده تری از روشی که تامکت در اختیار قرار می دهد نیز صورت گیرد اما روش خود تامکت نیز موثر است.

amirjalili
چهارشنبه 27 آبان 1388, 09:11 صبح
با سلام..
راجع به cluster کردن tomcat مقالات زیادی هست..
اما من خودم به زبان خودمونی متوجه نشدم درcluster کردن دقیقا چه اتفاقی میفته و چه مزیتی داره. فقط میدونم به معنی خوشه ای کردن هست.
لطفا اگه میشه توضیحی رو ارائه بدهید.
دلیل اینکه میخوام این مبحث ها این جا مطرح بشه برای اینه که منبعی به زبان فارسی به منابع خیلی کم موجود در مباحث جاوا اضافه بشه.
با تشکر

ناصرقلی
چهارشنبه 27 آبان 1388, 09:50 صبح
در کلاسترینگ تمام درخواستهایی که از کلاینت ها دریافت می شود توسط یک load balancer بین تعدادی سرور توزیع می شود.در ضمن session نیز به گونه ای مدیریت می شود که با وجود توزیع درخواستها روی سروهای مختلف اطلاعات در session به صورت درست ذخیره و بازیابی شوند. به عنوان نمونه تامکت می تواند اطلاعات session را به جای رم در بانک اطلاعاتی ذخیره نماید تا این نیاز را بر آورد.
بر روی هر یک از سرورهای کلاستر باید نرم افزار کاربردی مورد نظر نیز با پیکره بندی یکسان نصب شود.