2013-07-08 6 views
5

मैं अपने ऐप को विकसित करने के लिए Play Framework 2.1 का उपयोग कर रहा हूं। यह उपयोग में आसान ढांचे है। मैं अपने ऐप को जल्दी से विकसित करने में सक्षम हूं। लेकिन मैं कुछ स्केलेबिलिटी मुद्दों में भी भाग गया। ऐसा लगता है कि प्ले 2.1 दावा के रूप में तेजी से नहीं चलता है। शायद ऐसा इसलिए है क्योंकि मुझे प्रदर्शन को ट्यून करने के बारे में पता नहीं था।प्ले फ्रेमवर्क ऐप की स्केलेबिलिटी को कैसे ट्यून करें?

मेरी समस्या निम्न है: मेरे पास एक ईमेल है जो उपयोगकर्ता को अपने ईमेल के साथ लॉगिन करने के लिए है।

मैंने प्रदर्शन का उपयोग करने के लिए अपाचे बेंचमार्क (एबी) का उपयोग किया। एक एकल अनुरोध के बारे में 230ms लगता है। जब 5 समवर्ती अनुरोध होते हैं, तो प्रतिक्रिया समय अभी भी लगभग 280 मिमी तक पर्याप्त तेज़ है।

Concurrency Level:  5 
Time taken for tests: 0.306 seconds 
Complete requests:  5 
Failed requests:  0 
Write errors:   0 
Total transferred:  3495 bytes 
Total POSTed:   1065 
HTML transferred:  3135 bytes 
Requests per second: 16.34 [#/sec] (mean) 
Time per request:  306.009 [ms] (mean) 
Time per request:  61.202 [ms] (mean, across all concurrent requests) 
Transfer rate:   11.15 [Kbytes/sec] received 
         3.40 kb/s sent 
         14.55 kb/s total 

Connection Times (ms) 
       min mean[+/-sd] median max 
Connect:  1 1 0.1  1  1 
Processing: 280 290 13.8 292  305 
Waiting:  278 288 13.7 291  304 
Total:  280 291 13.9 293  306 

हालांकि, जब मैंने 100 समवर्ती अनुरोधों का उपयोग किया, तो मुझे बहुत बुरे परिणाम मिले।

Concurrency Level:  100 
Time taken for tests: 4.243 seconds 
Complete requests:  100 
Failed requests:  0 
Write errors:   0 
Total transferred:  69900 bytes 
Total POSTed:   21300 
HTML transferred:  62700 bytes 
Requests per second: 23.57 [#/sec] (mean) 
Time per request:  4243.058 [ms] (mean) 
Time per request:  42.431 [ms] (mean, across all concurrent requests) 
Transfer rate:   16.09 [Kbytes/sec] received 
         4.90 kb/s sent 
         20.99 kb/s total 

Connection Times (ms) 
       min mean[+/-sd] median max 
Connect:  1 62 31.5  83  89 
Processing: 996 3744 544.7 3902 4146 
Waiting:  995 3727 542.0 3894 4146 
Total:  1084 3806 542.6 3968 4204 

मेरा सर्वर मशीन: इंटेल i7, 8 कोर, 2.8GHz, 8GB मेमोरी। मैंने प्ले फ्रेमवर्क की डिफ़ॉल्ट सेटिंग का इस्तेमाल किया। कोई भी जानता है कि प्ले फ्रेमवर्क के प्रदर्शन को कैसे ट्यून करें?

मुझे लगता है कि यह थ्रेड पूल आकार से संबंधित है। दस्तावेज़ कहता है कि प्ले का डिफ़ॉल्ट थ्रेड पूल आकार # कोर है। उस स्थिति में, सभी 100 अनुरोधों को संभालने के लिए अपेक्षित समय है:

230ms * (100/8) = 2875ms 

तो, क्या मुझे डिफ़ॉल्ट थ्रेड पूल का आकार बढ़ाना चाहिए? लेकिन दस्तावेज कहता है कि पूल आकार # कोर के बराबर होने पर मुझे सबसे अच्छा प्रदर्शन मिलना चाहिए।

इसके अलावा, नेटटी (प्ले का वेब सर्वर) थ्रेड पूल आकार प्रदर्शन को प्रभावित करेगा? मुझे इसके डिफ़ॉल्ट मान के बारे में कोई जानकारी नहीं मिली। कोई भी जानता है कि यह कैसे कॉन्फ़िगर किया गया है?

धन्यवाद!

+0

ऐसा लगता है कि आपका प्रश्न प्रदर्शन की बजाय स्केलेबिलिटी को लक्षित कर रहा है। प्रदर्शन के संबंध में, आईएमएचओ 230 एमएमएस/रिक भी तेज़ नहीं है, इसलिए मैं यह भी जांचूंगा कि इसके लिए क्या कारण है। क्या आपके पास कोई समय है जो अधिकतर समय ले रहा है, उदा। बैकएंड कॉल, ऐप विशिष्ट गणना या टेम्पलेट प्रतिपादन? – MartinGrotzke

+1

सुनिश्चित करें कि आप 'play start' चलाकर PROD मोड में Play के विरुद्ध बेंचमार्किंग कर रहे हैं। ऑटो मोड में ऑटो-रीलोड के लिए ओवरहेड का एक टन है। –

उत्तर

6

Play का डिफ़ॉल्ट थ्रेड कॉन्फ़िगरेशन उन अनुप्रयोगों के लिए डिज़ाइन किया गया है जो एसिंक्रोनस एपीआई का उपयोग करते हैं।

यदि आप बहुत से ब्लॉकिंग कॉल (आमतौर पर, "मानक" जेडीबीसी डेटाबेस कॉल) करते हैं, तो आपको डिफ़ॉल्ट थ्रेडपूल को समायोजित करने की आवश्यकता होगी, या किसी अन्य विशेष रूप से कॉन्फ़िगर किए गए थ्रेडपूल में अपने डीबी कॉल निष्पादित करने की आवश्यकता होगी।

इन सभी तंत्रों को समझने के लिए, मैं आपको Play Framework दस्तावेज़ के Thread Pools अनुभाग को पढ़ने के लिए सुझाव दे सकता हूं। इसमें इस विषय पर बहुत उपयोगी सूचनाएं हैं।

0

-Xmx32000m उदाहरण के लिए 32 जीबी ढेर मेमोरी के साथ आपका जेवीएम चलाता है।

-Xmx256m डिबगिंग मोड के लिए डिफ़ॉल्ट के आसपास है ताकि आप इसे अपने सर्वर की रैम मेमोरी स्पेस के भीतर विस्तारित करना चाहते हैं। आपकी मशीन की आई/ओ दर के आधार पर, कचरा संग्रहण चक्र रोकने के लिए बहुत कुछ है, लेकिन आमतौर पर ~ 20ms है और ऐप के उद्देश्य के आधार पर ध्यान देने योग्य नहीं है।

संबंधित मुद्दे